对以下计划给出一个大的估计
i=1
while ( i <= n ) {
i = 2*i
}
通过绘制快速表,将 i 的值与我们看到的每次迭代进行比较:
如果 n = 5 ,我们需要6次迭代
如果 n = 7 我们需要8次迭代,依此类推......
所以我说:
我们需要多少次迭代,直到2 ^ k&gt; n(其中k是迭代次数)
2^k > n
log(2^k) > log(n)
k > log(n)
其中log是基数2.
但我现在被困住了......我如何从中获得大O?
答案 0 :(得分:2)
嗯,你得到的答案是alraedy。 k告诉你最多需要多少次迭代。当您使用n(使用log(n)次迭代)时,您将结束循环。因此,算法的渐近运行时间是O(log n)。 对数的基数无关紧要,因为它只是一个常数因素:例如: ln n = log(n)/ log(e)。无论如何,你不会在Big-O下看到这个因素(在这种情况下是log e)。