时间复杂度的分析
事后分析法
就是看一个程序运行消耗的时间,这个最简单的分析方法但是有很大的缺点
- 用这种方式去测试需要等待程序运行完毕,浪费了很多时间在等待程序运行上
- 对于不同的硬件条件,程序执行的速度都是不一样的,这样的结果就没有说服力
事前分析法
程序员主要关注的是
- 使用什么算法实现
- 一个问题的规模
大O记法
设T(n)为问题规模n的函数,有T(n) = O(f(n))这表示随着问题规模n的增长,程序运行的时间增长率与f(n)的增长率相同
使用大O记法
- 用常数
1
代替所有运行时间中的加法常数 - 只保留最高项
- 有最高项将其常数因子改为1
常见大O阶
- O(n)
- O(n2)
- O(logn):为什么不声明底数呢,因为随着n的增加,不同底数的增产趋势是一样的
- O(1)