二次函数的渐近紧束缚

时间:2011-07-14 09:00:42

标签: algorithm asymptotic-complexity clrs

在CLRS(Cormen,Leiserson,Rivest和Stein的Introduction to Algorithms)中获取功能

  

f n )= 2 + bn + C

他们说

  

假设我们采用常量 c 1 = a / 4, c 2 = 7 a / 4, n 0 = 2·max(| b | / a ,√(| c | / a ))。
  然后0≤ c 1 n 2 2 + bn + c c 2 n 2 < / sup>所有 n n 0
  因此 f n )是Θ( n 2 )。

但是他们没有说明这些常数的值是如何来的? 我试图证明它但不能 请告诉我这些常数是怎么来的?

6 个答案:

答案 0 :(得分:12)

这些特定常数没有什么特别之处(除了在某个n值的上下文中它们将满足f的theta-ness这一事实。没有魔法。如果你能找到其他正常数,其中关系保持同样有效(事实上,对于任何c1ka可以是0<k<1。虽然他们在那里,但我们分析一下c1

我们需要它来满足以下不平等:

c1*n^2 <= an^2 + bn + c

让我们看看他们的价值:c1 = a/4。对于n,我们可以保证不平等吗?我们可以解决:

a/4*n^2 <= an^2 + bn + c
<==> 0 <= 3a/4*n^2 + bn + c

二次方在(-b +- sqrt(b^2-3ac)) / (3a/2)处有解,因为我们有一个正的领先系数多项式,所以只有正数是有意义的,所以我们需要n > 2 * (sqrt(b^2-3ac) - b) / 3a这个定义得很好,假设b^2 >= 3ac (如果不是,那么二次方是正定的,这甚至更好,因为它的&gt; = 0到处并且不等式适用于所有n)。我应该指出这是一个有效的解决方案,尽管在我们到达本书的代表之前我们会做更多的工作。

我们可以将分析分为2个案例。首先,我们假设|b|/a >= sqrt(|c|/a)。因此,我们可以使用sqrt(...)4b^2的内部上方绑定,并n > 2/3 * [sqrt(4b^2)-b]/a需要2/3 * 3|b|/a = 2|b|/a

第二种情况,让我们假设|b|/a < sqrt(|c|/a)。因此,我们可以使用sqrt(...)4a|c|的内部上方绑定,并n > 2/3 * [sqrt(4a|c|)-b]/a需要2/3 * 3*sqrt(a|c|)/a = 2sqrt(|c|/a)

因此,在每种情况下,当我们采用max(|b|/a, sqrt(|c|/a))时,我们会看到n > 2 * max

时我们的不等式成立

同样适用于c2

答案 1 :(得分:4)

这个想法是(足够大的 n )“陷阱”两个“纯”增长函数(只有一个比例常数)之间的感兴趣函数。在该图中,两个二次函数(以红色和蓝色绘制)被捕获在两个纯增长函数(以黑色绘制)之间,并且每个函数的最小可能值 n 0 案件被指出。

enter image description here

因此,一旦您选择了 c 1 c 2 的值,您就可以找到 n 0 的值,将函数与两个纯增长函数相交并取最右边的交点。

但是你并不关心 n 0 最小值 - 我们在这里做渐近线,所以任何大的足够的值可以做 - 所以你可以使用近似值得到它的上限。

请参阅davin关于如何将 n 0 的上限纳入CLRS中给出的表格的答案。

答案 2 :(得分:0)

只要c1c2,就可以任意选择

0 < c1 < aa < c2 < infinity。 然后根据此计算n0,以便所有0 <= c1*n^2 <= an^2 + bn + c <= c2*n^2满足不等式n>=n0

答案 3 :(得分:0)

要证明任何多项式f(n)= a0 + a1 * n + a2 * n ^ 2 + a3 * n ^ 3 + ... + am * n ^ m是theta(n ^ m),请遵循以下两个简单的步骤。 步骤1.显示f(n)是bigOh(n ^ m) 步骤2.表明f(n)是bigOmega(n ^ m)

如果上述条件都保持良好,那么肯定f(n)是bigTheta(n ^ m)。

这是一种概括。通过设m = 2,得到f(n)是bigTheta(n ^ 2) 简单..不是吗?

答案 4 :(得分:0)

很容易 1.c1&lt; = a + b / n + c / n ^ 2   现在这里a> 0,而b,c是正数或负数   现在我们必须选择n的值,使得b / n + c / n ^ 2永远不会超过上述等式的RHS,否则它将变为负值,因此c1也将变为负值。但根据定义,c1是正常数

所以我们要确定 一个&GT; 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

这个概念可以扩展到任何多项式的任何值。

欢呼声!!!

答案 5 :(得分:0)

P(n)= a 2 + bn + c = an 2 (1 + b /(an)+ c /(an 2 ))= 2 (1±(| b | / a)/ n±(√(| c | / a)/ n) 2
所以,如果我们以例如 q = max(| b | / a,√(| c | / a))为例 P(n)≤一个 2 (1 +(q / n)+(q / n) 2 如果我们采取 n 0 = q 比我们得到第二个常数
c 2 = 3a 类似地用于下限