大 O 符号,不理解 class 讲座

Big O notation and not understading from class lecture

我遇到了这个问题,在 class 中,我的教授说下面的语句是 O(log(n)),而我认为是 O(n)。有人可以解释一下吗 O(log(n))?

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

你应该举出一些例子。用二进制写一些数字。比如63、255、511有多少位?请注意,位数的增长速度几乎没有数字本身快。

它是 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.

O(log(n)) 就是将数据减半。 当算法的每个步骤排除剩余输入的 分数 时——例如您总是将 space 减半,或者三分之一,甚至减到上一步的 99/100——该算法在 O(log(n)) 时间内运行。

希望这对您有所帮助