数据结构复杂度分析
一、时间复杂度
1.1 什么是时间复杂度
表示代码执行的快慢;
计算机智能执行最简单的操作,我们把每一次执行最短操作的时间定义为一个基本单位 step
时间复杂度计算就是计算整个代码从执行到结束一共走了多少个时间基本单位。
O表示法:
当需要操作的数据量n足够大的时候,我们可以忽略一些常数项,这时候我们需要使用O(读音order,意为忽略重要项以外的) 去表示时间复杂度。
比如说下面这段代码的时间复杂度:
function order(n){ //1
let time = 1; // 2
for (let i = 0; i < n.length; i++) { // 3
for (let j = 0; j < n.length; j++) { // 4
time += i; // 5
}
}
}
/*
2 1step
3 nstep
4 n * n step
5 n * n step
总的时间复杂度 (2nˆ2 + n + 1)step
n足够大的时候忽略常数项
O(nˆ2)
*/
上述代码时间复杂度为(2nˆ2 + n + 1)step使用O表示法即为O(nˆ2)
1.2 如何快速计算时间复杂度
在一段代码中,当数据量足够大的时候我们往往可以忽略常数项,所以可以忽略一些简单的操作,比如上述代码的第二行。往往我们只需要计算循环代码次数最多的那段代码的时间复杂度。
嵌套代码的时间复杂度等于嵌套内外时间复杂度的乘积,例如上述代码的3-5行
关于随着表达式n值的增长速率: ![关于随着表达式n值的增长速率]
1.3 常见的时间复杂度
以下时间复杂度递增,
- O(1)
- O(logn)
- O(n)
- O(nlogn)
- O(nˆ2)
- O(nˆ3)
- O(zˆn)
- O(n!)
⚠️ 对于执行次数为100次或者1000次这种有确定的常数项的时间复杂度用O表示法的时候可以表达为O(1) ,但是并不是只执行了一次。
二、空间复杂度
2.1什么是空间复杂度?
表示内存的消耗,
将申请一个空间存储变量为step,整个代码执行起来所消耗的存储空间。
(其实和时间复杂度概念比较类似,一个计算执行时间,一个计算消耗的内存空间)
2.2 常见的空间复杂度
- O(1)
- O(n)
- O(nˆ2)
总结
- 时间复杂度计算代码执行的时间,可以表示代码执行的快慢
- 空间复杂度计算代码消耗的内存
- O只是一个忽略重要项以外的一个表达式?