i ^ k的循环复杂度

Far*_*las 3 algorithm big-o time-complexity

考虑以下循环(k-正整数):

// i^k as in i raised to the power of k
for (int i = 2; i <= n; i = i^k) {
    // some O(1) expressions or statements
}
Run Code Online (Sandbox Code Playgroud)

为什么要运行log_k(log(n))几次?

Yan*_*niv 6

您的问题本质上是:我们需要将k的幂提高2到多少倍,直到它大于n = 2 ^ {log_2(n)}

注意 (2 ^ k)^ k = 2 ^ {k * k},因此继续将其提高(kt倍会导致2 ^ {(k ^ t)}

现在让我们解决: 2 ^ {(k ^ t)}> 2 ^ {log_2(n)}。与询问相同:k ^ t> log_2(n)。拿一个log_k 双方终于得到: t> log_k(log_2(n))