我认为它是log(logn),因为循环重复log(logn)次...
j=1;
i=2;
while (i <= n) do {
B[j] = A[i];
j = j + 1;
i = i * i;
}
答案 0 :(得分:2)
你是对的,它是O(lg(lg n))
,其中lg
代表基数2的对数。
原因是i
的值序列受规则i = prev(i) * prev(i)
约束,结果证明是2 ^ 2 ^ 2,2 ^ 4,2 ^ 8,......对于步骤1,2,3,4 ......换句话说,i
次迭代后k
的值为2^{2^k}
。
因此,只要2^{2^k} > n
或k > lg(lg(n))
(只需将lg
两次加到不等式的两边,循环就会停止。不等式仍然有效,因为lg
是增加的功能。)