李哈哈的数据结构和算法笔记【part 2:时间复杂度和空间复杂度】
算法效率的度量方法
1.事后统计方法
缺点:需要事先编号测试程序,且不同测试环境差别很大。
2.事前分析估算方法
定义:在计算机程序编写前,依据统计方法对算法进行估算。
函数渐进增长
存在正整数N,若n>N时,f(n)一直大于g(n),则称f的渐进增长快于g。
- 可以省略加法常数,如3n+2≈3n
- 与最高次项相乘的常数并不重要,可以省略
**结论:**判断算法效率,函数中常数和其他次要项常常可以忽略,而更应关注主项(最高次项)的阶数。
算法的时间复杂度
指程序对运行时间的需求。
大O记法:
- 用常数1取代运行实践中的所有加法常数
- 修改后的运行次数函数中,只保留最高阶项
- 若最高阶项存在且不是1,去除与这个像相乘的常数
- 得到的最后结果就是大O阶
有几种典型阶数:常数阶 线性阶 平方阶 立方阶 对数阶 指数阶
阶数比较大小:
1 < logn < n < nlogn < n方 < n立方 < 2^n < n! < n的n次方
最坏情况和平均情况
一个程序,我们会做出它运行的最坏情况,用来衡量其性能。
平均情况也是一种衡量方式,但前者更常用。
算法的空间复杂度
指的是算法所需要的空间大小。
编程时可以用空间换取时间。
比如查询闰年,可以用计算实现,也可以通过建立数组,采用查询的方式。
二者孰优孰劣要根据实际情况来判断。