我不得不做一个问题,需要我弄清楚这段代码的运行时间:
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))
,但我不确定确切地证明这一点的最佳方法是什么(例如,使用总和)。
答案 0 :(得分:2)
让log(n)
替换为x
(x = 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)
。