麻省理工学院公开课-第一讲:算法分析
http://www.cnblogs.com/banli/archive/2013/05/19/3087486.html
http://www.cnblogs.com/diliwang/p/3352946.html
自己再梳理一下,便于记忆:
1.插入排序(Insertion Sort)
问题描述:输入一个数组A[1,2....n],输出一个按升序排列的数组A'.
算法分析理论:
通常,我们寻找算法运行的最大时间(上界)T(n),因为最坏的情况是一个承诺,一个保证.
因为,算法的运行时间依赖于我们的电脑。
- 相对速度(在同一台机器上)
- 绝对速度(在不同机器上)
所以,引入渐进符号:θ(n),对算法进行 渐进分析(asymptotic analysis),这就是算法大局观(Big Idea).
BIG IDEA:
- 忽略掉于机器有关的常量(具体操作时间,如赋值操作).
- 不去检查实际运行时间,而是关注运行时间的增长(当n趋于无穷大时,T(n)是多少).
如何计算θ(n)?
- 在数学领域:θ(n)有严格的数学定义,见第二讲。
- 在工程学上:去掉低阶项,忽略常数系数。例如:3n3 + 90n2 - 5n + 6046 = θ(n3)
数学与工程的trade-offs:
- 当n趋于无穷大时候,θ(n2) << θ(n3);
- 有时候交点n0太大,计算机无法运行,所以我们会对一些相对低速的算法感兴趣。这应该就是理论与实际的妥协,trade-offs.
插入排序时间分析:
最坏情况:输入一个逆序数列.
插入排序快不快?
对于较小的n,比较快;对于较大的n,比较慢,更快的一种排序算法是归并排序(Merge Sort).
2.归并排序(Merge Sort)
归并排序时间分析(用递归树分析):
- 在实际中,当 n>30 时,归并排序将打败插入排序.