大O符号,而不是课堂讲座

时间:2017-02-14 00:46:43

标签: java big-o

我有这个问题,在课堂上我的教授说下面的陈述是O(log(n)),我认为它是O(n)。有人可以澄清它是O(log(n))的吗?

Printing a number of magnitude n in binary. Assume that printing each bit requires constant time.

3 个答案:

答案 0 :(得分:3)

你应该找出一些例子。用二进制写一些数字。例如,63,255和511中有多少位?请注意,位数的增长几乎没有数字本身那么快。

答案 1 :(得分:3)

它是O(log(n)),因为每次打印01时,你必须除以2。 例如,要以二进制打印256,您必须从256开始除以2,并且每次都打印% 2的结果。

256 % 2 -> 0
64% 2 -> 0
32 % 2 -> 0
16 % 2 -> 0
8 % 2 -> 0
4 % 2 -> 0
2 % 2 -> 0
1 % 2 -> 1

因此,对于多个幅度256,您必须迭代8次,这等于log 256

答案 2 :(得分:0)

O(log(n))就是将数据削减一半。 当算法的每个步骤排除剩余输入的分数时 - 例如你总是把空间减半,或减少三分之一,甚至是前一步的99/100 - 该算法在O(log(n))时间运行。

希望这会有所帮助

相关问题