【MIT 公开课】Computer Science and Programing Lession 9

来源:互联网 发布:edg那个知恩是谁 编辑:程序博客网 时间:2024/06/07 04:45

第九课讲的是搜索和排序。

1.复习了第八课的四种算法:

线性算法:逐步减小固定值

对数算法:每次除以固定值

平方算法:嵌套调用,递归迭代调用时

指数算法:汉诺塔

2.二分法查找的思想:

(1)查找中点

(2)是否是需要找的值

(3)若不是,重复

3.二分法假设的是我们拥有的列表为有序列表。当只有一个无序列表需要进行搜索时,先排序再二分法搜索的复杂度为nlogn+logn;使用遍历法进行搜索时,复杂度为n。

一般意义来说,nlogn+logn>n。

当需要进行k次搜索时,先排序再二分法搜索的最小复杂度为nlogn+klogn;使用遍历法进行搜索时,复杂度为kn。则kn<nlogn+klogn。

即分摊开销原则。

4.如何进行排序:

(1)单元排序/选择排序:

def selSort(L):  for i in range(len(L) - 1):    print L    minIndx = i    minVal= L[i]    j = i + 1    while j < len(L):      if minVal > L[j]:        minIndx = j        minVal= L[j]      j = j + 1    temp = L[i]    L[i] = L[minIndx]    L[minIndx] = temp

O(n^2)
(2)冒泡排序
def bubbleSort(L):  for j in range(len(L)):    print L    for i in range(len(L) - 1):      if L[i] > L[i+1]:      temp = L[i]      L[i] = L[i+1]      L[i+1] = temp

O(len(L)^2)


0 0
原创粉丝点击