标签: 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
答案 0 :(得分:2)
分母d是
d
d := 2^(k * (k + 1) / 2)
在循环的第k次迭代中。因此,当d大于n导致分数小于1时,您必须解决
n
2^(k * (k + 1) / 2) > n
代表k并修复n。插入
k
solve 2^(k * (k + 1) / 2) > n for k
给出了
因此,当您从公式中删除不相关的常量时,您的算法的运行时间为O(sqrt(log n))。
O(sqrt(log n))