问题 在证明算法的Big-Oh时,找到C和N的简单方法是什么?


我开始学习Big-Oh符号了。

找到C和N的简便方法是什么0 对于给定的功能?

比方说,例如:

第(n + 1)或者n+ 5N4+ 10N2+ 5N + 1

我知道Big-Oh的正式定义是:

设f(n)和g(n)为函数映射   非负整数与实数。   如果有的话,我们说f(n)是O(g(n))   是一个真正的常数c> 0和一个   整数常数N.0 > = 1   使得每个整数N> N的f(n)<= cg(n)0

我的问题是,选择c和N值的好方法是什么0

对于上面给定的多项式(n + 1),我必须表明它是O(n)。那么,我应该如何选择我的C和N.0 这样我可以在不猜测的情况下使上述定义成立


3044
2017-09-02 18:25


起源

我想你想在你的定义的末尾添加“for all n> = N0”。 - Ambuoroko
@Ambouroko,非常真实。修复。


答案:


您可以通过在多项式中添加每个项的系数来选择常数c。以来

| ñ + 5n4 + 0n3 + 10n2 + 5n1 + 1n0 | <= | ñ + 5n + 0n + 10n + 5n + 1n |

你可以简化双方来获得

| ñ + 5n4 + 10n2 + 5n + 1 | <= | 22N |

所以c = 22,对于任何n> = 1,这总是成立。

通过提高N几乎总能找到较低的c0,但这种方法有效,你可以在头脑中做到这一点。

(多项式周围的绝对值运算是为了计算负系数。)


10
2017-09-02 18:44





通常证明是在没有挑选具体的C和No的情况下完成的。而不是证明f(n)<C * g(n)你证明f(n)/ g(n)<C。

例如,证明n3 + n是O(n3)你做了以下事情:

(N3 + n)/ n3 = 1 +(n / n3)= 1 +(1 / n2)<2表示任何n> = 1.这里你可以选择任何C> = 2,No = 1。


3
2017-09-02 18:53





你可以检查当n - > + infitity时lim abs(f(n)/ g(n))是什么,这会给你常数(g(n)在你的例子中是n ^ 5,f(n)是第(n + 1)^ 5)。

注意,对于x - > +无穷大,Big-O的含义是,如果f(x)= O(g(x)),那么f(x)“增长不快于g(x)”,所以你只需要证明lim abs(f(x)/ g(x))存在且小于+无穷大。


2
2017-09-02 18:43





它将在很大程度上取决于您正在考虑的功能。但是,对于给定的一类函数,您可能能够提出一种算法。

例如,多项式:如果将C设置为大于多项式的前导系数的任何值,则可以求解N0


1
2017-09-02 18:48





在你了解那里的魔力之后,你也应该得到那个大的O是一个 符号。这意味着你 不必在你解决的每个问题中寻找这些系数一旦你确定你明白这些信件背后发生了什么。你应该只按照操作符号 notaion,根据其规则。

确定N和c的实际值没有简单的通用规则。你应该回想起你的微积分知识来解决它。

big-O的定义与之纠缠在一起 限制的定义。它使c满足:

c> lim | f(n)/ g(n)|,给定n接近+无穷大。

如果序列是上限的,它总是有一个限制。如果不是,那么f不是O(g)。在挑选混凝土c后,您将找到合适的N.


0
2017-09-02 19:49