4

我不确定如何正式证明总和的大 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,这是我能想到的唯一方法。

4

3 回答 3

6

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。

于 2013-05-25T13:32:55.273 回答
1

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

根据 Big-O 的定义,存在正 c 1、c 2、N 1和 N 2使得

f 1 (n) <= c 1 g 1 (n) 对于所有 n > N 1

f 2 (n) <= c 2 g 2 (n) 对于所有 n > N 2

让:

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

然后对于所有 n > N' 我们有:

f 1 (n) <= c 1 g 1 (n) <= c 1 g'(n)
f 2 (n) <= c 2 g 2 (n) <= c 2 g'(n)
f 1 (n ) + f 2 (n) <= 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),g 2 (n)))

于 2013-05-25T13:48:58.563 回答
0

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

于 2013-05-25T13:01:46.620 回答