我有这个问题,在课堂上我的教授说下面的陈述是O(log(n))
,我认为它是O(n)
。有人可以澄清它是O(log(n))
的吗?
Printing a number of magnitude n in binary. Assume that printing each bit requires constant time.
答案 0 :(得分:3)
你应该找出一些例子。用二进制写一些数字。例如,63,255和511中有多少位?请注意,位数的增长几乎没有数字本身那么快。
答案 1 :(得分:3)
它是O(log(n)),因为每次打印0
或1
时,你必须除以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))时间运行。
希望这会有所帮助