我试图找到以下时间复杂性/大theta:
def f(n):
i = 2
while i <n:
print(i)
i = i*i
我知道如何解决这个问题的唯一方法是找到i_k的通用公式,然后求解i_k&gt; = n的等式,但是我最终得到了一个log(logn / log2)/ log(2) )等式作为我的k值,这对我来说似乎有点不对,而且我不确定如何将其转化为一个大的θ表达式。任何帮助将不胜感激!
答案 0 :(得分:1)
实际上答案看起来不错!如果将log x / log 2重写为log 2 x(或简称lg x),那么迭代次数为lg lg n。由于循环迭代k中i的值为2 2 k ,这意味着当我达到值2 2 lg时,循环停止lg n = 2 lg n = n,它匹配循环边界。
更一般地说,在超过n之前可以对值进行平方的次数是Θ(log log n),类似地,在将数字n下降到常数之前可以采用的平方根的数量是Θ( log log n),所以你的回答几乎就是你所期望的。