0

我只是在学习大 O 表示法,我对嵌套循环感到困惑:

for (int x = 0; x < n; x++)
   for (int y = 0; y < n; y++)
      for (int z = 0; z < y; z++)
         anything();

据我了解,上面的内循环执行 n(n+1)/2 次,第二个循环执行 n 次,第一个循环执行 n 次。这不应该意味着大 O 是 nxnxn(n+1)/2 = O(n^4) 吗?为什么第二个循环不包含在大 O 公式中?

4

2 回答 2

1

问题是:anything()作为函数的调用频率是多少n

上面的内循环执行 n(n+1)/2 次

不,内部循环执行 y 次(每次输入),并且 y 平均 n/2。

所以方程是 n * n * n/2 = O(n^3)。

于 2021-10-27T04:40:30.443 回答
0

大 O 表示法是表示算法的上限。因此,如果基于循环的算法运行 n²+n 次,我们仍然用大 O 表示法表示为 O(n²)。有关更详细的说明,请参阅本文。

于 2021-10-27T02:47:49.123 回答