麻省理工学院公开课-第一讲:算法分析

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)有严格的数学定义,见第二讲。
  • 在工程学上:去掉低阶项,忽略常数系数。例如:3n+ 90n2 - 5n + 6046 = θ(n3)

数学与工程的trade-offs:

  • 当n趋于无穷大时候,θ(n2) << θ(n3);
  • 有时候交点n0太大,计算机无法运行,所以我们会对一些相对低速的算法感兴趣。这应该就是理论与实际的妥协,trade-offs.

插入排序时间分析:

最坏情况:输入一个逆序数列.

 

插入排序快不快?

对于较小的n,比较快;对于较大的n,比较慢,更快的一种排序算法是归并排序(Merge Sort).

2.归并排序(Merge Sort)

 

归并排序时间分析(用递归树分析):

 

  • 在实际中,当 n>30 时,归并排序将打败插入排序.

 

posted @ 2015-06-11 17:17  菜鸟_xf  阅读(251)  评论(0编辑  收藏  举报