这个算法是 O(log log n) 复杂度吗?

Is this algorithm O(log log n) complexity?

特别是,我对寻找 Theta 复杂度很感兴趣。我可以看到该算法受 log(n) 的限制,但我不确定如何继续考虑问题大小 呈指数下降

i = n
j = 2
while (i >= 1)
    i = i/j
    j = 2j

回答您的问题的最简单方法是从对数的角度(在我的例子中是二进制对数)看算法:

log i_0 = log n
log j_0 = 1
k = 0
while (log i_k >= 0) # as log increases monotonically
    log i_{k+1} = log i_k - log j_k
    log j_{k+1} = (log j_k) + 1
    k++

这样我们可以看到 log i 在每一步中减少 log j = k + 1
现在我们什么时候退出循环?
这发生在

因此,最大步数是满足
的最小整数 k 持有。
渐近地,这相当于 , so your algorithm is in

让我们用 i(k) 和 j(k) 表示迭代 k 时 i 和 j 的值(因此假设 i(1)=n 和 j(1)=2 )。我们可以很容易地通过归纳法证明 j(k)=2^k 并且

知道上面关于 i(k) 的公式,您可以计算出使 i(k) <= 1 所需的 k 值的上限,您将得到复杂度为