一.级数
算术级数:与末阶平方同阶
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<n;i++)
for(int j=0;j<n;j++)
分析:T(n)=n+n+...+n=n*n=n^2
时间复杂度O(n^2)
for(int i=0;i<n;i++)
for(int j=0;j<i;j++)
分析:T(n)=0+1+...+n-1=n*(n-1)/2
时间复杂度O(n^2)
for(int i=0;i<n;i++)
for(int j=0;j<i;j+=2013)
分析: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<n;i<<=1)
for(int j=0;j<i;j++)
分析:T(n)=1+2+4+...2^(log(n-1))
时间复杂度O(2^log(n-1))=O(n)
for(int i=0;i<n;i++)
for(int j=1;j<i;j+=j)
T(n)=0+0+1+2*2+3*4+4*8+...=
时间复杂度O(n*log(n))