算法分析课程笔记(一)

教材:算法设计技巧与分析

第一课:

定理: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) 故为指数时间的算法

原文地址:https://www.cnblogs.com/soyscut/p/2943507.html