算法复杂度的下限最坏情况和下限最好情况

问题描述

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

我已经看到了这个问题 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),即奶子已经坏了,如果可能,我们需要优化

解决方法

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

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