算法的上界和下界

时间:2017-05-25 11:03:37

标签: algorithm time-complexity lower-bound upperbound

我看到几篇文章将上限描述为最佳案例,将下限描述为最坏情况。同时,一些文章对最坏情况的上下界进行了解释。

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

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

2 个答案:

答案 0 :(得分:5)

一个人几乎从未讨论过最好的案例。它根本不那么有趣。通过识别一个特定输入并产生为该输入预先计算的输出,可以始终修改算法以具有理论上可能的最小最佳情况,即O(最大值(输入大小,输出大小))。在基准测试业务中,这被称为作弊。

此处绑定的术语与其余数学中的含义相同,即任意值不大于(不小于)给定集合的任何元素。

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

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

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

理论上可以用与上述相同的意义来讨论下界,但这几乎从未完成(这相当于讨论最佳案例的复杂性,我们通常不感兴趣)。

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

答案 1 :(得分:0)

  

上/下界究竟是什么?

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

此外,answer的一部分提及:

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

  

如何在最坏情况场景中单独定义它们?

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

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

  

是否可以为其他案例(最佳,平均)定义界限?

是。所有案例都有可能具有上限和下限。