大 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)),因为每次要打印 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
.
O(log(n)) 就是将数据减半。
当算法的每个步骤排除剩余输入的 分数 时——例如您总是将 space 减半,或者三分之一,甚至减到上一步的 99/100——该算法在 O(log(n)) 时间内运行。
希望这对您有所帮助
我遇到了这个问题,在 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)),因为每次要打印 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
.
O(log(n)) 就是将数据减半。 当算法的每个步骤排除剩余输入的 分数 时——例如您总是将 space 减半,或者三分之一,甚至减到上一步的 99/100——该算法在 O(log(n)) 时间内运行。
希望这对您有所帮助