在开始之前,让我们先说明 little-o 和 Big-Theta 符号的含义:
小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。
大 Θ 符号
h(n) = Θ(f(n))
表示存在正常数k_1
,k_2
和N
, 使得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 = 1
和。因此k_2 = 2
h(n) = g(n)+f(n)
(**) => g(n) + f(n) is in Θ(f(n))
Ans 我们已经证明这g(n) ∈ o(f(n))
意味着(g(n) + f(n)) ∈ Θ(f(n))
。