学习算法难免就要在不同算法之间进行比较,其中运行时间通常需要用大O表示法。下面我们对大O表示法进行一个简要的学习
大O表示法是一种特殊的表示法,指出了算法的速度有多快。
比如,假设有一个有序列表包含n个元素。
- 简单查找需要检查每个元素,一次需要执行n次操作,用大O表示法,运行时间为O(n)。
- 二分查找需要执行log n次操作,使用大O表示法,运行时间为O(log n)。
大O表示法没有单位,更不是以秒为单位。大O表示法,能让你比较操作数,它指出了算法运行的时间增速。
一些常见的大O运行时间。
由快到慢列出了经常遇到的5种大O运行时间:
- O(log n),也叫对数时间,这样的算法包括二分查找。
- O(n),也叫线性时间,这样的算法包括简单查找。
- O(nlogn),这样的算法包括快速排序。
- O(n²),这样的算法包括选择排序。
- O(n!), 这样的算法包括旅行商问题的解决方案。
关于大O表示法的常量
C是算法所需的固定时间量,成为常量。
例如:二分查找大O运行时间为O(log n),他的常量为C,那它真实运行时间就是C*log n
通常不考虑这个常量,因为如果两种算法的大O运行时间不同,这种常量将无关紧要。
例如:
简单查找的C为1毫秒,大O时间为O(n)。二分查找的C为1秒,大O时间为O(log n)。虽然,二分查找的常量时简单查找的1000倍,但是当n=40亿时,简单查找需要463天,而二分查找只需要32秒。
二分查找快得多,常量根本没有影响。
但是有时候,常量的影响就很大,如果两种算法的大O时间相同,那就要看谁的常量更小,常量越小速度越快。
通过以上学习我们得到如下启示:
- 算法的速度指的并非时间,而是操作数的增速。
- 谈论算法的速度时,我们说的时随着输入的增加,其运行时间将以什么样的速度增加。
- 算法的运行时间用大O表示法表示。
- O(log n)比O(n)快,当需要搜索的元素越多时,前者比后者快得越多。
- 大O表示法的常量,其影响的大小跟元素数量n和算法息息相关。应根据具体情况分析是否应该考虑。



