Algorithm 二次函数的渐近紧界
在CLR中(由Cormen、Leiserson、Rivest和Stein编写),用于函数 f(n)=an2+bn+c 他们说 假设我们取常数c1=a/4,c2=7a/4,n0=2·max(| b |/a,√(| c |/a))。Algorithm 二次函数的渐近紧界,algorithm,asymptotic-complexity,clrs,Algorithm,Asymptotic Complexity,Clrs,在CLR中(由Cormen、Leiserson、Rivest和Stein编写),用于函数 f(n)=an2+bn+c 他们说 假设我们取常数c1=a/4,c2=7a/4,n0=2·max(| b |/a,√(| c |/a))。 然后0≤ c1n2≤ an2+bn+c≤ 所有n的c2n2≥ n0. 因此f(n)是Θ(n2) 但他们没有说明这些常量的值是如何产生的? 我试图证明这一点,但无法做到。 请告诉我这些常数是怎么来的?c1和c2可以任意选择,只要02*max 类似地,对于c2要证明任何多项
然后0≤ c1n2≤ an2+bn+c≤ 所有n的c2n2≥ n0.
因此f(n)是Θ(n2) 但他们没有说明这些常量的值是如何产生的?
我试图证明这一点,但无法做到。
请告诉我这些常数是怎么来的?
c1
和c2
可以任意选择,只要0
和a
。
然后以此计算n0
,因此不等式0的思想是(对于足够大的n)在两个“纯”增长函数(只有一个比例常数)之间“陷阱”感兴趣的函数。在该图中,两个二次函数(以红色和蓝色绘制)被困在两个纯增长函数(以黑色绘制)之间,并且指出了每种情况下n0的最小可能值
一旦你选择了c1和c2的值,你就可以通过将你的函数与两个纯增长函数相交并取最右边的交点来找到n0的值
但是你不关心得到n0的最小可能值-我们在这里做渐近,所以任何足够大的值都可以-所以你可以使用近似来得到它的上界
有关如何将n0的上界转换为CLRS中给出的形式,请参见davin的答案。这些特定常数没有什么特别之处(除了在某个n
值的上下文中,它们将满足f
的θ度这一事实)。没有魔法。如果你能找到其他正常数,那么这个关系也同样有效(事实上,c1
对于任何0=3ac
,都可以是ka
(如果不是,那么二次型是正定的,这更好,因为它在任何地方都>=0,不等式对所有n都成立).我应该指出,这是一个有效的解决方案,尽管我们会做更多的工作,直到我们得到这本书的描述
我们可以将我们的分析分为两种情况。首先,假设|b |/a>=sqrt(| c |/a)
。因此我们可以从sqrt(…)
的内部绑定4b^2
,并需要n>2/3*[sqrt(4b^2)-b
,其上限为2/3*3*b
第二种情况,让我们假设|b |/a
,那么我们可以从sqrt(…)
的内部用4a | c |
进行绑定,并且需要n>2/3*[sqrt(4a | c |)-b]/a
,它的上界可以是2/3*3*3*sqrt(a | c)2sc>
所以在每种情况下,我们都看到当我们取max(|b |/a,sqrt(|c |/a))
我们的不等式在n>2*max
类似地,对于c2
要证明任何多项式f(n)=a0+a1*n+a2*n^2+a3*n^3+…+am*n^m是θ(n^m),请遵循两个简单步骤。
步骤1.证明f(n)是bigOh(n^m)
步骤2.证明f(n)是bigOmega(n^m)
如果上述两个条件都成立,那么肯定f(n)是bigTheta(n^m)
这是一个推广,把m=2,你得到f(n)是大θ(n^2)
很简单,不是吗?很简单
1.c10而b、c为正或负
现在我们必须选择n的值,这样b/n+c/n^2在上述等式的RHS中永远不会超过a,否则它会变成负值,c1也会变成负值。但根据定义c1是一个正常数
所以我们要确保
a> b/n+c/n^2
如果我们选择n=2*max(|b |/a,sqrt(|c |/a))
我们将得到b/n+c/n^2作为一个表达式,其值小于a/2+a/4
因此,a+b/n+c/n^2的最大值为a+a/2+a/4,最小值为a-(a/2+a/4),即c2和c1的值
c1=a-a/2-a/4=a/4
c2=a+a/2+a/4=7a/4
这个概念可以扩展到任何多项式的任何值
干杯√(c/a)/n)2
所以如果我们拿q=max(|b |/a)为例,√(|c|/a))比
P(n)≤ an2(1+(q/n)+(q/n)2),如果我们取n0=q,我们将得到第二个常数
c2=3a与下限类似那么他们为什么特别提到这些值呢?我的意思是他们提供的值似乎不是任意的。而且,他们是如何计算n0的?你从哪里得到15的?1-1/4=3/4!=15
。看起来你是偶然地将a/4
平方的。哦,我这么做了。这不是唯一的愚蠢我犯了一个错误。现在我知道你做得很好,所以我只参考你的答案。如果b^2>=3ac…因为它>0
c1*n^2 <= an^2 + bn + c
a/4*n^2 <= an^2 + bn + c
<==> 0 <= 3a/4*n^2 + bn + c