证明n> = 1或n> N的big-Oh的不同定义是等效的

时间:2018-08-28 20:12:53

标签: algorithm big-o proof

我遇到了关于big-oh的两个略有不同的定义,需要证明它们彼此等效:

定义1: 如果存在常数c和N,使得对于所有n> N,f(n)≤c g(n),则f(n)= O(g(n))。

定义2: 如果存在常数c,对于所有n≥1,f(n)≤c g(n),则f(n)= O(g(n))。

直觉上我知道,如果我们选择c足够大,我们可以像定义2中那样摆脱N。 但是如何证明定义1隐含定义2,反之亦然。

2 个答案:

答案 0 :(得分:3)

它们实际上不是等效的,并且(1)是正确的定义。

差异的一个示例是,在(1)n = O(n log(n))下,但在定义(2)下,不是因为在n=1上,对于任何c,{{1 }}。

(1)是正确定义的原因是因为big-O的目的是捕获行为“接近无限”,因此对于小c g(n) = c*1*log(1) = 0 < 1,应忽略有限数量的特殊情况。 / p>

之所以会出现(2),是因为足以建立big-O。只是没有必要。

答案 1 :(得分:1)

让我更好地解释我对@btilly答案的评论。

g(n)>0的所有值都是n时,两个定义实际上是等效的。这是原因:

首先,当定义2成立时,定义1也成立是永远正确的。实际上,在这种情况下,我们可以选择N=0

现在假设对于某个常数c和某个数字N满足定义1。如果是N=0,我们有定义2。如果是N>0,请考虑以下数量:

c1 := max{f(1)/g(1), ..., f(N)/g(N)}

商之所以有意义,是因为在g(n)始终为正的情况下。此外,由于

f(n)/g(n) <= c1        (1<=n<=N)

我们得到

f(n) <= c1*g(n)        (1<=n<=N)

并且由于f(n) <= c*g(n)n>N,所以发生了

f(n) <= max(c1,c)*g(n)     for all n

按照定义2的要求。