嵌套循环算法复杂度的一些例子?

时间:2016-04-22 01:31:47

标签: algorithm

我已经看到在某些情况下嵌套循环的复杂性是O(n ^ 2),但我想知道在哪些情况下我们可以具有以下嵌套循环的复杂性:

  • O(n)的
  • O(log n)我在某处看到过这样的案例,但我不记得确切的例子。

我的意思是有没有任何公式或技巧来计算嵌套循环的复杂性?有时当我使用求和公式时,我得不到正确的答案。

一些例子会很棒,谢谢。

1 个答案:

答案 0 :(得分:2)

以下是时间复杂度为O(n)的示例,但您有一个双循环:

int cnt = 0;
for (int i = N; i > 0; i /= 2) {
    for (int j = 0; j < i; j++) {
        cnt += 1;
    }
}

您可以通过以下方式证明复杂性:

第一次迭代,j循环运行N次。第二次迭代,j循环运行N / 2次。在第i次迭代中,j循环运行N / 2^i次。 总的来说:N * ( 1 + 1/2 + 1/4 + 1/8 + … ) < 2 * N = O(N)

很可能会说这样的事情在O(log(n))中运行:

int cnt = 0;
for (int i = 1; i < N; i *= 2) {
    for (int j = 1; j < i; j*= 2) {
        cnt += 1;
    }
}

但我相信这会在O(log^2(N)) polylogarithmic

中运行