❒ 为什么要进行复杂度分析?
✔ 指导你编写出性能更优的代码
✔ 评判别人写的代码的好坏
❒ 大O表示法:不具体表示代码真正的执行时间,而是表示代码执行时间随数据规模增长的变化趋势T(n)与代码的执行次数成正比(代码行数越多,执行时间越长)
✔ T(n) = O(3n + 3)
✔ T(n) = O(n)
✔ 当n很大时,公式中的低阶,常量,系数三部分并不左右其增长趋势,因此可以忽略,我们只需要记录一个最大的量级就可以了
❒ 描述 表示形式
✔ 常数 0(1):只要代码的执行时间不随着n的增大而增大,这样的代码复杂度都是O(1)
✔ 对数 O(log n)
✔ 线性 O(n):单重重for循环 O(3n +3)
✔ 线性对数 O(n * log n):复杂度分析就是要弄清楚代码的执行次数和数据规模n之间的关系
public void test04(int n){
int i = 1;
while(i <= n)
i = i* 10
}
✔ 平方 O(n2):双重for循环 O( 3n²+ 3n +3)
✔ 立方 O(n3)
✔ k次方 O(n* )
✔ 指数 O(2”)
✔ 阶乘 O(n !)
空间复杂度全称是渐进空间复杂度,表示算法占用的额外存储空间与数据规模之间的增长关系
我们常见的空间复杂度就是O(1),0(n),O(n^2),其他像对数阶的复杂度几乎用不到,因此空间复杂度比时间复杂度分析要简单的多。