该代码的时间复杂度是多少?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了该代码的时间复杂度是多少?相关的知识,希望对你有一定的参考价值。

这段代码的时间复杂度是多少?

i = n;
  while(i > 1) 
    j = i;
    while (j < n) 
      k = 0;
      while (k < n) 
        k = k + 2;
      
      j = j * 2;
    
    i = i / 2;
  

我尝试分析此代码,并得到Log^2n * n的复杂性,我以for循环格式重写了代码,以使查看这样的结果更容易。

for (i = n; i > 1; i = i / 2) // log2n + 1
  
    for(j = i; j < n; j = j * 2) // log2n + 1
    
      for (k = 0; k < n; k = k + 2)  // n + 1 times
      
          cout << "I = " << i << " J = " << j << " and K = " << k << endl;
      
      cout << endl;
    
  

正确吗?如果没有,为什么?我是算法的新手,试图理解,但对其他地方一无所知。

答案

是,您的答案是正确的。变量i在每一步都减半,从而使外循环O(log n)j在每一步都加倍,使该循环O(log n),而最里面的[[k循环增加一个常数,从而使该循环O(n)。相乘得到O(nlog²n)

以上是关于该代码的时间复杂度是多少?的主要内容,如果未能解决你的问题,请参考以下文章

这个特定代码的时间复杂度是多少?

该算法查找所有组合的时间复杂度是多少?

以下代码片段的时间复杂度是多少?

以下代码的时间复杂度是多少?

以下代码的时间复杂度是多少,如何将其更改为线性或对数时间复杂度?

谁能告诉我代码的时间复杂度是多少?