【问题标题】:Proving an upper and lower bound for an algorithm证明算法的上限和下限
【发布时间】:2015-06-26 19:51:06
【问题描述】:

如何证明算法的上限和下限?

到目前为止,我认为算法的上限和下限都需要通过考虑所有输入来显示,并表明它不能比 f(n) [upper bound] 并且不优于 g(n) [lower bound]。

我的讲师说,对于上限,需要一般地证明它[考虑到所有输入],但对于下限,一个例子就足够了。

这真的让我很困惑。 谁能澄清他的意思?

【问题讨论】:

  • 你的讲师错了——或者你误解了他。如果您想展示g(n) 的最佳案例性能 - 您需要:(1)证明没有输入的性能优于g(n)。 (2)(如果你希望它严格)显示一些输入,其性能为g(n),与上限相同(但方向相反)。

标签: algorithm time-complexity lower-bound


【解决方案1】:

如果你的讲师谈到最坏的情况,他是对的。

从一个例子中,您可以说运行时间“至少有那么多”(并且可能更糟),但不能说它“最多有那么多”(因为它可能更糟)。

[对称地,当谈到最佳情况时,单个情况可以保证上限。]

下限和上限是完全不同的东西。下限通常是“普遍”建立的,即与任何特定算法无关。例如,在最坏的情况下,您不能在少于 N.Log(N) 的比较中对序列进行排序,因为您需要区分 N!可能的排列,这需要收集 Lg(N!) 位信息。

相反,上限是针对特定算法确定的。例如,HeapSort 从不超过 2N.Lg(N) 次比较。当上限满足下限时,称该算法是有效的。

【讨论】:

  • 不,他不是。以快速排序为例(以枢轴作为第一个元素),我给你一个排序数组的例子。 “下限”(最佳情况下的性能)是 Theta(n^2) 吗?
  • 是的,Omega(N²) 是最坏情况下的下限。
  • 我不认为他的意思是什么,我相信他对算法的“上限”和“下限”真正意味着(措辞不佳)最佳和最差情况的性能,而不是 O 和 Omega最坏的情况。
  • 我的回答是关于最坏情况行为的下限和上限(为了完整性,也是最好的情况)。只有这样解释,讲师的引用才有意义。
  • 那么下界就相当于算法的最佳性能?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多