在大O表示法中找到n0

时间:2015-12-22 15:18:48

标签: big-o asymptotic-complexity

这是我之前的问题here的延续。我学会了如何验证关系是否适用于

3n2 − 100n + 6 = O(n2), 

因为我选择c = 33n2 > 3n2 − 100n + 6;

具体来说,c = 1n00.06,如果n大于0.06,请说n = 5

5^2 = 25 > 3*5^2 − (100*5) + 6 = -469

现在,似乎我无法使用以下等式应用相同的方法。

3n2 − 100n + 6 = O(n3), because I choose c = 1 and n3 > 3n2 − 100n + 6 when n > 3; 

令我困扰的是“当n> 3”部分时,假设n = 2

f(n) - 3*2^2 − (100*2) + 6 = -182

f(g) - 2^3 = 8

8 > -182 

这种关系仍然存在!

我认为我在某个地方犯了一个错误,因为我无法满足自己这种关系只会在n > 3时保持不变。我该怎么办?

1 个答案:

答案 0 :(得分:3)

正如我在my answer to your question in the previous thread中写的那样,满足

的常数(c,n0)的集合
f(n) < c · g(n), for all n > n0,                         (+)

不是唯一的。此外,你不需要找到最高的&#34; n> n0表示渐近行为,而是显示你想要证明的任何渐近关系的任何n0。回想一下,由于我们对渐近行为感兴趣,我们并不真正关心函数(或算法)对n的小值(例如n = 2或n)的行为= 3)。

此外,Big-O描述了函数(或算法)的渐近行为的上限,但它不必是最佳或最严格的约束。例如,

f(n) = 3n^2 - 100n + 6

    f(n) is in O(n^2) (as shown in previous thread)        (i)
    f(n) is in O(n^3) (as shown in your question here)     (ii)

这里,我们可以显示(i)和(ii),但前者提供了f(n)的渐近行为比后者更紧密的约束。通常,我们希望找到尽可能紧的Big-O界限,但在实践中,有时足够好的界限就足够了。请考虑以下情况:

  • 考虑我们有一些函数或算法f(n)。此外,假设显示该f(n)是否在O(n ^ 2)中是非常大的努力,而显示f(n)在O(n ^ 3)中是很容易在几分钟内完成的。然后说你的老板需要知道你的算法是否至少表现得更好&#34;比n ^ 3渐近:因此,表明f(n)在O(n ^ 3)中就足够了。最有可能的是,在这种情况下,你的雇主不希望你花费整整一个下午的时间来证明f(n)实际上是“更好的”#34;比n ^ 2渐近。

根据您的要求,我将添加如何证明f(n)在O(n ^ 3)中的解释,以及为什么常数c = 3的(非唯一)选择有意义(=容易获得)

问题:显示f(n) = 3n2 − 100n + 6位于O(n3)

我们会使用类似previous thread中的方法。

让我们将您的功能描述为它的最高术语和另一个功能的总和

f(n) = 3n^2 + h(n)                                       (*)
h(n) = 6 - 100n                                          (**)

在上一个帖子中,我们很容易地表明(我只是在这里列出结果)

    => h(n) < 0, given n > 6/100                         (i)
    => f(n) < 3*n^2, given n > 6/100                     (ii)

现在,请考虑以下功能

g(n) = n^3                                               (***)

我们可以用3*n^2对这个函数说些什么,还使用上面的结果(i-ii)?

for n = 3: g(3) = 3^3 = 3*3^2 > f(3) ((ii): since n = 3 > 6/100)
hence,    

   =>  for n > 3: g(n) > f(n)                            (iii)

现在,我们很容易达到(iii),因为已经有了结果(ii),这反过来也很容易达到。因此,n0=3的选择非常自然。另请注意,(iii)确切地描述了关系(+),但是具有常数c=1;因此选择c为1。

因此,我们已经证明(+)适用​​于常数集(c,n0)=(1,3),随后, f(n)处于为O(n ^ 3)

同样,我们可以通过直接攻击问题&#34;找到n0的较低值,其中n0的最小值为&#39; n ^ 2 - 100n + 6&lt; n ^ 3,n> n0&#39;抱着?&#34; ,但我们对此并不感兴趣:我们想看看我们研究的函数的渐近行为。

因此,任何常量集(c,n0)可以帮助我们显示(+)足够,还有任何进一步的工作来寻找其他常量集(n0更小)价值等等也许可能是代数中的一个有价值的练习,但对于我们对f(n)的渐近行为的分析没有价值。