【问题标题】:Upper bounds and Lower bounds in Algorithms算法的上限和下限
【发布时间】:2025-12-24 16:45:11
【问题描述】:

我看到几篇文章将上限描述为最佳情况,将下限描述为最坏情况。同时也有文章对Worst Case的上/下界进行了解释。

所以基本上这让我问了三个问题:

  1. 究竟什么是上限/下限?
  2. 如何在最坏情况下单独定义它们?
  3. 是否也可以为其他情况(最佳、平均)定义界限?

【问题讨论】:

  • 需要注意的一点 - O(n) 等渐近符号是数学的一部分,用于描述/分类/表征函数。 IIRC 是 Knuth 最先鼓励使用它们来描述算法的时间和空间复杂性。 “上限”和“下限”总是有意义的,但是在描述一般函数时(不适用于算法),没有关于最佳或最差的一般规则。我曾经问过一个相关的(不重复的)问题here
  • 我浏览了为您的问题提供的答案。谢谢你! :)

标签: algorithm time-complexity lower-bound upperbound


【解决方案1】:

几乎从不讨论最好的情况。它根本没那么有趣。算法总是可以修改为具有最小的理论上可能的最佳情况,即 O(max(size-of-input, size-of-output)),只需识别一个特定的输入并生成为该输入预先计算的输出。在基准测试业务中,这被称为作弊。

这里的术语“界”与其他数学中的含义相同,即不大于(不小于)给定集合的任何元素的任意值。

例如,在讨论排序算法的集合时,我们可以证明没有一个基于比较的排序算法比 O(n log n) 的渐近效率更好在最坏的情况下(并且在平均情况)。因此,O(n log n) 是所有可能的基于比较的排序算法在最坏情况下(以及平均情况下)效率的 a 下限。 O(n) 是另一个下限。 O(n log n) 是比 O(n) 更好的下限。恰好 O(n log n) 是 the 紧密的下界,因为事实上存在具有这种复杂性的排序算法。

排序算法集的复杂性没有有限的上限,因为可以创建任意错误的排序算法。

另一方面,我们可以讨论一个特定的排序算法,并证明它永远不会超过一定数量的操作,这将是其复杂性的上限。例如,快速排序算法的上限为 O(n2)。它的上限也是 O(n3)。它确实 not 有 O(n log n) 的上限,因为有一些输入使它超过了这个操作数。 O(n2) 的界限很紧,因为它是通过某些输入达到的。

理论上,可以按照与上述相同的意义讨论下限,但这几乎从未发生过(这相当于讨论最佳情况的复杂性,而我们通常对此并不感兴趣)。

我们还可以讨论特定问题的难度,并为其设置上限和下限。解决它的最有效算法(在最坏或平均情况下)的效率如何? (我们不讨论最好的情况,因为答案并不有趣,见上文)。对于基于比较的排序问题,我们知道紧上界和紧下界都是 O(n log n),因为实际上有 O(n log n) 的排序算法,可以证明没有更好的算法存在。这不是一个非常有趣的案例,因为我们可以找到最有效的算法。例如背包问题的情况更有趣。我们只知道存在 O(2n) 的上限是因为具有这种复杂性的算法微不足道(蛮力算法)。我们怀疑但不能证明这个界限很紧。我们也无法提供任何好的下界(我们怀疑没有算法可以解决多项式复杂度但无法证明它)。

【讨论】:

  • 感谢您的澄清!
【解决方案2】:

究竟什么是上限/下限?

我们对函数的边界感兴趣,您可以阅读Wikipedia

此外,answer 的一部分提到:

对于函数f(n)g(n)上限 (big O),如果对于“足够大的 n”,f(n)<=c*g(n),对于常量 c。 [g 支配 f]
g(n) 是下界 (big Omega),如果对于“足够大的 n”,f(n) >= c*g(n),对于常量 c。 [f支配g]

如何在最坏情况下单独定义它们?

它们要么不同,要么相同;在这种情况下,我们说 Θ(n),其中 n 通常是问题的大小。正如杜克林所说:

更糟糕的情况、最佳情况和平均情况可以*表示为一个函数(用于终止算法)。这些函数中的每一个都有上限和下限(其中有无限多个)。对每个元素执行恒定数量的操作(例如,插入排序的最佳情况和线性搜索的平均/最差情况)将具有 Θ(n) 的紧密界限(下限和上限),但也有 O( n2) 或 Ω(1) 的下限。

是否也可以为其他情况(最佳、平均)定义界限?

是的。可能所有情况都有其上限和下限。

【讨论】:

  • “下限是最好的情况”没有。
  • @n.m.你能解释一下吗? =)
  • Bounds。在谈论复杂性时,边界是我们对算法可能执行的真实操作数的估计,通常在最坏或平均情况下,最好的情况根本不感兴趣,例如,O(n log n) 是基于比较的排序算法的复杂性,这意味着没有算法比在最坏的情况下更有效(在平均情况下也是如此)。特定算法可能在特定输入上表现更好,但这一点也不有趣。
  • 更糟糕的是,最好和平均情况可以*表示为一个函数(用于终止算法)。这些函数中的每一个都有上限和下限(其中有无限多个)。对每个元素执行恒定数量的操作(例如,插入排序的最佳情况和线性搜索的平均/最坏情况)将具有 Θ(n) 的紧密界限(下限和上限),但也有 O( n^2) 或 Ω(1) 的下限。
  • 请注意您自己在回答中链接到的Stack Overflow 问题表明最坏的情况可能同时具有上限和下限。