先决条件:渐近符号
假设 f(n)、g(n) 和 h(n) 是渐近函数,数学定义为:
- 如果f(n) = Θ(g(n)) ,则存在正常数 c1, c2, n0 使得0 ≤ c1.g(n) ≤ f(n) ≤ c2.g(n) ,对于所有 n ≥ n0
- 如果f(n) = O(g(n)) ,则存在正常数 c, n0 使得0 ≤ f(n) ≤ cg(n) ,对于所有 n ≥ n0
- 如果f(n) = Ω(g(n)) ,则存在正常数 c, n0 使得0 ≤ cg(n) ≤ f(n) ,对于所有 n ≥ n0
- 如果f(n) = o(g(n)) ,则存在正常数 c, n0 使得0 ≤ f(n) < cg(n) ,对于所有 n ≥ n0
- 如果f(n) = ω(g(n)) ,则存在正常数 c, n0 使得0 ≤ cg(n) < f(n) ,对于所有 n ≥ n0
特性:
- 反射性:
如果给出 f(n) 那么f(n) = O(f(n))
例子:
如果 f(n) = n 3 ⇒ O(n 3 )
相似地,f(n) = Ω(f(n)) f(n) = Θ(f(n))
- 对称:
f(n) = Θ(g(n)) if and only if g(n) = Θ(f(n))
例子:
如果 f(n) = n 2且 g(n) = n 2则 f(n) = Θ(n 2 ) 且 g(n) = Θ(n 2 )
证明:- 必要的部分:
f(n) = Θ(g(n)) ⇒ g(n) = Θ(f(n))
根据 Θ 的定义,存在正常数 c1, c2,没有使得 c1.g(n) ≤ f(n) ≤ c2.g(n) 对于所有 n ≥ no
⇒ g(n) ≤ (1/c1).f(n) 且 g(n) ≥ (1/c2).f(n)
⇒ (1/c2).f(n) ≤ g(n) ≤ (1/c1).f(n)
由于 c1 和 c2 是正常数,因此 1/c1 和 1/c2 是明确定义的。因此,根据 Θ 的定义,g(n) = Θ(f(n)) - 充足部分:
g(n) = Θ(f(n)) ⇒ f(n) = Θ(g(n))
根据 Θ 的定义,存在正常数 c1, c2,没有使得 c1.f(n) ≤ g(n) ≤ c2.f(n) 对于所有 n ≥ no
⇒ f(n) ≤ (1/c1).g(n) 且 f(n) ≥ (1/c2).g(n)
⇒ (1/c2).g(n) ≤ f(n) ≤ (1/c1).g(n)
根据 Theta(Θ) 的定义,f(n) = Θ(g(n))
- 必要的部分:
- 传递性:
f(n) = O(g(n)) and g(n) = O(h(n)) ⇒ f(n) = O(h(n))
例子:
如果 f(n) = n,g(n) = n 2且 h(n) = n 3
⇒ n 是 O(n 2 ) 并且 n 2是 O(n 3 ) 那么 n 是 O(n 3 )
证明:
f(n) = O(g(n)) 和 g(n) = O(h(n)) ⇒ f(n) = O(h(n))
根据 Big-Oh(O) 的定义,存在正常数 c,没有使得 f(n) ≤ cg(n) 对于所有 n ≥ no
⇒ f(n) ≤ c1.g(n)
⇒ g(n) ≤ c2.h(n)
⇒ f(n) ≤ c1.c2h(n)
⇒ f(n) ≤ ch(n),其中,c = c1.c2 根据定义,f(n) = O(h(n))
相似地,f(n) = Θ(g(n)) and g(n) = Θ(h(n)) ⇒ f(n) = Θ(h(n)) f(n) = Ω(g(n)) and g(n) = Ω(h(n)) ⇒ f(n) = Ω(h(n)) f(n) = o(g(n)) and g(n) = o(h(n)) ⇒ f(n) = o(h(n)) f(n) = ω(g(n)) and g(n) = ω(h(n)) ⇒ f(n) = ω(h(n))
- 转置对称:
f(n) = O(g(n)) if and only if g(n) = Ω(f(n))
例子:
如果 f(n) = n 且 g(n) = n 2则 n 为 O(n 2 ) 且 n 2为 Ω(n)
证明:- 必要的部分:
f(n) = O(g(n)) ⇒ g(n) = Ω(f(n))
根据 Big-Oh (O) ⇒ f(n) ≤ cg(n) 对于某些正常数 c ⇒ g(n) ≥ (1/c).f(n) 的定义
根据欧米茄 (Ω) 的定义,g(n) = Ω(f(n)) - 充足部分:
g(n) = Ω(f(n)) ⇒ f(n) = O(g(n))
根据 Omega (Ω) 的定义,对于某些正常数 c ⇒ g(n) ≥ cf(n) ⇒ f(n) ≤ (1/c).g(n)
根据 Big-Oh(O) 的定义,f(n) = O(g(n))
相似地,
f(n) = o(g(n)) if and only if g(n) = ω(f(n))
- 必要的部分:
- 由于这些性质适用于渐近符号,因此可以在函数 f(n) 和 g(n) 与两个实数 a 和 b 之间进行类比。
- g(n) = O(f(n)) 类似于 a ≤ b
- g(n) = Ω(f(n)) 类似于 a ≥ b
- g(n) = Θ(f(n)) 类似于 a = b
- g(n) = o(f(n)) 类似于 a < b
- g(n) = ω(f(n)) 类似于 a > b
- 观察:
max(f(n), g(n)) = Θ(f(n) + g(n))
证明:
不失一般性,假设 f(n) ≤ g(n), ⇒ max(f(n), g(n)) = g(n)
考虑,g(n) ≤ max(f(n), g(n)) ≤ g(n)
⇒ g(n) ≤ max(f(n), g(n)) ≤ f(n) + g(n)
⇒ g(n)/2 + g(n)/2 ≤ max(f(n), g(n)) ≤ f(n) + g(n)
根据我们的假设,我们可以写
⇒ f(n)/2 + g(n)/2 ≤ max(f(n), g(n)) ≤ f(n) + g(n)
⇒ (f(n) + g(n))/2 ≤ max(f(n), g(n)) ≤ f(n) + g(n)
根据 Θ 的定义,max(f(n), g(n)) = Θ(f(n) + g(n)) -
O(f(n)) + O(g(n)) = O(max(f(n), g(n)))
证明:
不失一般性,假设 f(n) ≤ g(n)
⇒ O(f(n)) + O(g(n)) = c1.f(n) + c2.g(n)
根据我们的假设,我们可以写
O(f(n)) + O(g(n)) ≤ c1.g(n) + c2.g(n)
≤ (c1 + c2) g(n)
≤ cg(n)
≤ c.max(f(n), g(n))
根据 Big-Oh(O) 的定义,
O(f(n)) + O(g(n)) = O(max(f(n), g(n)))
笔记:
- 如果lim n→∞ f(n)/g(n) = c ,c ∈ R+ 然后f(n) = Θ(g(n))
- 如果lim n→∞ f(n)/g(n) ≤ c ,c ∈ R (c 可以是 0) 那么f(n) = O(g(n))
- 如果lim n→∞ f(n)/g(n) = 0 ,则f(n) = O(g(n))且g(n) = O(f(n))
- 如果lim n→∞ f(n)/g(n) ≥ c ,c ∈ R (c 可以是 ∞) 那么f(n) = Ω(g(n))
- 如果lim n→∞ f(n)/g(n) = ∞ ,则f(n) = Ω(g(n))和g(n) = Ω(f(n))