Big-O和Big-theta可以互换使用吗?

时间:2012-09-09 04:31:43

标签: algorithm big-o notation

我正在研究Thomas H. Corman撰写的“算法导论”一书。我正在研究渐近符号。有一件事困扰着我,因为作者说:

f(n)= Big-theta(g(n))意味着f(n)= Big-O(g(n)),因为Big-theta符号比O符号更强。 /强>  如何??

并且作者还声明(an ^ 2 + bn + c),其中a> 0,在 Big-theta(n ^ 2)中也显示这种二次函数在 Big-O(n ^ 2)中。 如何??

2 个答案:

答案 0 :(得分:1)

我认为你对这些条款感到困惑。

f(n) = O(g(n)) - 表示g(n)f(n)的上限。形式上 - 存在const n0, c,这样对于所有n>n0, f(n)<= c*g(n)。您可以将其想象为两个图表,例如c*g(n)高于f(n)。 例如:5n^2+n = O(n^2)

为什么?

因为,例如,n0=10c=10,然后是所有n>n0 - 5n^2+n <= 10*n^2

f(n) = Theta(g(n)) - 表示g(n)f(n)的上限和下限。形式上 - 存在const n0, c1, c2,这样对于所有n>n0, c1*g(n)<=f(n)<=c2*g(n)。您可以将其想象为三个图表,例如f(n)介于c1*g(n)c2*g(n)之间。 例如:5n^2+n = Theta(n^2)

为什么?

因为,例如n0=100c1=1,c2=100然后是n>n0 - n^2<=5n^2+n<=100*n^2

答案 1 :(得分:0)

(在本书的V1中)f()在Theta(g(n))中的定义是存在正常数C1和C2,使得0 <= C1g(n)<= f(n) )&lt; = C2g(n),对于所有n> = N0

O(g(n))的定义是存在单个C,使得对于所有n&gt; = N0

,0 <= f(n)&lt; = Cg(n)

因此,如果你能找到足够大的常数N0,C1和C2来满足第一个定义,你可以使用常数N0和C = C2来满足第二个定义。因此,第一个定义比第二个定义更强,因为满足第一个定义的任何东西都满足第二个定义 - 关于二次方的业务就是这个特例。