第一章主要介绍什么是算法,提到效率问题。
第二章:算法入门
1.首先讲了排序的一种:插入排序,顾名思义。他是原地排序。
INSERTION-SORT(A)
for (j = 2; j <=length[A]; j++){
key = a[j];
i = j - 1;
while(i >0 && a[i] > key){
a[i +1] = a[i];
i--;
}
a[i+1] = key;
}
利用循环不变式来证明算法的正确性:
(一个例子)
对循环不变式要证明:初始化时是正确的、保持性(某次迭代前正确,则下次迭代开始前也要正确)、终止(前两个成立,这最后一个
一定会成立)。
2.算法分析:最坏情况(Θ)和平均情况
3.算法分析:分治法--分解,解决、合并
MERGE(A,p,q,r){
m = p - q +1;
n = r - q;
for(i = 1; i < m ; i ++) L[i] = A[p + i - 1 ];
L[p + i] = ∞ //哨兵,特别方便
for(j = 0; j < n ; j ++)R[j] = A[r + j];
R[r + j +1] = ∞
i = j = 1;
for(k = p; k <= r; k++){
if(L[i] <= R[j]){A[k] = L[i]; i ++;}
else{A[k] = R[j]; j++;}
}
}
MERGE_SORT(A,p,r){
if(p < r){
q = (p + r)/2;
MERGE_SORT(A,p,q)
MERGE_SORT(A,q + 1,r)
MERGE(A,p,q,r);
}
}
复杂度:cn(lgn + 1) = O(nlg n)