【问题标题】:Proving if g(n) is o(f(n)), then f(n) + g(n) is Theta(f(n))证明如果 g(n) 是 o(f(n)),那么 f(n) + g(n) 是 Theta(f(n))
【发布时间】:2016-01-18 21:28:06
【问题描述】:

所以我正在努力证明(或反驳)上述问题。我觉得这是真的,但我不知道如何表现出来。

同样,问题是如果 g(n) 是 o(f(n)),那么 f(n) + g(n) 是 Theta(f(n))

注意,这是一个little-o不是一个big-o!!!

到目前为止,我已经设法(轻松地)表明:

g(n) = o(f(n)) -> g(n)

那么 g(n) + f(n) -> (g(n) + f(n)) = O(f(n))

但是,为了展示 Big Omega,我不知道该怎么做。

我这样做对吗?

编辑:每个人都提供了很大的帮助,但我只能标记一个。谢谢。

【问题讨论】:

    标签: algorithm math time-complexity little-o


    【解决方案1】:

    一种选择是采用 (f(n) + g(n)) / f(n) 的极限,因为 n 趋于无穷大。如果它收敛到一个有限的非零值,那么 f(n) + g(n) = Θ(f(n))。

    假设对于足够大的 n,f(n) 不为零,则上述比率在极限范围内为

    (f(n) + g(n)) / f(n)

    = f(n) / f(n) + g(n) / f(n)

    = 1 + g(n) / f(n)。

    因此,在 n 趋于无穷大时取极限,上式收敛到 1,因为比率变为零(这就是 g(n) 为 o(f(n))的含义。

    【讨论】:

    • 哦,我非常喜欢这种方法......我猜这很有效,因为你知道 f(n) 和 g(n) 都是非零的,这要归功于知道 g(n) 是 o (f(n))?
    • 哦,我们如何保证它们会接近极限?我们只知道一个比另一个大。
    • 我们实际上只需要 f(n) 不为零,因为它是分母中唯一的一个。至于为什么 g(n) / f(n) 在极限中趋于零,您实际上可以使用无穷大极限的正式定义(ε-n 一)证明如果 g(n) = o(f (n)),然后 lim g(n) / f(n) = 0,因为 n 趋于无穷大。这就解释了为什么第二个术语消失了。
    • 有道理。感谢您的帮助!
    【解决方案2】:

    到目前为止一切顺利。

    对于下一步,请记住在最好的情况下,0 <= g(n);这应该会让你在g(n) + f(n) 上获得一个下限。

    【讨论】:

    • 是的,我考虑在两边添加另一个 c*f(n),因为我们本质上想要 c1*f(n)
    • 不,你有f(n) <= g(n) + f(n),事实上0 <= g(n)。将它与你已经得到的不等式结合起来,你就有了下限和上限......
    • 您是否不需要一些通用常数与左侧的 f(n) 配对来满足 Theta 的条件?
    【解决方案3】:

    在开始之前,让我们先说明一下 little-o 和 Big-Theta 符号的含义:

    Little-o 符号

    正式地,g(n) = o(f(n))(或g(n) ∈ o(f(n)))适用于 足够大 n 意味着对于每个正常数 ε 存在一个常量N 使得

    |g(n)| ≤ ε*|f(n)|, for all n > N                                 (+)
    

    来自https://en.wikipedia.org/wiki/Big_O_notation#Little-o_notation

    Big-Θ 符号

    h(n) = Θ(f(n)) 表示存在正常数k_1, k_2N,这样k_1 · |f(n)|k_2 · |f(n)| 是一个上限 和|h(n)| 的下限分别为n > N,即

    k_1 · |f(n)| ≤ |h(n)| ≤ k_2 · |f(n)|, for all n > N              (++)
    

    来自https://www.khanacademy.org/computing/computer-science/algorithms/asymptotic-notation/a/big-big-theta-notation


    鉴于: g(n) ∈ o(f(n))

    因此,在我们的例子中,对于每个ε>0,我们可以找到一些常量N,例如(+),对于我们的函数g(n)f(n)。因此,对于n>N,我们有

    |g(n)| ≤ ε*|f(n)|, for some ε>0, for all n>N
    
    Choose a constant ε < 1 (recall, the above holds for all ε > 0), 
    with accompanied constant N. 
    Then the following holds for all n>N
    
        ε(|g(n)| + |f(n)|) ≤ 2|f(n)| ≤ 2(|g(n)| + |f(n)|) ≤ 4*|f(n)|    (*)
    

    去掉(*)中最左边的不等式并除以2,我们有:

    |f(n)| ≤ |g(n)| + |f(n)| ≤ 2*|f(n)|, n>N                            (**) 
    

    我们看到这正是 Big-Θ 符号的定义,如 (++) 中所示,具有常量 k_1 = 1k_2 = 2h(n) = g(n)+f(n)。因此

    (**) => g(n) + f(n) is in Θ(f(n))
    

    我们已经证明g(n) ∈ o(f(n)) 隐含(g(n) + f(n)) ∈ Θ(f(n))

    【讨论】:

    • 感谢您的深入回答。一切都在一起真的很有帮助!
    • @Wanna-beCoder 乐于助人。
    猜你喜欢
    • 2012-09-29
    • 2012-04-13
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多