算法时间复杂度分析

一.级数

算术级数:与末阶平方同阶

T(n)=1+2+...+n=n(n+1)/2=O(n^2)

幂方级数:比幂次高出一阶

T(n)=1^2+2^2+...+n^2=n(n+1)(2*n+1)/6=O(n^3)

T(n)=1^3+2^3+...+n^3=n^2(n+1)^2/4=O(n^4)

T(n)=1^4+2^4+...+n^4=n(n+1)(2*n+1)(3*n^2+3*n-1)/30=O(n^5)

几何级数(a>1):与末项同阶

 T(n)=a^0+a^1+a^2+...a^n=(a^(n+1)-1)/(a-1)=O(a^n)  

收敛级数

1/1/2+1/2/3+1/3/4+...+1/(n-1)/n=1-1/n=O(1)

1+1/2^2+...1/n^2<1+1/2^2+...=pi^2/6=O(1)

1/3+1/7+1/8+1/15+1/24+1/26+1/31+1/35+...=1=O(1)

可能未必收敛,然而长度有限

h(n)=1+1/2+1/3+...+1/n=O(log(n)) 

log1+log2+log3+...+logn=log(n!)=O(nlog(n))

二.循环分析 

for(int i=0;i

for(int j=0;j

分析:T(n)=n+n+...+n=n*n=n^2

时间复杂度O(n^2)

for(int i=0;i

for(int j=0;j

分析:T(n)=0+1+...+n-1=n*(n-1)/2

时间复杂度O(n^2)

 for(int i=0;i

for(int j=0;j

分析:T(n)=0+1+0+0+...+2+0+0+...+3+0+...+n-1=n*(n-1)/2

时间复杂度O(n^2)

for(int i=0;i

for(int j=0;j

分析:T(n)=1+2+4+...2^(log(n-1))

时间复杂度O(2^log(n-1))=O(n)

 for(int i=0;i

for(int j=1;j

T(n)=0+0+1+2*2+3*4+4*8+...=\sum _{k=0...log(n)}\left ( k*2^{k-1}\right )

时间复杂度O(n*log(n))

你可能感兴趣的:(algorithm)