我正在研究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)中。 如何??
答案 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=10
和c=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=100
和c1=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来满足第二个定义。因此,第一个定义比第二个定义更强,因为满足第一个定义的任何东西都满足第二个定义 - 关于二次方的业务就是这个特例。