定义
大O表示法是一种特殊的表示法,指出了算法的速度有多快。
- 并不以秒为单位,而是指算法运行时间随操作数的增速(随着输入的增加,其运行时间将以什么样的速度增加)。
- 指出了最糟情况下的运行时间。
- O(log n)比O(n)快,当需要搜索的元素越多时,前者比后者快得越多。
- O(n × 1/2 × n)。 但大O表示法省略诸如1/2这样的常数(有关这方面的完整讨论,请参阅《算法图解》第4章),因此简单地写 作O(n × n)或O(n^2 )。
常见的大 O 运行时间
下面按从快到慢的顺序列出了你经常会遇到的5种大O运行时间。
- O(log n),也叫对数时间,这样的算法包括二分查找。
- O(n),也叫线性时间,这样的算法包括简单查找。
- O(n * log n),这样的算法包括 快速排序——一种速度较快的排序算法。
- O(n^2 ),这样的算法包括 选择排序——一种速度较慢的排序算法。
- O(n!),这样的算法包括 旅行商问题的解决方案——一种非常慢的算法。
对数补充
对数运算是幂运算的逆运算
log_10 100相当于问“将多少个10相乘 的结果为100”。
答案是两个:10 × 10 = 100。因此,log_10 100 = 2
示例
使用大O表示法(稍后介绍)讨论运行时间时,log指的都是log2
而使用二分查找时,最多需要检查log n个元素。
如果列表包含8个元素,你最多需要 检查3个元素,因为log 8 = 3(2^3 = 8)。
如果列表包含1024个元素,你最多需要检查10个元素, 因为log 1024 = 10(2^10 =1024)。