这个算法是 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 值的上限,您将得到复杂度为
特别是,我对寻找 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
渐近地,这相当于
让我们用 i(k) 和 j(k) 表示迭代 k 时 i 和 j 的值(因此假设 i(1)=n 和 j(1)=2 )。我们可以很容易地通过归纳法证明 j(k)=2^k 并且
知道上面关于 i(k) 的公式,您可以计算出使 i(k) <= 1 所需的 k 值的上限,您将得到复杂度为