Θ(n)和O(n)之间有什么区别?

时间:2009-01-22 22:58:39

标签: big-o time-complexity notation big-theta

有时我看到Θ(n)带有奇怪的Θ符号,中间有一些东西,有时只有O(n)。这只是打字的懒惰,因为没有人知道如何输入这个符号,或者它是否意味着不同的东西?

9 个答案:

答案 0 :(得分:574)

简短说明:

  

如果算法是Θ(g(n)),则意味着算法的运行时间n(输入大小)变大,与g(n)成正比。

     

如果算法是O(g(n)),则意味着算法的运行时间越长,最多与g(n)成比例。

通常,即使人们谈论O(g(n)),他们实际上也意味着Θ(g(n)),但从技术上讲,存在差异。


更专业:

O(n)表示上限。 Θ(n)表示紧束缚。 Ω(n)表示下限。

  
    

f(x)=Θ(g(x))iff f(x)=     O(g(x))和f(x)=Ω(g(x))

  

基本上当我们说算法是O(n)时,它也是O(n 2 ),O(n 1000000 ),O(2 n ),...但是Θ(n)算法Θ(n 2 )。

事实上,由于f(n)=Θ(g(n))意味着对于足够大的n值,f(n)可以被绑定在c 1 g(n)和c中对于c 1 和c 2 的某些值, 2 g(n),即f的生长速率渐近等于g:g can是下限以及f的上限。这直接暗示f也可以是g的下限和上限。因此,

  

f(x)=Θ(g(x))iff g(x)=Θ(f(x))

类似地,为了显示f(n)=Θ(g(n)),足以表明g是f的上界(即f(n)= O(g(n)))并且f是a g的下限(即f(n)=Ω(g(n)),其与g(n)= O(f(n))完全相同。简明地,

  

f(x)=Θ(g(x))iff f(x)= O(g(x))且g(x)= O(f(x))


还有一些小哦和小欧米茄(ω)符号表示函数的松散上边界和松散下界。

总结:

  

f(x) = O(g(x))(大哦)意味着   f(x)的增长率是。{1}}   渐近小于或等于   增长率为g(x)

     

f(x) = Ω(g(x))(big-omega)意味着   f(x)的增长率是。g(x)   渐近大于或   等于 f(x) = o(g(x))

的增长率      

f(x)(小哦)意味着   g(x)的增长率是。{1}}   渐近小于   增长率为f(x) = ω(g(x))

     

f(x)(little-omega)表示   g(x)的增长率是。f(x) = Θ(g(x))   渐近大于   增长率f(x)

     

g(x)(theta)意味着   {{1}}的增长率是。{1}}   渐近等于   增长率{{1}}

有关更详细的讨论,您可以read the definition on Wikipedia或参考经典教科书,如Cormen等人的算法导论

答案 1 :(得分:307)

有一种简单的方法(一种技巧,我猜)要记住哪种符号意味着什么。

所有Big-O符号都可以被视为有一个标准。

当查看Ω时,条形位于底部,因此它是(渐近)下限。

当看到Θ时,酒吧显然位于中间。所以它是一个(渐近)紧束缚。

当手写O时,你通常会在顶部完成,然后画一个波浪形。因此O(n)是函数的上界。公平地说,这个不适用于大多数字体,但这是名称的原始理由。

答案 2 :(得分:54)

一个是大“O”

一个是Big Theta

http://en.wikipedia.org/wiki/Big_O_notation

Big O意味着您的算法将不会执行比给定表达式(n ^ 2)

更多的步骤

Big Omega意味着您的算法将以比给定表达式(n ^ 2)

更少的步骤执行

如果同一个表达式的条件都为真,则可以使用大的θ表示法....

答案 3 :(得分:34)

我没有提供理论上的定义,而是已经在这里进行了精美的总结,我将举一个简单的例子:

假设f(i)的运行时间为O(1)。下面是一个代码片段,其渐近运行时为Θ(n)始终会调用函数f(...) n次。下限和上限都是n。

for(int i=0; i<n; i++){
    f(i);
}

下面的第二个代码片段具有O(n)的渐近运行时。它最多调用函数f(...) n次。上限为n,但下限可以是Ω(1)Ω(log(n)),具体取决于f2(i)内发生的情况。

for(int i=0; i<n; i++){
    if( f2(i) ) break;
    f(i);
}

答案 4 :(得分:10)

Theta是一种简短的方式,指的是一种特殊的位置 大O和欧米茄是一样的。

因此,如果有人声明The Theta is expression q,那么他们也必须声明Big O is expression qOmega is expression q


粗略的比喻:

如果: Theta声称,&#34;那只动物有5条腿。&#34; 然后是: 大O是真的(&#34;那只动物的腿数小于或等于5条。&#34;) 和 欧米茄是真的(&#34;那种动物的腿数超过或等于5腿。&#34;)

这只是一个粗略的类比,因为表达式不一定是特定的数字,而是具有不同数量级的函数,例如log(n),n,n ^ 2,(等)。

答案 5 :(得分:10)

chart可以让以前的答案更容易理解:

Θ-表示法 - 相同的顺序| O符号 - 上限

Θ(n) - Same order O(n) - Upper bound

英文,

在左边,注意有一个上限和下限都是相同的数量级(即 g(n))。忽略常数,如果上限和下限具有相同的数量级,则可以有效地说 f(n)=Θ(g(n)) f(n)是g(n)的大the。

从正确的,更简单的例子开始,它说上限 g(n)只是数量级并忽略常量 c (正如所有大O 表示法都有。)

答案 6 :(得分:6)

f(n)如果O(n)存在肯定k,则属于f(n)<=k*n

f(n)属于Θ(n),如果存在正k1k2k1*n<=f(n)<=k2*n

Wikipedia article on Big O Notation

答案 7 :(得分:4)

  

结论:我们认为大O,大θ和大Ω是一样的。

     

为什么呢?我将在下面说明原因:

     

首先,我将澄清一个错误的陈述,有些人认为我们只关心最糟糕的时间复杂性,所以我们总是使用大O而不是大θ。我会说这个男人是胡说八道。上限和下限用于描述一个函数,不用于描述时间复杂度。最差时间函数有其上限和下限;最好的时间函数也有其上限和下限。

     

为了清楚地解释大O和大θ之间的关系,我将首先解释大O和小O之间的关系。从定义中,我们可以很容易地知道小o是大O的子集。例如:

T(n)= n ^ 2 + n,我们可以说T(n)= O(n ^ 2),T(n)= O(n ^ 3),T(n)= O (N ^ 4)。但对于小o,T(n)= o(n ^ 2)不符合小o的定义。因此,只有T(n)= o(n ^ 3),T(n)= o(n ^ 4)对于小o是正确的。冗余T(n)= O(n ^ 2)是什么?这太棒了!

  

通常,我们说大O是O(n ^ 2),很难说T(n)= O(n ^ 3),T(n)= O(n ^ 4)。为什么?因为我们在潜意识里将大O视为大θ​​。

     

同样地,我们也在潜意识里将大Ω视为大θ。

     

总之,大O,大θ和大Ω与定义不一样,但它们在我们的口腔和大脑中都是一样的。

答案 8 :(得分:3)

使用限制

让我们考虑所有f(n) > 0的{​​{1}}和g(n) > 0。可以考虑这一点,因为最快的真实算法至少有一个操作并在启动后完成其执行。这将简化微积分,因为我们可以使用值(n)而不是绝对值(f(n))。

  1. |f(n)|

    常规

    f(n) = O(g(n))

    适用于 f(n) 0 ≤ lim ──────── < ∞ n➜∞ g(n)

    g(n) = n

    <强>示例:

              f(n)     
    0 ≤ lim ──────── < ∞
        n➜∞    n
    

    <强>反例:

        Expression               Value of the limit
    ------------------------------------------------
    n        = O(n)                      1
    1/2*n    = O(n)                     1/2
    2*n      = O(n)                      2
    n+log(n) = O(n)                      1
    n        = O(n*log(n))               0
    n        = O(n²)                     0
    n        = O(nⁿ)                     0
    
  2. Expression Value of the limit ------------------------------------------------- n ≠ O(log(n)) ∞ 1/2*n ≠ O(sqrt(n)) ∞ 2*n ≠ O(1) ∞ n+log(n) ≠ O(log(n)) ∞

    常规

    f(n) = Θ(g(n))

    适用于 f(n) 0 < lim ──────── < ∞ n➜∞ g(n)

    g(n) = n

    <强>示例:

              f(n)     
    0 < lim ──────── < ∞
        n➜∞    n
    

    <强>反例:

        Expression               Value of the limit
    ------------------------------------------------
    n        = Θ(n)                      1
    1/2*n    = Θ(n)                     1/2
    2*n      = Θ(n)                      2
    n+log(n) = Θ(n)                      1