【问题标题】:Proving Big-O Sum Rule?证明 Big-O 和规则?
【发布时间】:2013-05-25 12:57:04
【问题描述】:

我不确定如何正式证明总和的大 O 规则,即:

f1(n) + f2(n) is O(max(g1(n)),g2(n))

到目前为止,我在努力中假设了以下几点:

让有两个常量c1c2 使得c2 > c1。按大 O 定义:

f1(n) <= c1g1(n) and f2(n) <= c2g2(n)

我应该如何进行?在这一步引入变量的数值替换来证明关系是否合理?不知道gf,这是我能想到的唯一方法。

【问题讨论】:

  • 搜索引擎上肯定有很多解决方案——是这个吗? forums.codeguru.com/…
  • 我已经审查了谷歌,特别是那个帖子,但它似乎更像是对语义的攻击而不是任何东西。我没有发现任何有用的东西。下面建议的限制方法对我来说很有意义,所以我会尝试一下。
  • 我不确定这是否真的是这里的主题,但已经有了答案,所以显然有人对此感兴趣。

标签: algorithm big-o proof


【解决方案1】:

gmax = max(g1, g2), and gmin = min(g1, g2). 

gmin 是 O(gmax)。现在,使用定义:

gmin(n) <= c*gmax(n) for n > some k

在每一边加上 gmax(n) 得到:

gmin(n) + gmax(n) <= c*gmax(n) + gmax(n) for n > some k
gmin(n) + gmax(n) <= (c+1)*gmax(n)       for n > some k
g1(n) + g2(n) <= c'*gmax(n)              for n > some k

所以我们有 g1+g2 是 O(max(g1, g2))。

因为 f1+f2 是 O(g1+g2),所以 big-O 的传递性给我们 f1+f2 是 O(max(g1, g2))。 QED。

【讨论】:

    【解决方案2】:

    我想我可能更像是一个建构主义者,我会这样解决问题:

    根据Big-O的定义,存在正c1、c2、N1、N2 这样

    f1(n) 1g1(n) 对于所有 n > N1

    f2(n) 2g2(n) 对于所有 n > N2

    让:

    N' = max(N1,N2)
    c' = c1 + c2
    g'(n) = max(g1(n),g 2(n))

    那么对于所有 n > N' 我们有:

    f1(n) 1g1(n) 1g '(n)
    f2(n) 2g2(n) 2g'(n )
    f1(n) + f2(n) 1g'(n) + c2g'(n) = c'g'(n)

    因此,f1(n) + f2(n) 为 O(g'(n)) = O(max(g1(n),g2(n)))

    【讨论】:

      【解决方案3】:

      您甚至不需要定义 - 只需将两边除以增长较快的函数,取无穷大的极限,增长较慢的函数将接近零(即不显着)。

      【讨论】:

      • 哦,有道理!限制不是我想包括的东西,但它确实很有意义!谢谢!编辑:实际上,这是可以接受的,因为它不是严格意义上的方程,而是集合的一个元素,因此没有“两侧”?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多