用于迭代while循环的Big-O值

时间:2014-09-26 04:44:20

标签: algorithm big-o

对以下计划给出一个大的估计

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?

1 个答案:

答案 0 :(得分:2)

嗯,你得到的答案是alraedy。 k告诉你最多需要多少次迭代。当您使用n(使用log(n)次迭代)时,您将结束循环。因此,算法的渐近运行时间是O(log n)。 对数的基数无关紧要,因为它只是一个常数因素:例如: ln n = log(n)/ log(e)。无论如何,你不会在Big-O下看到这个因素(在这种情况下是log e)。