麻省理工算法导论公开课(1)

算法关注性能,但是有比性能更重要的,比如正确性,简洁性,可维护性,稳定性,特征性,模块性,安全性,可拓展性,用户友好性。那么为什么还要关注性能,为什么还要研究算法?因为性能可以当做一般的价值标准,类似金钱。Java现在非常流行,它比C大概要浪费三倍左右的时间,但是它提供了面向对象的机制,异常处理等功能。这时,就相当于牺牲了三倍左右的性能,来换取更为需要的性质。

Problem:Sorting

Insertion sort(插入排序):插入到已经排序好的序列中

“……(sorted) j ……(unsorted)”,key指向j位置,j位置之前的序列已经排序好了,把j位置的元素插入到前面合适的位置,然后key向后移动一位。

Running time:

  • Depends on input(e.g. already sorted)
  • Depends on input size
  • Want upper bounds(对于用户来说,用户一般都希望知道最坏的情况是什么样,算是对用户的承诺)
Kinds of analysis:

  • Worst-case(ususally):
    T(n)=max time on any input of sizen
  • Average-case(sometimes):
    T(n)=expected time over all input of sizen(Need assumption of stat. distr.
  • Best-case(Bogus)
BIG IDEAS! asymptotic analysis(渐进分析)

  1. 忽略依赖机器的常量
  2. 不去关注运行时间,而是关注运行时间的增长
渐进符号:Θ,Ο,Ω

算法是用访问内存的次数来衡量的。对于插入排序来说,T(n)=∑Θ(j)=Θ(n²)

Merge sort(归并排序):把一个数组A[1,2,……,n]分为两个数组,分别排序后再归并

T(n)=2T(n/2)+Θ(n),Θ(n)是归并时所用的时间

使用递归树(Recursion tree)能够得到T(n)=cnlgn+Θ(n)=Θ(nlgn)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章