【问题标题】:lower bound worst case and lower bound best case in algorithmic complexity算法复杂度的下限最坏情况和下限最佳情况
【发布时间】:2021-09-27 07:46:53
【问题描述】:

我认为找到最坏情况的上限在大多数情况下是有意义的,因为这就是我们如何了解算法的最大运行时间的方式,并且我们可以预期给定的算法永远不会超过该限制。但是,与此相反,我们何时使用下限最坏情况和下限最佳情况分析?为什么?

我已经看到这个问题的答案Example of algorithm which has different worst case upper bound, worst case lower bound and best case bounds?,但不明白为什么当 O 清楚地了解复杂性时,为什么需要计算 Ω 和 Θ。

编辑


我的问题不在于我们在哪里使用下限,我已经看到了一些关于此的示例。我的问题是为什么以及何时选择下限 (omega) 而不是上限 (Big O) 来确定最坏的情况。

是因为

下界立即给运行时提供一些限制,即使我们 算法还没深入分析?

例如假设一个算法的上界最坏情况是O(n!),我没有深入分析算法但发现下界最坏情况已经Ω(2^n)那么我可以得出结论,而不是更进一步运行时复杂度最坏的情况是Ω(2^n),也就是说,山雀已经很糟糕了,如果可能的话我们需要优化

【问题讨论】:

  • 根据我的经验,人们通常认为复杂的递归算法(很难获得准确的时间界限)很慢。
  • O 并没有清楚地说明复杂性。 Θ 清楚地说明了复杂性,因为它既是上限又是下限。但是,有些算法没有Θ。对于这些算法,您需要找到一个紧密 ΩO 以全面了解算法的性能。然而,在大多数情况下,只有最坏情况下的性能(由O 给出)是有意义的,因此O 是最常被引用的性能指标。
  • @user3386109 如果Θ(紧界)清楚地了解算法的复杂性,那么在最坏的情况下,为什么我们不考虑Θ(g(n)) 而不是O(g(n)),例如,在未排序的数组中查找最大元素的算法时间复杂度是 Θ(n) 而不是 O(n)
  • 更准确地说,为什么我们不至少在它适用的地方(Θ)使用紧密绑定。 “然而,在大多数情况下,只有worst-case 的性能(由O 给出)是有意义的,这就是为什么O 是最常被引用的性能指标。”我也理解这部分我的问题是为什么ΩO 是最常被引用的性能指标。

标签: algorithm time-complexity big-o computer-science complexity-theory


【解决方案1】:

这是一个例子。假设有人说“我有一个算法可以列出 n 元素集的所有子集”,我们想看看它需要运行多长时间。由于一个 n 元素集有 2n 个不同的子集,算法的运行时间必须至少为 Ω(2n),因为任何比这更快的都无法列出所有这些子集。这是算法最坏情况运行时的下限,我们甚至不需要看算法是什么来推导它。如果我们的目标是说“是的,这肯定不够快,因为我们的输入中有数千个项目”,我们可能可以在这里直接调用它,而无需研究算法的细节。

另一个例子是问题存在已知下限的情况。例如,如果有人发明了一种新的基于比较的排序算法,我们可以说最坏情况下的运行时间是 Ω(n log n)。可能比这更糟,但肯定至少要花那么多时间。

【讨论】:

  • 感谢您的解释,但我有两个问题,1. 对于列出 n 元素集的所有子集的同一算法,算法的运行时间为上限 O(2^n) 和紧密绑定Θ(2^n). 它满足这个方程c1*g(n) <=f(n)<=c2*g(n) 因此Ω(2n),Θ(2^n),O(2^n) 它们都是正确的,即。较低(至少)== 紧== 较高,那你为什么说必须至少是 Ω(2n) 而不是“该算法的确切紧界复杂度”是Θ(2^n) 或“上限时间复杂度”是 @ 987654328@
  • 2.我在互联网上看到了几个例子,就像你给出的第二个例子一样。老实说,当人们可以计算出上限最坏情况 O(g(n)) 时,我并没有理解 Ω(g(n)) 背后的想法。
  • 对于 (1),这将取决于算法是如何实现的。编写一个算法来列出表现非常糟糕的子集并不难,例如,多次列出相同的子集。 (这是我的学生第一次学习递归时遇到的常见错误!)在这种情况下,获得准确的下限可能要困难得多。另外,我不相信您可以在 Theta(2^n) 时间内列出所有子集,因为写出这些子集的元素需要花费超过 O(1) 的时间来列出最多 n 个集合元素。
  • 这意味着我们的指数下限在这里可能已经足够好了,如果我们想说服自己对于 n = 1000 来说它太慢了,即使我们不知道确切的界限是什么。
  • 对于 (2),同样取决于算法。一些比较排序确实需要时间 O(n log n)。其他人在最坏的情况下需要时间 Theta(n^2)。使用排序下界的想法是,即使我们没有深入分析算法,它也会立即在运行时给出一些界限。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
相关资源
最近更新 更多