三重嵌套for循环的运行时派生

时间:2019-02-20 04:58:17

标签: algorithm for-loop big-o nested-loops

我不得不做一个问题,需要我弄清楚这段代码的运行时间:

for (i = 1; i <= log(n); i = i + 1) {
    for (j = 1; j <= 2*i; j = 2*j) {
        for (k = 1; k <= log(j); k = k + 1) {
            print("[some arbitrary string]");
        }
    }
}

通过检查可以明显看出,这是Θ((log(n)^3),因为每个for循环都是Θ(log(n)),但我不确定确切地证明这一点的最佳方法是什么(例如,使用总和)。

1 个答案:

答案 0 :(得分:2)

log(n)替换为xx = log(n))。然后

for (i = 1; i <= x; i = i + 1) {
    for (j = 1; j <= 2*i; j = 2*j) {
        for (k = 1; k <= log(j); k = k + 1) {
            print("[some arbitrary string]");
        }
    }
}

在第二个循环中,j通过2的幂进行运算。让我们用另一个替代方法进行具有相同渐近性的另一个循环:y = log(j)

for (i = 1; i <= x; i = i + 1) {
    for (y = 0; y <= log(i); ++y) {
        for (k = 1; k <= y; k = k + 1) {
            print("[some arbitrary string]");
        }
    }
}

复杂度为O(x * log(x)^2) = O(log(n) * log(log(n))^2)