时间复杂度原则
- 加法原则
T(n)=T1(n)+T2(n)=O(f(x))+O(g(n))=O(max(f(n),g(n)))
- 乘法原则
T(n)=T1(n)∗T2(n)=O(f(n)∗g(n))=O(f(n)∗g(n))
- 渐进时间复杂度
O(1)<O(lg2n)<O(n)<O(nlgn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
复杂度计算
常数阶
线性阶
//O(n)
int i;
for(i=0;i<n;i++)
{
}
对数阶
//O(lg2n)
int cnt=1;
while(cnt<=n)
{
cnt=cnt*2;
}
- 2x=n=>x=log2n
平方阶
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{...}
- O(n2)
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{...}
- O(m∗n)
int i,j;
for(i=0;i<n;i++)
for(j=i;j<n;j++)
{...}
- n+(n−1)+...+1=n(n+1)2
- 1+2+3+...+n=n∗n−12
- 12+22+...+n2=n(n+1)(2n+1)6
- 13+23+...+n3=(n(n+1)2)2