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

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


简短的解释:

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

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

通常,即使人们谈论O(g(n)),他们实际上意味着Θ(g(n)),但从技术上讲,这是有区别的。


更具体地说:

O(n)表示上限。 Θ(n)表示紧密结合。 Ω(n)代表下限。

如果f(x)= O(g(x))且f(x)=Ω(g(x)),则f(x)=Θ(g

基本上当我们说一个算法是O(n)时,它也是O(n2),O(n1000000),O(2n),...但是一个Θ(n)算法不是 Θ(n2)。

事实上,由于f(n)=Θ(g(n))意味着对于足够大的n值,对于c1和c2的某些值,f(n)可以在c1g(n)和c2g f的生长速率是渐近等于克:克可以是一个下限和上界的F。 这直接暗示f也可以是g的下界和上界。 所以,

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

同样,为了显示f(n)=Θ(g(n)),它足以表明g是f的上界(即f(n)= O(g(n))),f是下界g(即f(n)=Ω(g(n)),这与g(n)= O(f(n))完全相同)。 简洁,

如果f(x)= O(g(x))且g(x)= O(f(x)),则f(x)=Θ(g


还有一些小欧姆和小欧米茄( ω )符号表示函数的宽松上限和下限。

总结:

f(x) = O(g(x)) (big-oh)意味着f(x)的增长率渐近地小于或等于g(x)的增长率。

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

f(x) = o(g(x)) (little-oh)意味着f(x)的增长率渐近地小于g(x)的增长率。

f(x) = ω(g(x)) (little-omega)意味着f(x)的增长率渐近地大于g(x)的增长率,

f(x) = Θ(g(x)) θ表示f(x)的增长率渐近地等于g(x)的增长率,

有关更详细的讨论,您可以阅读维基百科上的定义,或参阅Cormen等人的“算法导论”等经典教科书。


有一个简单的方法(我猜)是要记住哪个符号意味着什么。

所有的大O符号可以被认为有一个酒吧。

当看一个Ω时,该条在底部,所以它是(渐近的)下限。

当看Θ时,酒吧显然在中间。 所以这是一个(渐近的)紧密的界限。

当手写O时,你通常会在顶部完成,并画出一条曲线。 因此O(n)是函数的上界。 公平地说,这个不适用于大多数字体,但它是名称的最初理由。


一个是大“O”

一个是Big Theta

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

大O意味着你的算法将在不超过给定表达式(n ^ 2)的情况下执行,

大欧米茄意味着你的算法将以比给定表达式(n ^ 2)更少的步骤执行,

当两个条件对于相同的表达式都成立时,您可以使用big theta符号....

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

上一篇: What is the difference between Θ(n) and O(n)?

下一篇: Computational complexity of Fibonacci Sequence