此算法的大(O)

时间:2018-01-24 05:47:26

标签: algorithm big-o

此算法的大(O)是多少? 我知道它类似于O(log(n))但不是每次减半,而是以指数方式缩小。

sum = 0
i = n
j = 2 
while(i>=1) 
    sum = sum+i 
    i = i/j
    j = 2*j

1 个答案:

答案 0 :(得分:2)

分母d

d := 2^(k * (k + 1) / 2)

在循环的第k次迭代中。因此,当d大于n导致分数小于1时,您必须解决

2^(k * (k + 1) / 2) > n

代表k并修复n。插入

solve 2^(k * (k + 1) / 2) > n for k
WolframAlpha中的

给出了

enter image description here

因此,当您从公式中删除不相关的常量时,您的算法的运行时间为O(sqrt(log n))