【问题标题】:The use of omega as the worst-case running time instead of O使用 omega 作为最坏情况运行时间而不是 O
【发布时间】:2020-08-25 13:50:57
【问题描述】:

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

CLRS, Chapter 3, Page 49

【问题讨论】:

    标签: algorithm


    【解决方案1】:
    • “算法在 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)。”

    【讨论】:

    • 非常感谢史蒂夫!所以说quicksort的运行时间是Omega(n^2)是错的吗?
    • 是的,说快速排序的运行时间是 Omega(n^2) 是错误的。快速排序的最坏情况运行时间是 Omega(n^2)。但是快速排序的最佳运行时间是 O(n log n)(还有 Omega(n log n))。
    • 我们通常会说“快速排序的运行时间是O(n^2),平均运行时间是O(n log n)”。此处的“平均运行时间”非常含糊,但表示“如果阵列随机均匀随机排列,则预期的运行时间”。不过,为平均运行时间编写严格的证明比听起来要难。
    • Sorry Stef,请问错的原因?
    • 因为在某些情况下(实际上在大多数情况下),快速排序的运行时间远少于 n^2。所以你不能说“快速排序在 Omega(n^2) 中运行”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多