简单的空间和时间复杂度分析
-
时间复杂度
一般使用大O表示法来表示
常见时间复杂度
- O(1):常数时间复杂度
- O(log n) 对数时间复杂度
- O(n) 线性时间复杂度
- O(n^2) 平方时间复杂度
- O(n^3) 立方时间复杂度
- O(2^n) 指数时间复杂度
- O(n!) 阶乘时间复杂度
在计算时间复杂度时基本可以分为两种情况
- 循环,下面为循环的例子
var i = 0 console.log(i) // 代码只执行一次 时间复杂度为O(1) var i = 0 console.log(i) console.log(i+1) console.log(i-1) // 代码执行三次 但是由于不计算常数系数所以时间复杂度还是O(1) for(let i = 0;i<=n;i++){ console.log(i) } // 这段for循环会执行n次,执行次数会根据n的变化而变化。所以时间复杂度为O(n) for(let i = 0;i<=n;i++){ for(let j = 0;j<=n;j++){ console.log(j) } } // 两个for嵌套循环,程序会执行n^2次所以时间复杂度为O(N^2) for(let i = 0;i<=n;i++){ console.log(i) } for(let j = 0;j<=n;j++){ console.log(j) } // 如果两个循环并列,程序执行2n次,但是由于不计算前面的常数系数,所以时间复杂度任然为O(n)
- 递归计算方法:
1 . 画递归的状态树,根据状态树来计算空间复杂度
2. 主定理,如下图
参考文章:主定理(Master Theorem)与时间复杂度
常见时间复杂度曲线
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-44jM36fa-1599283868278)(./1.jpg)]
-
空间复杂度
-
如果有数组就要看数组的长度
如果是一维数组,则为O(n),如果是二维数组就位O(n^2)
- 空间复杂度
-
如果有数组就要看数组的长度
如果是一维数组,则为O(n),如果是二维数组就位O(n^2)
-
有递归则为最大的递归深度