我不确定如何正式证明总和的大 O 规则,即:
f1(n) + f2(n) is O(max(g1(n)),g2(n))
到目前为止,我已经在我的努力中假设了以下几点:
让有两个常数c1
和c2
这样c2 > c1
。根据大 O 定义:
f1(n) <= c1g1(n) and f2(n) <= c2g2(n)
我应该如何进行?在这一步引入变量的数值替换来证明关系是否合理?不知道g
或f
,这是我能想到的唯一方法。
让
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。
我想我可能更像是一个建构主义者,我会这样解决问题:
根据 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)))
您甚至不需要定义——只需将两边除以增长较快的函数,取无穷大的极限,增长较慢的函数将接近零(即它是微不足道的)。