在开始之前,让我们先说明一下 little-o 和 Big-Theta 符号的含义:
Little-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。
Big-Θ 符号
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))
我们已经证明g(n) ∈ o(f(n)) 隐含(g(n) + f(n)) ∈ Θ(f(n))。