取幂的时间复杂度

时间:2015-03-25 11:26:18

标签: algorithm time-complexity

 int aux(int n, int x) {
    while (x < n) {
        x *= x;
    }
    return x;
}

int func(int n) {
    return aux(n, 2);
}

为什么func函数的时间复杂度为O(log(log(n)))

1 个答案:

答案 0 :(得分:2)

由于x2开始,我们在每一步都是正方形,所以它遵循以下顺序:

2^(2^0), 2^(2^1), 2^(2^2), ..., 2^(2^k), 2^(2^k) * 2^(2^k) = 2^(2^(k + 1)) ...

只要2^(2^k) <= n =&gt;,循环就会继续2^k <= log(n) =&gt; k <= log(log(n))