多个嵌套循环的时间复杂度

Time Complexity of multiple nested loops

下面代码的复杂度是多少: 由于增量不是1,条件不直接,复杂度如何计算?

for(int h =0; h<n;h+=2)
    {
       for (int j =1; j<=n*n; j*=3)
       {
          for (int k =2; k+k <=n;++k)
          { 
          } 
       } 
    }

第一个循环:n次,不断跳跃(+2)。因此 n/2 次是 O(n)

第二个循环:n^2 次,几何跳跃 (*3) 因此 \log_{3}{n^2} = O(\log{n})

第3次循环:n/2次,也就是n/2

循环是嵌套的,所以你得到了 O\(n*log{n}*\)=O\(n^{2}log{n}\)

有 3 个嵌套循环。让我们分析它们中的每一个(请记住,我们不关心任何常量,无论它们有多大):

for(int h=0; h<n; h+=2) - O(12N) -> O(N)

for (int j=1; j<=n*n; j*=3) - O(log3N2) -> O(logN<sup>2</sup>)

for (int k=2; k+k<=n; ++k)- O(12N) -> O(N)

因为所有循环都是嵌套的 O(N * logN2 * N) -> O(N<sup>2</sup>*logN<sup>2</sup>)