大哦和欧米茄符号之间究竟有什么区别?

时间:2016-03-01 19:06:56

标签: c algorithm data-structures asymptotic-complexity

我知道大哦是上限,欧米茄是下限,但大多数地方我只看到很大的符号。

例如。在线性搜索算法中,最坏的情况是大哦(n)。 然而,搜索没有。可以在第一个地方找到。所以不行。输入是1.因此,这是最好的情况。所以,我们可以把它写成大欧米茄(1)。但我已经看到,在许多地方,大哦也用于最佳情况,但我不知道为什么。

我知道两种符号之间的理论差异。但是,我实际上无法理解它。

3 个答案:

答案 0 :(得分:7)

有三个重要的复杂性类别:

  1. O,Big-O =松散的上限
  2. Ω,Omega =松散的下限
  3. Θ,Theta =严格的上限和下限
  4. 重要的是要意识到O和Ω是松散的界限。它们不一定是最佳的。任何算法都有无限数量的上界和无限数量的下界。

    例如,线性搜索可以说具有O( n 2 )的上界和Ω(1)的下界。我们知道它的实际复杂性介于这些界限之间。但是,通常情况下,说明非最佳边界并不常见。这些界限是正确的但没有用。

    我们通常想要知道最小上限和最大下限。如果你说线性搜索是O( n 2 ),我可以改进你的答案并说不仅是O( n 2 ),它也是O( n )。这是一个较小的上限,因此更有用。

    不仅如此,您还必须决定是否查看最差情况平均情况最佳情况。除非另有说明,否则复杂性分析通常会考虑最坏的情况。因此,虽然您可能会偶然发现您正在寻找的项目,但线性搜索的最坏情况是必须查看所有 n 项目。 最佳情况复杂度为O(1),但最差情况为O( n )。

    如果你能证明O =Ω-最小上界和最大下界是相同的 - 那么你现在知道Θ。在最坏的情况下,线性搜索由顶部的O( n )和底部的Ω( n )限制,因此其最坏情况复杂度恰好是Θ( 名词的)。

    大多数人说算法是O(无论如何)应该使用Θ(无论如何)。如果你知道边界是一个严格的上限和下限,那么Θ优于O.但是大多数人也不记得这些复杂性,所以Big-O已成为Theta的懒惰后备。

答案 1 :(得分:0)

  

我知道两种符号之间的理论差异。但是,我实际上无法理解它。

在描述算法时,Big O被更广泛地使用,因为通常更有用的是知道算法运行得多么糟糕,因此工程师可以为任何情况做好准备。

然而,Big Omega通常没有Big O那么有用。虽然很高兴知道算法能够运行的速度有多快,但在设计软件时,工程师需要知道最坏的情况,为任何情况做好准备。

答案 2 :(得分:0)

当人们说运行时间是O(f(n))时,他们的意思是运行时间属于O(f(n))的函数类。

即,某些c的f(n)< = c.n且每n> = 0

在你的线性搜索的具体问题中,最坏的情况确实需要一些时间,即O(N)。

最好的情况需要一段时间 - T = k。但是k属于O(1)类(因为某些+ ve Epsilon的k

话虽这么说,人们松散地使用O(f(N))来表示它有点比例'到f(N)。