Date: 2022-03-01
时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。 空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂度」来描述。
常用的时间复杂度
从上往下越来越复杂
-
常数阶 O(1) 无论多少代码,只有没有循环等结构,复杂度均为O(1)。
let i = 1 let j = 2 ++i j++ let m = i + j -
对数阶 O(logN),log以2为底 索引每次循环*2,即使log2(n)次 二分查找也是一个典型的对数阶复杂度,每查找一次就排除一半,n个数据只需要查找log2(n)次
for (let i = 0; i < len; i++) { i = i * 2 } -
线性阶 O(n) 简单一层循环,执行n遍,复杂度为O(n)
for(let i = 0; i < n; i++){ // ... } -
线性对数阶 O(n * logN) 外面一层循环,连一层二分循环
for(let i = 0; i < n; i++){ for(let j = 0; j < m; j++){ j = j * 2 } } -
平方阶 O(n^2) 简单两层循环,执行n^2遍,复杂度为O(n^2)
for(let i = 0; i < n; i++){ for(let j = 0; j < m; j++){ // ... } } -
立方阶 O(n^3) 同上
-
k次方阶 O(n^k) 同上
-
指数阶 O(2^n) 略
常用的空间复杂度
待补充...