时间复杂度

来源:互联网 发布:jenkins中linux部署 编辑:程序博客网 时间:2024/05/05 19:39


时间复杂度分析:只保留高阶项  舍弃系数

常用的时间复杂度:

常数型O(1)   线性型O(n)   平方型O(n2)   立方型O(n3)

指数型O(2n)  对数型O(log2n)     二维型O(nlog2n)

 

for(inti=1;i<=n;i++)

{for(intj=1;j<=n;j++)

   {c[i][j]=0;}

for循环中:表达式1执行1,表达式2每次都执行,表达式3每次都执行

     对于此代码,我们先逐句分析:

     1for循环:i1n共执行n

  2for循环:i=1,j1n执行n;i=2,j1n执行n;i=3,j1n执行n;..i=n,j1n执行n

     即第2for循环的执行次数是第1for循环执行次数的n

  计算:O(f(n))=(1+n+n)+n*(1+n+n)+(n*n)=3n^2+3n+1

O(f(n))=O(n*n) 

 

 

     {++x,s+=x;}//O(n)=1

 

     for(inti=1;i<=n;++i)//O(n)=n

     {++x,s+=x;}

     1n进行循环,语句共执行2n

 

     for(inti=1;i<=n;++i)//O(n)=n*n

    for(intj=1;j<=n;++j)

     {++x,s+=x;}

 

     for(inti=2;i<=n;++i)//O(n)=n*n

    for(intj=2;j<=i-1;++j)

     {++x,a[i,j]=x;}

     n=2,执行0;n=3,执行2*1

  n=4,执行2*2;...n=n,执行2*(n-2)

     2*(0+1+2+..+(n-2))=2*((n-2)*(n-1)/2)=n*n

 

int Fun(intn)

{

     if(n<=1)//边界条件

     {return0;}

     returnFun(n-1)+1;//O(n)

     //n,n-1,n-2,n-3...     反过来看0,1,2,3...n

     returnFun(n-2)+n;//O(n)

     //n,n-2,n-4,n-6...      反过来看0,2,4,6...n

     returnFun(n-3)+1;//O(n)

     //n,n-3,n-6,n-9...      反过来看0,3,6,9...n

     returnFun(n/2)+1;//O(log2(n))

     //n,n/2,n/4,n/8...   反过来看1,2,4,8,16...2x=n   x=log2n

}

原创粉丝点击