如果f(n)= o(g(n)),那么是2 ^(f(n))= o(2 ^(g(n)))?

时间:2012-03-30 08:14:01

标签: computer-science asymptotic-complexity little-o

请注意,我在这里要求小o(请参阅类似的问题here) - 对于大哦,这显然是错误的 - 对于小小的o感觉正确但似乎无法证明它...... / p> 编辑:很高兴我提出了辩论:)假设f,g> 0为简单起见

3 个答案:

答案 0 :(得分:2)

至少,如果g(n)收敛到n为正无穷大的正无穷大(如果g(n)不是很容易找到反例)。

证明草图:

Prerequsites:g(n)收敛到n为正无穷大的正无穷大。

f(n)in o(g(n))表示:

for every eps > 0 exists a n0 so that for all n > n0 abs(f(n)) < abs(g(n)*eps).

表格如下:

2^abs(f(n)) < 2^abs(g(n)*eps) = (2^eps)^g(n) (for n > n0).

对于eps&lt; 1:

(2^eps)^n is in o(2^n) (as 2^eps < 2) 

因为每个eps2&gt; 0存在n1,因此对于所有n> 1。 n1

(2^eps)^n < eps2*(2^n).

选择eps2 = eps vields:

(2^eps)^n < eps*(2^n) for all n > n1 (n1 is dependent on eps)

因为g(n) - > POS机。 INF。对于n - >; POS机。 INF。

存在n2
g(n) > n1 for all n > n2

以下是

(2^eps)^g(n) < eps*2^g(n) for all n > n2.

所以对于每0&lt; eps&lt; 1存在n3> = max(n0,n2)以便

2^abs(f(n)) < 2^abs(g(n)*eps) = (2^eps)^g(n) < eps*2^g(n) for all n > n3.

对于每个eps3&gt; 1还:

2^abs(f(n)) < eps*2^g(n) < eps3*2^g(n)

因此对于每个eps&gt; 0存在n3以便

2^abs(f(n)) < eps*2^g(n) for all n > n3

困败2 ^ f(n)&lt;对于所有n,2 ^ abs(f(n)),并且2 ^ x> 1。 0表示所有实数x,它遵循

abs(2^f(n)) < abs(eps*2^g(n)) for all n > n3

q.e.d。

如果有什么不清楚或错误,请发表评论。

编辑:关于其他g(n)的一些想法:

g(n)的子序列受到限制,即它存在一些x,因此对于所有n> 0,不存在具有abs(g(n))> = x的n0。 N0:

o(g(n))仅由一些n后的常数0或收敛到0的函数组成。然后2 ^ g(n)也有一个受限的子序列,但是2 ^ f(n)在经过1后是常数1某点。

没有n0所以g(n)&gt; 0表示所有n> N0:

2 ^ g(n)&lt;如果g(n)<1,则为1。 0,因此g(n)具有受限的子序列,意味着o(2 ^ g(n))仅包含在某些n之后为0或收敛为0的函数。

答案 1 :(得分:1)

这是一个答案。结果取决于g(n)的收敛性。

首先考虑相关限制:

lim(x->inf) log_2 ((2^(f(n))) / (2^(g(n))))
=
lim(x->inf) ( log_2(2^(f(n))) - log_2(2^(g(n))) )
=
lim(x->inf) ( f(n) - g(n) ) = lim(x->inf) ( g(n) * f(n) / g(n) - g(n) )
=
lim(x->inf) ( -g(n) ) = - lim(x->inf) g(n)

...现在,要在你的帖子中将其转换为原始问题的形式,如果在数学上正确切换限制和日志(我认为是),那么我们将:

lim(x->inf) log_2 ((2^(f(n))) / (2^(g(n))))
=
log_2 lim(x->inf) ((2^(f(n))) / (2^(g(n)))).

现在,继续回答这个问题。如果 为真

2^(f(n)) = o(2^(g(n))),

然后在极限,右侧变为

log_2 (0) = - inf

...所以在这种情况下一定是真的

lim(x->inf) g(n) = inf

这个结果似乎有道理。考虑f(x) = exp(-x) and g(x) = 1 - exp(-x)。显然,在这个例子中f(x) = o(g(x))。但是,2^(f(x)) is not o(2^(g(x)))因为

lim(x->inf) (2^exp(-x)) / (2^(1-exp(-x))) = 1/2.

但考虑到f(x) = exp(x), g(x) = exp(2x)f(x) = o(g(x))lim(x->inf) g(x) = inf,符合上述条件,我们有

lim(x->inf) (2^exp(x)) / (2^exp(2x))
=
lim(x->inf) 1 / 2^(exp(x)*(exp(x) - 1)) = 0

所以2^(f(x)) = o(2^(g(x)))

答案 2 :(得分:-1)

通过示例轻松证明,

如果f(n)= O(g(n)),则2 ^(f(n))不等于O(2 ^ g(n)))

设,f(n)= 2log n和     g(n)= log n
(假设日志是基数2)

我们知道,2log n&lt; = c(log n) 因此f(n)= O(g(n))

2 ^(f(n))= 2 ^ log n ^ 2 = n ^ 2
2 ^(g(n))= 2 ^ log n = n

我们知道 n ^ 2不是O(n)

因此, 2 ^(f(n))不等于O(2 ^ g(n)))