准备工作
首先,让我们松散地声明f 在O(g(n)) 中的定义(注意:O(g(n)) 是一个函数集,所以为了挑剔,我们说@987654324 @ 在O(...) 中,而不是f(n) 在O(...) 中)。
如果一个函数f(n)是in O(g(n)),那么c·g(n)是一个上界
f(n),对于某个常数 c 使得 f(n) 总是 ≤ c · g(n),
对于足够大的 n(即,对于某个常数 n0,n ≥ n0)。
因此,为了证明f(n) 在O(g(n)) 中,我们需要找到一组满足的常数 (c, n0)
f(n) < c · g(n), for all n ≥ n0, (+)
但是这个集合不是唯一的。即,找到使 (+) 成立的常数 (c, n0) 的问题是简并。事实上,如果存在任何这样的常数对,就会存在无数个不同的这样的常数对。
显示f ∈ O(n^4)
现在,让我们继续看看让你感到困惑的例子
求函数的上渐近界
f(n) = n^4 + 100n^2 + 50 (*)
一种直接的方法是用高阶项表示(*) 中的低阶项,具体而言,w.r.t.界限 (... < ...)。
因此,我们看看是否可以在 n 上找到一个下限,使得以下成立
100n^2 + 50 ≤ n^4, for all n ≥ ???, (i)
通过解方程,我们可以很容易地找到 (i) 中的等式何时成立
m = n^2, m > 0
m^2 - 100m - 50 = 0
(m - 50)^2 - 50^2 - 50 = 0
(m - 50)^2 = 2550
m = 50 ± sqrt(2550) = { m > 0, single root } ≈ 100.5
=> n ≈ { n > 0 } ≈ 10.025
因此,(i) 对 n ≳ 10.025 成立,但我们更愿意在 n 上用一个整洁的整数值表示这个界限,因此四舍五入到 11:
100n^2 + 50 ≤ n^4, for all n ≥ 11, (ii)
从(ii) 看来,以下内容显然成立
f(n) = n^4 + 100n^2 + 50 ≤ n^4 + n^4 = 2 · n^4, for all n ≥ 11, (iii)
这种关系正是(+) 与c = 2、n0 = 11 和g(n) = n^4,因此我们已经证明了f ∈ O(n^4)。然而,再次注意,常量c 和n0 的选择是方便 之一,这不是唯一的。由于我们已经证明(+) 适用于一组常数(c,n0),我们可以证明它适用于无数种不同的常数选择(例如,它自然适用于c=10 和n0=20 , ... 等等)。