【发布时间】: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