我注意到1000n或10n的大O与O(n)相同,但2 ^ n和3 ^ n的大O是不同的:O(2 ^ n)和O(3 ^ n),我不能得到的是为什么我们不能忽略这种情况下的常数(2或3)以及是否有任何数学证明证明这一点?
答案 0 :(得分:14)
因为k
没有恒定值可以满足任意大3^n <= k * 2^n
的不等式n
。因此f(n) = 3^n
不是O(2^n)
的成员。
请参阅http://en.wikipedia.org/wiki/Big_O_notation#Family_of_Bachmann.E2.80.93Landau_notations。
答案 1 :(得分:3)
尽管对于原始提问者来说这可能不再有用了,但我认为可以更容易地解决这个问题。
O符号的基本定义:iff f(g)将在O(g(n))中,
然后存在一个有理数c,对于它,f(g)= c * g(n),对于n> = n0
(n0是你自己选择的数字) < / p>
让我们尝试将其应用于O(2 ^ n)中的3 ^ n
3 ^ n = 2 ^ n * c
3 ^ n = 2 ^ n *(3 ^ n / 2 ^ n)
3 ^ n = 2 ^ n *(3/2)^ n
3 ^ n = 2 ^ n * 1.5 ^ n
这意味着c = 1.5 ^ n这不是一个有理数,而是一个指数函数。
另一方面,对于O(2 ^ n)中的3 ^ n,我们将得到2 ^ n&lt; = 3 ^ n *(2/3)^ n
这可能看起来像是冲突,直到你意识到0.75 ^ n&lt; 1为所有n&gt; 0,这意味着如果你采取任何c>如图1所示,它将从n = 0
大于0.67 ^ n答案 2 :(得分:1)
为了应用限制而使用两个复杂度f(n)和g(n): lim_ {n-&gt; \ inf} f(n)/ g(n)你有三个可靠的答案:
1)lim_ {n-&gt; \ inf} f(n)/ g(n)= 0; 这意味着f(n)∈O(g(n))和g(n)∉O(f(n))
2)lim_ {n-&gt; \ inf} f(n)/ g(n)= +/- inf; 这意味着f(n)∉O(g(n))和g(n)∈O(f(n))
3)lim_ {n-&gt; \ inf} f(n)/ g(n)∈实数; 这意味着f(n)∈O(g(n))和g(n)∈O(f(n))
然后对2 ^n∈O(3 ^ n)进行解释,你就像这样操作
lim_ {n-&gt; \ inf} 2 ^ n / 3 ^ n = lim_ {n-&gt; \ inf}(2/3)^ n = 0
并且演示了,并且我们也缩小了3 ^n∉O(2 ^ n),并且很容易看出2/3&lt;这使得限制收敛到0然后限制的结果取决于常数,我的意思是lim_ {n-> inf} a ^ n = 0如果0 <0。 a&lt; 1和lim_ {n-&gt; inf} a ^ n = inf如果a> 1;
为了更好地理解检查:算法简介,第三版 作者:Thomas H. Cormen,Charles E. Leiserson,Ronald L. Rivest和Clifford Stein
我是算法教授,我希望它对你有所帮助。小心。