If you're seeing this message, it means we're having trouble loading external resources on our website.

如果你被网页过滤器挡住,请确保域名*.kastatic.org*.kasandbox.org 没有被阻止.

主要内容

渐近表示法中的函数

当使用渐近符号表示算法运行时间关于输入规模n的增长速率时,有些事情需要记住。
让我们从一些简单的事情开始。假设一个算法需要常量时间,而不考虑输入大小。例如,如果为您提供了一个已按升序排序的数组,而您必须找到最小元素,则只需要常量时间,因为最小元素必须位于索引0。由于我们喜欢在渐近表示法中使用n的函数, 所以可以说此算法以Θ(n0)时间运行。为什么?因为n0=1,并且算法的运行时间的常数系数为1。在实践中, 我们不写Θ(n0),而写作Θ(1)
假设一个算法需要 Θ(log10n) 的运行时间。你也可以说,它需要Θ(log2n)的运行时间。当对数的底是一个常数时,这个常数是什么对于渐近表示法来说并不重要。 为何?有一个数学公式表明:
logan=logbnlogba
对于所有正数abn,如果ab 是常数,则loganlogbn 只差一个系数logba,而这个系数是一个常量,我们在使用渐近表示法的时候可以忽略它。
因此,我们可以说最坏情况下的二分搜索的运行时间是Θ(logan)a是任何正数。为什么?猜测次数最多是log2n+1,每一次猜测和验证都需要常量时间,启动和返回结果也需要常量时间。然而,在实际应用中,我们经常说二分搜索需要的运行时间是Θ(log2n),因为计算机科学家更喜欢用2的幂来描述问题。
这是一个我们在使用渐近表示法时常常看见的函数顺序。如果ab 是常数,且a<b, 则运行时间Θ(na)比运行时间Θ(nb)增长更慢。例如运行时间Θ(n),即Θ(n1),比运行时间Θ(n2)增长更慢。这个指数不需是整数。例如,运行时间Θ(n2)比运行时间Θ(n2n)(即Θ(n2.5))增长更慢。
下图比较了nn2n2.5的增长:
用图比较n、n的平方、n的2.5次幂。
对数比多项式增长更慢。也就是说,Θ(log2n) 比关于 任何 正常量 aΘ(na)的增长更慢。但是, 由于 log2n的值随n 的增加而增加,则Θ(log2n)Θ(1)增长更快。
下图比较了1nlog2n的增长:
用图比较1、n、以2为底的n的对数。
下面列出了渐近表示法中的函数列表,我们在分析算法时经常会遇到这些函数, 按最慢到增长最快的速度排序:
  1. Θ(1)
  2. Θ(log2n)
  3. Θ(n)
  4. Θ(nlog2n)
  5. Θ(n2)
  6. Θ(n2log2n)
  7. Θ(n3)
  8. Θ(2n)
  9. Θ(n!)
请注意,指数函数an (其中 a>1)的增长速度快于任何多项式函数nb, 其中 b 是任何常量。
上面的列表并没有一一穷举,尚有许多函数的运行时间没有列出。希望你能在你的计算机科学的旅程中遇到一些这样的问题。

本内容是 达特茅斯计算机科学 教授 Thomas CormenDevin Balkcom,与可汗学院的计算课程团队合作完成。内容获得许可 CC-BY-NC-SA

想加入讨论吗?

尚无帖子。
你会英语吗?单击此处查看更多可汗学院英文版的讨论.