这是我之前的问题here的延续。我学会了如何验证关系是否适用于
3n2 − 100n + 6 = O(n2),
因为我选择c = 3
和3n2 > 3n2 − 100n + 6
;
具体来说,c = 1
和n0
为0.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
时保持不变。我该怎么办?
答案 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)在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)的渐近行为的分析没有价值。