找出嵌套循环的复杂性

Finding the Complexity of Nested Loops

我得到了循环伪代码:

其中 "to" 等同于 "<="

sum = 0;
for i = 1 to n
  for j = 1 to i^3
    for k = 1 to j
       sum++

我知道最外层的循环 运行s n 次。 两个内部循环也 运行 n times 吗? (使整个复杂度 O(n^3).

例如 n = 5 那么:

1 <= 5        2<= 5
j = 1 <= 1^3  2 <= 2^3 = 8
k=1 <= 1      2 <= 2

每个循环都会重复 n 次,这样就 n^3?

这似乎是一个棘手的问题,那些内部循环比 n.

更复杂

外循环是n。 下一个循环从 i^3。在外循环结束时,i 将等于 n。这意味着这个循环最后将在 n^3。从技术上讲,它应该是 (n^3)/2,但我们忽略它,因为这是大 O。 第三个循环转到 j,但在前一个循环结束时 j 将等于 i^3。我们已经确定 i^3 等于 n^3.

看起来像:

  • 第一个循环:n
  • 第二个循环:n^3
  • 第三个循环:n^3

这看起来像是n^7。不过,我希望其他人可以验证这一点。一定要爱大O.

您可以使用 Sigma 表示法显式展开循环中的基本操作数(设 sum++ 为基本操作):

在哪里

因此,使用大 O 表示法的复杂度为 O(n^7)