课程名称:JavaScript版数据结构与算法
课程章节:第2章 时间/空间复杂度计算
主讲老师:lewis
课程内容:
今天学习的内容包括:
2-1 时间复杂度计算——时间复杂度越小,运行时间越快。
2-2 空间复杂度计算——空间复杂度占用越小,代码越好。
课程收获:
时间复杂度:描述算法的运行时间,详见【图一】
相加:当同时存在两个时间复杂度时,以更大的时间复杂度为准 如:O(1) + O(n) = O(n)
相乘:嵌套循环复杂度相乘如:O(n) * O(n) = O(n²)
代码示例记录如下:
O(1)
let i = 0; i+=1;
O(n)
for (let i = 0; i < n; i +=1){
console.log(i);
}O(1) + O(n) = O(n)
let i = 0;
i += 1;
for (let j = 0; j < n; j += 1){
console.log(j);
}O(n) * O(n) = O(n²)
for (let i = 0; i < n; i += 1){
for (let j = 0; j < n; j += 1){
console.log(i,j);
}
}O(logN)
let i=1;
while (i<n){
console.log(i);
i *= 2;
}通过这些了解到:
时间复杂度排序:O(1) < O(logn) < O(n) < O(n²)
O(1):代码中没有循环,代码本身只执行一次
O(n):代码中有循环,代码会循环n次
当同时存在两个时间复杂度时,以更大的时间复杂度为准,如:O(1) + O(n) = O(n)
如存在嵌套循环,则复杂度相乘,如:O(n) * O(n) = O(n²)
空间复杂度:算法在运行过程中临时占用存储空间大小的量度
一个函数,用大O表示,比如O(1)、O(n)、O(n²)......
代码示例记录如下:
O(1)
let i = 0; i+=1;
O(n)
const list = [];
for (let i = 0; i <n; i += 1) {
list.push(i);
}O(n²)
const matrix = [];
for (let i = 0; i<n; i += 1) {
matrix.push([]);
for (let j= 0; j <n; j += 1) {
matrix[i].push(j);
}
}根据这两节内容,初步了解了时间复杂度和空间复杂度对程序的影响,初步了解到要想写出优秀的代码需要把控算法细节。初步了解了算法的魅力。
坚持学习,学习JavaScript算法,提升个人能力,写出优秀的代码,做出优秀的产品。