我们使用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(">