【发布时间】:2020-08-25 13:50:57
【问题描述】:
我们使用 omega() 作为最佳情况的运行时间,使用 O() 作为最坏情况的运行时间。但是在下面来自 CLRS 的文本中,他们使用 omega() 来表示最坏情况下的运行时间(下划线部分)。可以使用 omega() 代替 O() 作为最差运行时间吗?
【问题讨论】:
标签: algorithm
我们使用 omega() 作为最佳情况的运行时间,使用 O() 作为最坏情况的运行时间。但是在下面来自 CLRS 的文本中,他们使用 omega() 来表示最坏情况下的运行时间(下划线部分)。可以使用 omega() 代替 O() 作为最差运行时间吗?
【问题讨论】:
标签: algorithm
“算法在 O(f(n)) 中运行”表示存在一个常数 k,使得算法最多在 k f(n) 中运行。
“算法在 Omega(f(n)) 中运行”表示存在一个常数 k,使得该算法在至少 k 个 f(n) 中运行。
当您说“即使在最坏的情况下,算法也以 O(f(n)) 运行”时,您是在称赞您的算法:您是在说算法保证不会比 k f(n) 慢.
当您说“在 Omega(f(n)) 中运行最坏的情况”时,您是在批评您的算法:您是说对于每个 n 都有一个大小为 n 的输入,在该输入上算法将慢于k f(n)。
在大多数情况下,人们对 O() 语句感兴趣,而不会过多地使用 Omega() 语句。
快速排序在 O(n^2) 中运行
对于每个 n,存在一个特定的大小为 n 的数组,在 Omega(n^2) 中快速排序在该数组上运行
但是,说快速排序的运行时间是 Omega(n^2) 是错误的,因为在某些情况下(实际上大多数情况下),快速排序的运行时间远小于 n^2
如果数组是随机均匀打乱的,那么快速排序的预期运行时间是O(n log n)
我们通常会说“快速排序的运行时间是O(n^2),平均运行时间是O(n log n)。”
【讨论】: