在上一个问题中,我(有希望正确地)表明f(n) = O(g(n))
暗示lg(f(n)) = O(lg(g(n)))
具有足够的条件(例如lg(g(n)) >= 1, f(n) >= 1
,并且足够大n)。
现在,我需要证明或反驳f(n) = O(g(n))
暗示2^(f(n)) = O(2^g(n)))
。直观地说,这是有道理的,所以我想我可以在前一个定理的帮助下证明它。我注意到f(n)
可以重写为lg(2^f(n))
而g(n)
只是lg(2^g(n))
,这让我很兴奋...这是以两边的对数基数2为准我想要证明什么,它简化了很多事情!
但我很确定这不起作用。仅仅因为lg(2^f(n)) = O(lg(2^g(n)))
并不一定意味着2^f(n) = O(2^g(n))
......那是从前一个定理(它表示“暗示”,而不是“当且仅当”)的倒退。
我是否需要以另一种方式尝试此证明,或者我是否真的可以取消我所拥有的(至少作为首发)?
**说到其他方式,也许我可以争论如何将{2}增加到某个g(n)
以上f(n)
还会保持更高?这几乎感觉像是一个常识论点,但也许我错过了一些重要的东西......
**哦,哎呀!我忘了添加f(n)
和g(n)
渐近正面。通过我们的教科书定义,这意味着它们“对所有足够大的n都是正面的”。
答案 0 :(得分:14)
嗯,开始时甚至都不是。
假设算法A需要2n步,算法B需要n步。然后他们的比例是一个常数。
但是2 2n 和2 n 的比例不是常数,所以你所说的并不成立。
答案 1 :(得分:5)
设,f(n)= 2log n和
g(n)= log n
(假设日志是基数2)
我们知道,2log n< = 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)))
答案 2 :(得分:0)
对于任何f,g:N-> R *,如果f(n)= O(g(n))则2 ^(f(n)= O(2 ^ g(n))(1)< / p>
我们可以通过找到一个反例来反证(1)。
假设(1)是true->根据Big-O定义,存在c> 0和整数m> = 0,这样:
2 ^ f(n)<= c2 ^ g(n),对于所有n> = m(2)
选择f(n)= 2n,g(n)= n,我们也有f(n)= O(g(n)),将它们应用于(2)。
-> 2 ^(2n)<= c2 ^ n-> 2 ^ n <= c(3)
这意味着:存在c> 0且整数m> = 0,使得:对于所有n> = m,为2 ^ n <= c。
没有这样的c,因为如果存在,我们总会发现n> lg(c)使得(3)不成立:2 ^ n> = c,对于所有n> = lg(c)。>
因此,(1)不能为真。