算法分析课程笔记(一)
教材:算法设计技巧与分析
第一课:
定理:No Free lunch-- For A1, A2, if exist Problem P1, s.t. A1>A2; then exist Problem P2, s.t. A1<A2
介绍了三种排序算法(选择排序, 插入排序,合并排序)
选择排序:
SELECTIONSORT
for i=1 to n-1 k=i for j=i+1 to n if A[j]<A[k] then k=j end for if k!=i then exchange A[i],A[k] end for
性能(比较次数和赋值次数):
比较 n-1+n-2+....+1=(n-1)n/2 (不依赖与输入数组)
赋值 由于每次交换都是三次赋值,则赋值次数为0~3(n-1)
插入排序:
INSERTIONSORT
for i=2 to n j=i-1; A[i]=x; while(j>0&&A[j]>x) A[j+1]=A[j]; j=j-1; end while A[j+1]=x; end for
性能(比较次数和赋值次数):
比较 n-1~n(n-1)/2
赋值 等于比较次数+n-1
归并排序:
t=1; while t<n s=t; t=2*s; i=0; while i+t<=n merge(i+1,i+s,i+t); i=i+t; end while if i+s<n then merge(i+1,i+s,n); end while
性能(比较次数和赋值次数):
比较 nlogn/2~nlogn-n+1
赋值 2nlogn
输入规模与复杂性:
矩阵加法运算: 因为输入规模是n^2, 计算次数也是n^2,故为线性
判断素数的程序:
输入仅为1个数,则以数本身来衡量,在pc上使用bit数衡量,√n=2^(1/2*logn) 故为指数时间的算法