我已经看到在某些情况下嵌套循环的复杂性是O(n ^ 2),但我想知道在哪些情况下我们可以具有以下嵌套循环的复杂性:
我的意思是有没有任何公式或技巧来计算嵌套循环的复杂性?有时当我使用求和公式时,我得不到正确的答案。
一些例子会很棒,谢谢。
答案 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