算法时间复杂度举例解析(O(1),O(log2n),O(n),O(nlog2n),O(n^2),O(n^3)等)

在学习数据结构的过程中,时间复杂度是我们最先接触到的概念,我们一般用时间复杂度判断算法的优劣,

但是课本中并没有详细介绍各种代码时间复杂度的例子,因此,这里对常见的时间复杂度以及代码实例举一些例子,供大家参考。

一.常见的时间复杂度

时间复杂度由小到大:

1.常数阶O(1)

2.对数阶O(log2n)

3.线性阶O(n)

4.线性对数阶O(nlog2n)

5.平方阶O(n^2)

6.立方阶O(n^3)

7.k次方阶O(n^k)

8.指数阶O(2^n)



二.代码分析

1).常数阶O(1)

 无复杂的循环结构,无论代码多少行,时间复杂度都是O(1)

int i=1;
int j=2;
i++;
j++;
int temp;
temp=i+j;

2).对数阶O(log2n) 

在while循环中,对于参数进行对数型增长,当达到某一个值时,跳出循环,例如:N=a^x,即a的x次方等于N,记作x=logaN,

在这里,循环中的代码可以是任何数,若为3,则对数阶是O(log3n)(注意这里的参数是以3为底,应该是小写)

int i=1;
while(i<n){

  i=i*2;

}

3).线性阶O(n)

for循环里的代码执行n次,使用O(n)表示他的时间复杂度

for(int i=0;i<n;i++){
   j=i;
   j++;
}

4).线性对数阶O(nlogN)

  线性对数阶,通常是把时间复杂度为O(logN)的代码循环了n遍,就是n*O(logN),双重循环

for(int m=1;m<n;m++){
   i=1;
   while(i<n){
    i=i*2;
   }

}

5).平方阶O(n^2)

    和上一个类似,是指对O(n)的双重循环

for(int x=1;i<=n;x++){
   for(int i=0;i<=m;i++){
        j=i;
         j++;
  }
  
}

6).参考上面的O(n²) 去理解就好了,O(n³)相当于三层n循环,其它的类似。 

猜你喜欢

转载自blog.csdn.net/qq_40513633/article/details/107705801
今日推荐