MIT算法导论公开课之第1课 课程简介及算法分析

先修课程

离散数学、概率论、编程课程

算法分析

算法分析是理论研究,是关于计算机性能和资源利用的研究(尤其关注性能)。

比性能更重要的因素

比如有正确性、简洁性、可维护性、编程成本、稳定性、功能性、模块化、安全性、可扩展性、用户友好度等。

算法的重要性

  • 算法将不可行变为可行。
  • 算法是一种描述程序行为的语言。

排序问题

将一组数(A[1~n])按大小顺序(从小到大)排序。

插入排序

  • 伪码:
for j ← 2 to n
    do key ← A[j]
    i ← j-1
    while i > 0 and A[i] >key
        do A[i+1] ← A[i]
        i ← i-1
    A[i+1] ← key
  • 运行时间:
    • 取决于输入数据的有序性。
    • 取决于输入数据的规模。
    • 关注运行时间的上限,作为对用户的保证。
  • 分析方法:
    • 最坏情况
      • 取决于计算机性能。
      • 通常描述不使用绝对速度,关注相对速度。
    • 平均情况
      • 期望时间,每种输入消耗的时间与这种输入出现的概率的乘积之和。
      • 需要对输入情况做出假设,通常假设为均匀分布。
    • 最好情况
      假象(用于欺骗用户),意义不大。
    • 大局观 渐进分析:
      • 不关注实际运行时间。
      • 关注运行时间如何增长(随输入数据的规模增加时的增长情况)。
      • 渐进符号Θ,去掉函数的低阶项和最高阶项系数。
      • 分析函数循环的层数。
  • 插入排序时间复杂度为Θ(n^2)

归并排序


  • 排序步骤:
    • n为1时,已经完成排序。
    • n大于1时,递归的对A[1~n/2向上取整]这部分以及A[n/2+1向上取整~n]这部分排序。
    • 将排序好的两个表合并,比较两个表,依次取出最小者到输出序列中。
  • 构造递归树:
    归并排序的递归树
    • 归并排序时间复杂度为Θ(nlgn)。

注意:算法描述中lg默认表示以2为底的对数。

猜你喜欢

转载自blog.csdn.net/rye_whiskey/article/details/79416422