使用omega作为最坏情况下的运行时间,而不是O



我们使用omega((作为最佳运行时间,使用O((作为最坏运行时间。但在CLRS的下面的文本中,他们使用omega((来表示最坏的运行时间(下划线部分(。omega((可以代替O((用作最差的强制转换运行时间吗?

CLRS,第3章,第49页

  • "该算法在O(f(n((〃中运行;意味着存在一个常数k,使得算法最多运行kf(n(。

  • "该算法在Omega(f(n(("中运行;意味着存在常数k,使得算法在至少kf(n(中运行。

  • 当你说";即使在最坏的情况下算法也在O(f(n((〃中运行;,你在称赞你的算法:你在说这个算法保证不会慢于kf(n(。

  • 当你说";最坏的情况出现在Omega(f(n(("中;你在批评你的算法:你说每n个,就有一个大小为n的输入,在这个输入上,算法将比kf(n(慢。

在大多数情况下,人们对O((语句感兴趣,而不会太在意Omega((语句。

一个例子:quicksort的运行时

  • 快速排序在O(n^2(中运行

  • 对于每个n,存在一个特定的n大小的数组,在Omega(n^2(中快速排序在该数组上运行

  • 然而,说快速排序的运行时间是Omega(n^2(是错误的,因为在某些情况下(事实上,在大多数情况下(,快速排序运行的远小于n^2

  • 如果数组是随机均匀搅乱的,那么快速排序的预期运行时间是O(n log n(

  • 我们通常用";快速排序的运行时间为O(n^2(,其平均运行时间为0(nlogn(">

最新更新