【问题标题】:I need help proving that if f(n) = O(g(n)) implies 2^(f(n)) = O(2^g(n)))我需要帮助证明如果 f(n) = O(g(n)) 意味着 2^(f(n)) = O(2^g(n)))
【发布时间】:2012-09-11 01:12:02
【问题描述】:

在上一个问题中,我展示了(希望是正确的)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 提高到“高于”f(n) 的某个 g(n) 仍然会保持更高?这几乎感觉像是一个常识性论点,但也许我错过了一些重要的东西..

**哦,哎呀!我忘了补充 f(n)g(n) 是渐近正数。根据我们的教科书定义,这意味着它们“对于所有足够大的 n 都是正的”。

【问题讨论】:

    标签: big-o logarithm proof


    【解决方案1】:

    嗯,一开始就不是真的。

    假设算法 A 需要 2n 步,算法 B 需要 n 步。那么它们的比率是一个常数。

    但是22n和2n的比例不是常数,所以你说的不成立。

    【讨论】:

    • @nicole:当你说f(n) = O(g(n))what you mean (by definition) is 当 n 接近无穷大时,f(n)/g(n) 的极限是某个有限常数 c。如果常数是无限的,那么(根据定义)该陈述不正确。对于您的情况,如果您有 f(n) = 2n 且 g(n) = n,则 f(n) = O(g(n)),但 2^(2n) 不是 O(2^n),因为这个比率是无限的。
    • 啊!实际上,我们确实在讲座中讨论了那个定理,但我忘记了。所以,我想我们可以说 2^2n/2^n = 2^n,这并没有给我们一个好的、有限的限制。谢谢!
    • @drewmoore:没有理由说 B 比 A 增长快或 A 比 B 增长快,说 n = O(2n) 和说 2n = O( n)。然而,按照惯例,O 的参数被去掉了常数,因为 2n = O(n) 更容易理解。
    • @drewmoore:我不确定您指的是哪个示例,但是是的,这是因为我们忽略了常量。
    • @evinda:你想要 f(n)/f(n)^​​2 = c (某个常数),这意味着 1/f(n) = c 或 f(n) = 1/c , 所以这意味着 f(n) 必须是一个常数。
    【解决方案2】:

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

    让 f(n) = 2log n 并且 g(n) = log n
    (假设日志以 2 为底)

    我们知道,2log 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)))

    【讨论】:

      【解决方案3】:

      对于任意 f,g:N->R*,如果 f(n) = O(g(n)) 那么 2^(f(n) = O(2^g(n)) (1)

      我们可以通过找到一个反例来反驳(1)。

      假设 (1) 为真 -> 根据 Big-O 定义,存在 c>0 且整数 m >= 0 使得:

      2^f(n) = m (2)

      选择 f(n) = 2n, g(n) = n,我们还有 f(n) = O(g(n)),将它们应用到 (2)。

      -> 2^(2n) 2^n

      这意味着:存在 c>0 和整数 m >= 0 使得:2^n = m。

      不存在这样的 c,因为如果存在,我们总是会找到使 (3) 不成立的 n > lg(c):2^n >= c,对于所有 n >= lg(c)。

      因此,(1) 不可能为真。

      【讨论】:

        猜你喜欢
        • 2012-04-13
        • 2012-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-20
        • 2021-04-24
        • 2011-05-13
        • 2020-08-05
        相关资源
        最近更新 更多