Big o 在大O表示法中查找n0

Big o 在大O表示法中查找n0,big-o,asymptotic-complexity,Big O,Asymptotic Complexity,这是我上一个问题的继续。我学会了如何验证这种关系是否持续了一段时间 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 − 1

这是我上一个问题的继续。我学会了如何验证这种关系是否持续了一段时间

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
时才会成立。我该怎么办?

正如我在中所写的,满足

f(n) < c · g(n), for all n > n0,                         (+)
这里,我们可以展示(i)和(ii),但前者提供了比后者更严格的f(n)渐近行为的界。通常,我们希望找到一个尽可能紧的大O界,但在实践中,有时一个足够好的界就足够了。考虑以下情况:

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

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

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

我们将使用与中类似的方法

让我们把函数描述为它的最高项和另一个函数的和

f(n) = 3n^2 + h(n)                                       (*)
h(n) = 6 - 100n                                          (**)
在前面的线程中,我们非常容易地显示了(我只是在这里列出结果)

使用上面的结果(i-ii),我们可以从
3*n^2
的角度对该函数说些什么

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

因此,我们已经证明(+)对于常数集(c,n0)=(1,3),是成立的,随后,f(n)在O(n^3)中


同样,我们可以通过直接解决“n0的哪个最小值‘n^2-100n+6n0’成立?”的问题,找到一个较低的值
n0
,但我们对此并不感兴趣:我们想看看我们研究的函数的渐近行为


因此,任何常数集
(c,n0)
都有助于我们证明(+)是足够的,而寻找其他常数集(具有较小n0值等)的任何进一步工作可能是代数中有价值的练习,但对于我们分析f(n)的渐近行为没有价值.

这就是为什么定义说n>n0的
。它是否适用于
n@ndn我想不再是0.06了。我以前理解这个问题,但现在有了新问题“3n2”− 100n+6=O(n3),因为我选择c=1,n3>3n2− 当n>3时,100n+6;”。我为“当n>3”而烦恼,因为我尝试了如果n=2,关系是否仍然成立?也就是说,8>-182(请参见问题末尾)。这一次,这本书提供了n0的值,但我无法说服自己,如果n抱歉,没有看到新问题是关于
O(n^3)
,那么这种关系就不可能成立。同样的逻辑仍然适用。@ndn但为什么n>3?如果n<3,例如n=2,这仍然是正确的,对吗?
n>3
只是一个例子。只要条件成立,您可以使用任何
n0
。例如,
n0=-100
不会削减它。那么我比较这两个函数的方法呢?也就是说,我刚才替换n的方式就像“f(n)-3*2^2− (100*2)+6“,它与您在上一个线程中描述的方法相比如何?@morbidCode在您上面问题的最后一个“代码框”中,您正在对两个函数进行点比较(比较它们在特定点的值)。这实际上不能用来说明它们的渐近行为,因为局部调查几乎没有说明函数的行为。关于上面评论中的第二个问题:我将编辑一个分析函数w.r.t.O(n^3)的示例。谢谢!我想知道,因为你已经提到了代数。我需要什么代数技能来解决这类问题?我看到你用线性不等式找到了n,其中方程-100n+6=0,对吗?@morbidCode不客气,祝你编码和大O学习好运!谢谢啊,关于我的大O研究。我有一个后续问题,我认为这将帮助我决定继续。你介意回答吗?再次感谢!
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                                               (***)
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)