算法导论学习笔记——算法分析
算法分析是关于计算机程序性能和资源利用的研究,特别关注性能,什么比性能更重要?
- 正确性
- 健壮性(是否经常奔溃)
- 模块化:只需要修改局部的代码
- 安全性
problem sorting
Input:一个数字序列
output:排序之后的序列
- 插入排序:最坏的时间复杂度O( n 2 n^2 n2),逆序情况
时间复杂度
T ( n ) T(n) T(n):输入规模位n时算法的运行时间
- Average-case
- T ( n ) T(n) T(n):运行时间的期望值
- best-case(cheat)
- 不常用,因为要保证算法的运行时间上界,而不是下界,保证算法的适用性
BIG IDEA(大局观) 渐近分析
- 忽略常量
- 关注运行时间的增长
Θ \Theta Θ-notation: 丢弃低阶项,忽略系数
- E X : 3 n 3 + 2 n 2 = Θ ( n 3 ) EX:3n^3+2n^2=\Theta(n^3) EX:3n3+2n2=Θ(n3).
- 平方项的算法总有一个足够大的n比三次方的更优
插入排序的时间复杂度分析:
逆向排序时:
T ( n ) = ∑ j = 2 n Θ ( j ) = Θ ( n 2 ) T(n)=\sum_{j=2}^n\Theta(j)=\Theta(n^2) T(n)=∑j=2nΘ(j)=Θ(n2) (常数求和)
归并排序:
详见:递归问题即时间复杂度分析