Big-O 描述了当输入大小 n 增长时,算法的运行时间或内存如何增长。它捕捉 worst-case 渐进行为,忽略常数和低阶项。
The idea
我们关心增长率,而不是确切的步数。O(2n + 5) 就是 O(n),因为当 n 变得很大时,常数和较小的项就不重要了。
Common classes
Example
python
def has_duplicate(nums):
for i in range(len(nums)): # outer loop: n
for j in range(i + 1, len(nums)): # inner loop: n
if nums[i] == nums[j]:
Pitfalls
Big-O 隐藏了常数:一个具有巨大常数的 O(n) 算法在小输入上可能会输给 O(n log n)。还要跟踪 space 复杂度,不仅仅是时间。
为什么这很重要
Big-O 让你能够比较算法,而无需运行它们或担心硬件。
它预测当输入从数百增长到数百万时哪些解决方案能够存活——这是能够扩展的特性和会超时的特性之间的区别。
它是每个工程师用来推理性能的通用语言。
