Big O表示法的替代定义

时间:2017-01-30 01:50:41

标签: algorithm asymptotic-complexity

我知道大O的定义是:

g(n)= O(f(n))当且仅当某些常数c和n0时, | G(N)| < = c。| f(n)|对于所有n> n0

我想知道的是为什么这个替代定义是错误的:

g(n)= O(f(n))当且仅当| g(n)/ f(n)|从上面界定为n→∞,

我想这是因为f(n)可能接近0并且没有定义除0,但我想看一个例子(我找不到任何一个)。如果我走在正确的道路上,请告诉我。

我希望你能帮助我。

1 个答案:

答案 0 :(得分:2)

简而言之,对于某些f(x)的每个x>x0,每个x0的替代定义都是正确的。查看Wikipedia中的正式定义。

为了亲眼看看,我们试着证明这两个定义是等价的,我们会看到自然产生的特殊情况:

如果第一个确定成立,那么就会有cn0。为了得到第二个定义,我们希望将第一个定义除以|f(n)|。为此,我们需要假设任何n>n0都不为0,所以让我们假设并记住,如果函数的计算结果为0,我们需要区别对待它(|f(n)|=0 <=> f(n)=0 )以及我们的特例。现在我们假设了这一点,我们可以将|g(n)/f(n)|<=c<inf除以n>n0,这是第二个定义。

如果另一方面我们从第二个定义开始,我们知道lim sup (for n->inf) |g(n)/f(x)|<inf'. We can also be sure it exists from the definition as the group of values for the left hand side of the equation is defined and bounded from above (again, assuming f(n)dues not equal 0) for n&gt; n0 for some n0 . Let's call the limit sup c {{1 }} | f(n)|`我们得到了第一个定义。

总而言之,and multiply by - 对于某些f(n)的所有n>n0而言,它们都不等于零。