对于最坏情况运行时间而言大O和Ω是最佳情况,但为什么有时在最坏情况下使用Ω?

时间:2013-03-14 21:49:12

标签: algorithm data-structures heap complexity-theory asymptotic-complexity

我很困惑,我认为你在最坏的情况下使用Big O运行时间,Ω是最好的情况?有人可以解释一下吗?

并不是(lg n)最好的情况?和(nlg n)是最坏的情况?还是我误解了什么?

  

在大小堆上显示Max-Heapify的最坏情况运行时间   n是Ω(lg n)。 (提示:对于具有n个节点的堆,请为其指定节点值   导致Max-Heapify在路径上的每个节点上递归调用   从根到叶子。)

编辑:不,这不是功课。我正在练习,这有一个答案的关键买我迷茫。 http://www-scf.usc.edu/~csci303/cs303hw4solutions.pdf问题4(6.2 - 6)

编辑2:所以我误解了不是关于Big O和Ω的问题?

3 个答案:

答案 0 :(得分:17)

区分案例和界限非常重要。

分析算法时,最佳,平均和最差的是常见的案例

Upper(O,o)和lower(Omega,omega)以及Theta是函数上常见的 bounds

当我们说“算法X的最坏情况时间复杂度为O(n)”时,我们说当我们将输入限制为最坏情况输入时,表示算法X性能的函数是从上面渐近限制的一些线性函数。你可以说最坏情况输入的下限;或平均或最佳案例行为的上限或下限。

案例!=绑定。也就是说,“最糟糕的上层”和“最好的上层”是相当明智的衡量标准......它们提供了算法性能的绝对界限。这并不意味着我们不能谈论其他指标。

修改以回复您更新的问题:

该问题要求您在最坏情况行为中显示Omega(lg n)是下限。换句话说,当这个算法对一类输入所做的工作尽可能多时,它所做的工作量至少和(lg n)一样快,渐近地增长。所以你的步骤如下:(1)确定算法的最坏情况; (2)在属于最坏情况的输入上找到算法运行时的下限。

以下是线性搜索的示意图:

在线性搜索的最坏情况下,目标项目不在列表中,并且必须检查列表中的所有项目以确定这一点。因此,该算法的最坏情况复杂度的下限是O(n)。

需要注意的重要事项:对于大量算法,大多数情况下的复杂性将通过一组通用函数从上面的开始。 Theta必然会适用。因此,无论如何,你很可能不会得到Omega的答案,而不是O.

答案 1 :(得分:-1)

实际上,你使用Big O来获得比最坏情况复杂度增长更快的函数,并且使用Ω来获得比最坏情况复杂度增长更慢的函数。

所以在这里你被要求证明你的最坏情况复杂性比lg(n)差。

答案 2 :(得分:-1)

O是上限(即最坏的情况) Ω是下限(即最佳情况)

示例说,在max-heapify的最差输入中(我猜最差的输入是反向排序的输入),运行时复杂度必须(至少)lg n。因此Ω(lg n)因为它是执行复杂性的下限。