算法导论学习笔记——算法分析
算法分析是关于计算机程序性能和资源利用的研究,特别关注性能,什么比性能更重要?
- 正确性
- 健壮性(是否经常奔溃)
- 模块化:只需要修改局部的代码
- 安全性
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) (常数求和)
归并排序:

详见:递归问题即时间复杂度分析
本文探讨了算法分析的重要性,强调正确性、健壮性和模块化在算法设计中的角色。插入排序在最坏情况下时间复杂度为O(n^2),而归并排序则提供了更优的时间复杂度。通过渐进分析,我们忽略低阶项和系数,关注算法运行时间随输入规模n的增长。主要讨论了平均情况和最佳情况的时间复杂度,并举例说明了如何分析插入排序和归并排序的时间复杂度。
1365

被折叠的 条评论
为什么被折叠?



