我希望更好地理解渐近符号,以及如何分类函数是否是另一个函数的O符号,以及我们如何判断 f = o(g) || f != o(g)
例如:
例如,我们如何判断 f = O(g)
?
我主要看到这种方法(下面的解决方案与上述问题无关):
但这很令人困惑,因为我没有做出证明这一点的方式。
请帮助我理解这里应用的核心概念。
由于
答案 0 :(得分:2)
如果我们能找到这两件事,我们说f是O(g):
(1)我们可以找到一个常数“C”(你只选择一个constnat,这里我的意思是你以后不能改变它,这对初学者来说是最令人困惑的部分)。
(2)和一个“N”(这是一个下限,意味着大于这个N的值,我们的公式将是有效的,一旦你达到结束然后回来并尝试理解我的意思是下限)。
这样每当我们插入n> = N的值时,f(n)应小于或等于C.g(n)
或者以公式形式:
示例:
假设我有一个函数f = 3n^2 + 4n + 3
还有一个函数g = n^2
f = O(g)?
f的前导词是3n^2
,这意味着如果我的常量高于3
且我将其乘以g
,那么f
将小于g
{1}}。
让我们n = 4 > 3
然后我得到g = 4n^2
,然后我的常数c
就是4
。
现在问题是如果我增加n
的价值会发生什么?如果我插入例如n = 4
,那么f(n)
将不会小于g(n)
,但是当我插入n = 5
时,它就是有效的。所以在这个例子中c = 4 and N = 5
。
现在你的问题中有两个不同的东西。下面的这个问题与Big-O表示法无关,它被称为tilde notation
。
Big-O抛弃了不变的术语,但是波形符号没有。这是比较算法的更严格的形式。这里22
表示当n接近无穷大时,f和g之间的差值约为22.但我更喜欢tilde
符号,但首先你需要了解Big-O然后你可以走得更远。
您可以看到:这两个函数都有更高的术语n
,即f = 7n + ...
和g = n
。
如果我想证明是f is o(g)
现在,如果我要求c
c.g(n)
大于f(n)
的价值。
是否存在任何常量c
,以使公式对所有n >= some N
都有效。
如果我现在将g
与7
相乘(因为f具有前导常数7),这是否有效?不,因为f也有8因子,这意味着我需要增加常数c
。如果8
,我们将其视为7n + 8 > 8n
,然后n = 1
,但n >= 2
然后g
始终大于f
时会发生什么。所以对于常数c = 8 and n >= 2
f is o(g)
。您还可以证明g is O(f)
。
这并不困难,你应该保持不变c = 1 and for n belonging to natural number
答案 1 :(得分:0)
自然数上的函数f是自然数上的函数g的Big-Oh,写为f(n)= O(g(n)),当且仅当存在常数c> 0,n0&gt;因此,对于n> = n0,f(n)<= c * g(n)。要证明这一点,您必须显示有效的c和n0的值,并显示它们有效。您可以显示7n + 8 = O(n),因为对于所有n> = 8(c = 8,n0 = 8),7n + 8 <= 8 * n。您可以证明n = 0(7n + 8),因为对于n> = 1(c = 1,n0 = 1),n <= 1 *(7n + 8)。
自然数上的函数f是自然数上的函数g的Little-Oh,写为f(n)= o(g(n)),当且仅当对于所有常数c> 0,存在n0,使得f(n)<0。对于n> = n0,c * g(n)。为了证明这一点,你必须展示如何找到一个在给定c的正值的情况下有效的n0。你可以证明7n + 8 = o(n ^ 2),因为7n + 8&lt; c * n ^ 2可以重新排列为c * n ^ 2 - 7n - 8> 0,显然有任何积极选择c的解决方案(导数是2c * n - 7,总是最终为正,所以函数必须在足够大的n0时得到正数)。