课程名称: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算法,提升个人能力,写出优秀的代码,做出优秀的产品。