渐近时间复杂度与最佳、平均和最坏情况输入的组合

Posted

技术标签:

【中文标题】渐近时间复杂度与最佳、平均和最坏情况输入的组合【英文标题】:Combinations of Asymptotic Time Complexities with Best, Average and Worst Case Inputs 【发布时间】:2021-12-04 20:15:54 【问题描述】:

我对许多声称渐近符号与最佳情况、平均情况和最坏情况时间复杂度无关的说法感到困惑。如果是这种情况,那么大概以下组合都是有效的:

时间复杂度 O(n)

    最佳情况 - 最佳情况输入的上限

为了尽可能最好的输入,这个算法执行的基本操作的数量永远不会超过 n 的某个常数倍数。

    平均案例 - 平均案例输入的上限

对于平均输入,此算法执行的基本操作的数量永远不会超过 n 的某个恒定倍数。

    最坏情况 - 最坏情况输入的上限

对于最坏的可能输入,该算法执行的基本操作的数量永远不会超过 n 的某个恒定倍数。

时间复杂度:Ө(n)

    最佳案例 - 最佳案例输入的严格限制

为了尽可能获得最佳输入,该算法执行的基本操作的数量永远不会超过或小于 n 的某个常数倍数。

    平均案例 - 平均案例输入的严格限制

对于平均输入,此算法执行的基本操作的数量永远不会超过或小于 n 的某个恒定倍数。

    最坏情况 - 最坏情况输入的严格限制

对于最坏的可能输入,此算法执行的基本操作的数量永远不会超过或小于 n 的某个恒定倍数。

时间复杂度:Ω(n)

    最佳情况 - 最佳情况输入的下限

为了尽可能最好的输入,这个算法执行的基本操作的数量永远不会少于 n 的某个常数倍数。

    平均案例 - 平均案例输入的下限

对于平均输入,该算法执行的基本操作的数量永远不会少于 n 的某个恒定倍数。

    最坏情况 - 最坏情况输入的下限

对于最坏的可能输入,此算法执行的基本操作的数量永远不会少于 n 的某个恒定倍数。


以上哪项有意义?在根据输入增长时执行时间来评估算法的效率时,通常在实践中使用哪些?据我所知,其中有几个是多余的和/或矛盾的。

我真的没有看到上限、严格和下限的概念与最佳、平均和最坏情况输入无关。这是我研究得越深入,我就越困惑的那些话题之一。如果有人能帮我澄清一下这个问题,我将不胜感激。

【问题讨论】:

我觉得这个问题最好在这里问:cs.stackexchange.com 所有这些都有意义。您认为哪些是多余和/或矛盾的,为什么? 此问题已回答here on cs.stackexchange.com。 @kaya3 例如,任何知道输入是最好或最坏情况的,不应该严格限制,因为“质量”的范围没有歧义“的输入?从我有限的角度来看,这将使 1)、3)、4)、6)、7) 和 9) 没有实际用途。你能帮助我进一步了解我缺少什么吗? 当然,在任何情况下,您都会总是更喜欢一定要紧。但更严格的界限通常更难证明。 【参考方案1】:

所有的陈述都是有道理的。

在实践中,除非另有说明,否则我们应该讨论所有情况下的最坏情况输入。

我们经常关注平均案例输入,尽管“平均案例”的定义有点不可靠。通常最好谈论“预期时间”,因为这是一个更精确的数学定义,对应于人们通常所说的“平均情况”。不幸的是,人们在这里经常马虎,你会经常看到复杂性陈述指的是预期时间而不是最坏情况时间,但不要提及它。

我们很少关注最佳案例输入。

不幸的是,人们经常会混淆最佳与最坏情况输入与上限与下限的概念,尤其是在 SO 和其他非正式网站上。

您总是可以回到定义,就像您已经做过的那样,找出语句的真正含义。

“该算法在 X(n2) 时间内运行”表示给定函数 f(n) 的最坏情况执行时间与问题规模的关系在任何环境中,该函数将在集合 X(n2) 中。

“该算法在 X(n2) 预期时间内运行”表示给定函数 f(n) 在任何环境中执行时间与问题大小的数学预期 em>,该函数将在集合 X(n2) 中。

最后,请注意在任何环境中实际上只适用于特定的计算模型。我们通常假设random access machine,因此复杂性陈述对于例如图灵机实现无效。

【讨论】:

我还在苦苦挣扎,因为在我看来,“上限”和“最坏情况”的概念似乎是同义词。我没有看到平均或最佳情况输入的上限实际上意味着什么。我确实让您指出平均值与预期值,这很有帮助,但在试图找出算法的时间复杂度时,我仍然对何时应该使用 theta 和 big-O 感到困惑。 @RobinAndrews 问题大小为 N 的最佳案例输入是可以最快解决的大小为 N 的问题。对于每个大小,都有一个最佳案例问题,因此有一个函数 f(n) 可以为每个大小提供最佳案例时间。如果不指定具体实现,您无法了解此函数的很多内容,或者可能有一些无法弄清楚的内容,但您可以为其设置渐近界限——上限和下限。 我想让我感到困惑的是,例如,如果我们知道我们的输入是最好的情况,那么为什么我们需要除紧界之外的任何东西,因为输入没有歧义 - 它可以就算法在其上执行的速度而言,它并不比它更好。我的困惑至少有意义吗? 渐近符号的不确定性与输入有关。不确定性来自于没有指定特定的实现/系统,也无法证明算法的所有属性。 您所写的内容似乎暗示实现细节可以在时间复杂度方面解释整个不同的类,从而证明使用上限而不是紧限制是合理的。真的是这样吗,还是我误会了?

以上是关于渐近时间复杂度与最佳、平均和最坏情况输入的组合的主要内容,如果未能解决你的问题,请参考以下文章

如何从最坏平均最好的情况分析复杂度?

QuickSort 最佳情况比平均情况最差

MAX_HEAPIFY 算法和最坏情况的递归关系

最好最坏平均均摊时间复杂度

复杂度分析(下):浅析最好最坏平均均摊时间复杂度

算法最坏,平均和最佳情况(Worst, Average and Best Cases)-------geeksforgeeks 翻译