证明Big-O Sum规则?

时间:2013-05-25 12:57:05

标签: algorithm big-o proof

我不确定如何正式证明Big O Sum of Sums,即:

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,这是我能想到的唯一方法。

3 个答案:

答案 0 :(得分:5)

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。

答案 1 :(得分:1)

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

根据Big-O的定义,存在正c 1 ,c 2 ,N 1 和N 2 这样

  所有n的

f 1 (n)&lt; = c 1 g 1 (n)&gt; N 1

     

     对于所有n>

f 2 (n)&lt; = c 2 g 2 (n) Ñ<子> 2

让:

  

N'= max(N 1 ,N 2
  c'= c 1 + c 2
   g'(n)= max(g 1 (n),g 2 (n))

然后对于所有n&gt;我们有:

  

f 1 (n)&lt; = c 1 g 1 (n)&lt; = c 1 G'(n)的
  f 2 (n)&lt; = c 2 g 2 (n)&lt; = c 2 g' (n)的
  f 1 (n)+ f 2 (n)&lt; = c 1 g'(n)+ c 2 g'(n)= c'g'(n)

因此,f 1 (n)+ f 2 (n)是O(g'(n))= O(max(g 1 < /子>(N),克<子> 2 (N)))

答案 2 :(得分:0)

你甚至不需要这个定义 - 只需将快速增长的函数划分为两边,取无限远的限制,增长较慢的函数将接近零(即它无关紧要)。