CS50 2016-Week3 学习笔记

来源:互联网 发布:网络黑白 百度文学 编辑:程序博客网 时间:2024/05/17 23:34

上一课讲了数组,这节课顺利过渡到了数组的查找、排序。

即查找算法、排序算法。

关于查找算法,除了常见的linear search ,binary search ,还有好多好多。下面是常见的七大查找算法:


  1. 顺序查找
  2. 二分查找
  3. 插值查找
  4. 斐波那契查找
  5. 树表查找
  6. 分块查找
  7. 哈希查找


排序算法,除了冒泡排序、插入排序、归并排序,还有很多很多其他的排序算法。(见维基百科- 排序算法)


讲到算法,课中自然提到的算法复杂度,O、Ω、Θ 这些记号。

O表示上界,即最坏情况下需要运行的时间(步)。
Ω表示下界,即最好情况下需要运行的时间(步)。
Θ表示准确界限,O=Ω时,可以用Θ表示。


    常见的是大O:
  • O(1) denotes constant running time.
  • O(n) denotes linear running time.
  • O(log n) denotes logarithmic running time.
  • O(nlog n) denotes log-linear running time.
  • O(nk) denotes polynomial running time.
  • O(cn) denotes exponential running time.

网上有许多排序算法、查找算法复杂度的总结。
可以参考:每个程序员都应该收藏的算法复杂度速查表


关于这些算法的实现,可需要一些时间。
以前的几篇笔记有了部分python的实现,这里就不写了,以后会另外总结的。