Theta和Big O符号用简单的语言表达

在试图理解ThetaO符号之间的区别时,我遇到了以下说法:

The Theta-notation asymptotically bounds a function from above and below. When
we have only an asymptotic upper bound, we use O-notation.

但我不明白这一点。 这本书在数学上解释了它,但它太复杂了,当我真的不理解时,阅读变得很无聊。

任何人都可以用简单而强大的例子来解释两者之间的区别。


大O只给出上界渐近界,而大θ也给出下界。

所有那些Theta(f(n))也是O(f(n)) ,但不是相反。
如果它是O(f(n)) Omega(f(n))则称T(n)Theta(f(n))

出于这个原因, big-theta更具信息性,然后是big-O符号,所以如果我们可以说一些大的theta,它通常是首选。 然而,证明某些东西是大的Theta比证明它是大O更难。

例如 ,合并排序既是O(n*log(n))又是Theta(n*log(n)) ,但它也是O(n2),因为n2比它渐近地“大”。 然而,它不是Theta(n2),因为算法不是欧米茄(n2)。


Omega(n)是渐近下界。 如果T(n)Omega(f(n)) ,则意味着从某个n0 ,存在一个常数C1 ,使得T(n) >= C1 * f(n) 。 而大O表示有一个常数C2 ,使得T(n) <= C2 * f(n))

所有三个(Omega,O,Theta)只给出渐近信息(“用于大量输入”):

  • 大O给出上限
  • 大欧米茄给下界和
  • Big Theta给出了下限和上限
  • 注意,这个符号是相关的算法最好,最差,平均情况分析。 这些中的每一个都可以应用于每个分析。


    我只会引用Knuth的TAOCP第1卷 - 第110页(我有印度版)。 我建议阅读第107-110页( 第1.2.11节渐近表示法

    人们经常会混淆O-记法,假设它给出了增长的确切顺序; 他们使用它,就好像它指定了一个下界和一个上界。 例如,一个算法可能被称为低效率,因为它的运行时间是O(n ^ 2)。 但是运行时间O(n ^ 2)并不一定意味着运行时间也不是O(n)

    在页107,

    1 ^ 2 + 2 ^ 2 + 3 ^ 2 + ... + n ^ 2 = O(n ^ 4)和

    1 ^ 2 + 2 ^ 2 + 3 ^ 2 + ... + n ^ 2 = O(n ^ 3)和

    1 ^ 2 + 2 ^ 2 + 3 ^ 2 + ... + n ^ 2 =(1/3)n ^ 3 + O(n ^ 2)

    大哦是近似值。 它可以让你用等号代替〜。 在上面的例子中,对于非常大的n,我们可以确定数量将保持在n ^ 4和n ^ 3和(1/3)n ^ 3 + n ^ 2 [而不仅仅是n ^ 2]以下,

    大欧米茄是用于下界的 - 对于大N,Omega(n ^ 2)算法不会像O(N logN)那样高效。但是,我们不知道N的值是多少(从这个意义上我们知道约)

    Big Theta是按照增长的确切顺序,包括上限和下限。


    这是我的尝试:

    函数f(n)O(n) ,当且仅当存在常数c ,使得f(n) <= c*g(n)

    使用这个定义,我们可以说函数f(2^(n+1))O(2^n)

  • 换句话说,是否存在一个常数'c'使得2^(n+1) <= c*(2^n) ? 注意第二个函数( 2^n )是大O在上述问题之后的函数。 起初,这让我感到困惑。

  • 那么,使用你的基本代数技巧来简化这个方程。 2^(n+1)分解为2 * 2^n 。 这样做,我们留下了:

    2 * 2^n <= c(2^n)

  • 现在它的方便,方程适用于任何值c其中c >= 2 。 所以,是的,我们可以说f(2^(n+1))O(2^n)

  • 大欧米茄的工作原理是一样的,只是它对某个常量'c'评估f(n) > = c*g(n)

    所以,以相同的方式简化上述功能,我们留下了(注意> =现在):

    2 * 2^n >= c(2^n)

    因此,该方程适用于范围0 <= c <= 2 。 所以,我们可以说f(2^(n+1))(2^n)大欧米加。

    现在,由于这两者都成立,我们可以说功能是Big Theta( 2^n )。 如果其中一个不能用于'c'的常数,那么它不是Big Theta。

    上面的例子来自Skiena的算法设计手册,这是一本很棒的书。

    希望有所帮助。 这确实是一个难以简化的概念。 不要太沉迷于'c' ,只要把它分解成简单的术语并使用你的基本代数技巧。

    链接地址: http://www.djcxy.com/p/6827.html

    上一篇: Theta and Big O notation in simple language

    下一篇: Ukkonen's suffix tree algorithm, what is necessary?