【问题标题】:Best-case running time: upper and lower bound? [closed]最佳情况运行时间:上限和下限? [关闭]
【发布时间】:2018-04-27 23:26:25
【问题描述】:

在我的作业中,我以语句的形式获得了一些关于算法的信息。其中一种说法是:“算法 B 的最佳运行时间是 Ω(n^2);”。

我的印象是算法的最佳情况运行时间总是下限、上限或紧限。我想知道这样的算法是否也可以具有其最佳情况运行时间的上限。如果是这样,发生这种情况的算法示例有哪些?

【问题讨论】:

标签: algorithm performance asymptotic-complexity


【解决方案1】:

case 是您考虑算法性能的一类输入。 最佳情况是您的算法运行时具有最理想的渐近界限的输入类别。通常这可能意味着没有其他类可以提供较低的 Omega 界限。 最坏情况是您的算法运行时具有最不理想的渐近界限的输入类。通常这可能意味着没有其他类可以提供更高的 O 界限。 平均情况与边界的可取性无关,而是在给定输入的某些规定分布的情况下查看运行时的预期值。等等。你可以定义你想要的任何情况。

想象以下算法:

Weird(a[1...n])
    if n is even then
        flip a coin
        if heads then bogosort(a[1...n])
        else if tails then bubble_sort(a[1...n])
    else if n is odd then
        flip a coin
        if heads then merge_sort(a[1...n])
        else if tails then counting_sort(a[1...n])

给定一个 n 整数列表,每个整数都在 1 到 10 之间,包括 1 和 10,此算法对列表进行排序。

  • 在最好的情况下,n 是奇数。最佳情况的下限是Omega(n),最佳情况的上限是O(n log n)

  • 在最坏的情况下,n 是偶数。最坏情况下的下限是O(n^2),最坏情况下没有上限(因为 bogosort 可能永远不会完成,尽管这不太可能)。

  • 要定义平均情况,我们需要定义概率。假设偶数/奇数对所有n 的可能性相同,则平均情况没有上限,平均情况下限为Omega(n^2),与最坏情况相同。要为平均情况获得不同的界限,我们需要定义分布,以便n 对于更大的列表变得越来越不可能。例如,您通常传递给该算法的唯一偶数长度列表的长度可能为 2。

【讨论】:

  • 我在一个教程上读到,平均情况总是使用 Theta 表示法。为什么我们也可以使用 Big Omega 和 Big O?
  • @0x499602D2 为什么不呢?您的教程是否解释过 Theta 只是 Big O 和 Big Omega 的交集?为什么在平均情况下这些界限必须相同,这对我来说是个谜。
  • 谢谢,这样更清楚了。
猜你喜欢
  • 2011-11-29
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 2015-03-09
  • 1970-01-01
  • 2015-02-11
相关资源
最近更新 更多