为什么这个代码在Big Oh表示法中被认为是O(N ^ 6)?

时间:2011-07-21 04:42:00

标签: c for-loop big-o notation

我刚刚阅读another question,这段代码引起了我的兴趣:

for(i = 0; i < n; i++)
{
    for(j = 0; j < i*i; j++)
    {
        for(k = 0; k < i*j; k++)
        {
            pseudo_inner_count++;
            for(l = 0; l < 10; l++);
        }
    }
}

我不明白这是怎么回事O(N ^ 6)。有人可以为我分解吗?

3 个答案:

答案 0 :(得分:15)

实际上是:

  • i循环迭代O(N)次,因此i的值为O(N),因此我们可以说O(I)= O(N)。
  • j循环迭代O(I ^ 2)= O(N ^ 2)次(当单独考虑时,没有外循环)。
  • k循环迭代O(I * J)= O(N * N ^ 2)= O(N ^ 3)次。
  • l循环只迭代10次,因此是O(1)。

循环是嵌套的,所以我们必须将它们相乘(你明白为什么吗?)。总数为O(N)* O(N ^ 2)* O(N ^ 3)= O(N ^ 6)。

答案 1 :(得分:1)

这是

n表示第一个循环 n²表示第二个循环 n³为第三个循环

内环是O(1)

总数为O(n⁶)。

第三个循环是n³的原因是因为当你想到它时j达到n²并且我达到n,所以i * j达到n³。

答案 2 :(得分:-1)

我会说:

  • n代表第一个循环
  • n²用于第二个循环=&gt;总计n³
  • n²表示第三个循环=&gt;总计n⁵
  • 又一个n-loop =&gt;总计n⁶