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

时间:2018-02-06 07:36:42

标签: algorithm time-complexity big-o complexity-theory logarithm

特别是,我有兴趣找到Theta的复杂性。我可以看到算法受log(n)限制,但我不知道如何继续考虑问题大小减少指数

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

2 个答案:

答案 0 :(得分:4)

回答你问题的最简单方法是通过对数的眼睛看看算法(在我的例子中是二进制对数):

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 现在我们什么时候退出循环呢? 这发生在 0 > log i_k = log n - (sum from m = 1 to k of m) = log n - k(k+1)/2
因此,最大步数是最小整数k,使得
k(k + 1) / 2 > log n  成立。
渐近地,这相当于k²/2 > log n,因此您的算法位于Theta(sqrt(log n))

答案 1 :(得分:2)

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

enter image description here

知道i(k)上面的公式,你可以计算k的值的上限,以便得到i(k)<= 1,你将得到复杂度为{{3 }}