思考:lim(x->∞)(f(x) / g(x)) = α, 当 α 取值不同的时候,会有什么情况发生呢?
结论:
α = c (常数) => f(x) = θ(g(x)) 或者 g(x) = θ(f(x))
α = 0 => f(x) = o(g(x))
α = ∞ => g(x) = o(f(x))
证明:
α = c 时:
所有 ε > 0, 存在 N, 当 n > N 时
有 |f(x) / g(x) - α| < ε
所以 α - ε < f(x) / g(x) < α + ε
所以 (α - ε) g(x) < f(x) < (α + ε) g(x)
令 ε = α / 2, c2 = α - ε, c1 = α + ε
则 c2 g(x) < f(x) < c1 g(x) (c1 > 0, c2 > 0)
所以 f(x) = θ(g(x)) 或者 g(x) = θ(f(x))
α = 0 时:
所有 ε > 0, 存在 N, 当 n > N 时
有 |f(x) / g(x) - α| < ε
所以 -ε < f(x) / g(x) < ε
即 f(x) < ε g(x)
所以 f(x) = o(g(x))
α = ∞ 时:
因为 lim(x->∞)(f(x) / g(x)) = ∞
所以 lim(x->∞)(g(x) / f(x)) = 0
所以 g(x) = o(f(x))
即 f(x) = ω(g(x))
1、α = 0 时,g(x) 比 f(x) 高一级,所以是严格上界
2、α = ∞ 时,f(x) 比 g(x) 高一级,所以 f(x) 是 g(x) 的严格上界,g(x) 是 f(x) 的严格下界
3、c 一般是大于 0 的,因为两个正数的商取极限最终结果 大于等于 0
4、所有的复杂度函数都是非递减的
5、上面的这种证明方法可以用来 比较两个复杂度函数的大小* 、证明下面的定理*
定理2:
多项式 f(n) = ak n ^ k + a(k - 1) n ^ (k - 1) + --- + a1 n + a0 (ak > 0)
f(n) = θ(n ^ k)
定理3:
f(n) = O(g(n)) <=> g(n) = Ω(f(x))
f(n) = o(g(n)) <=> g(n) = ω(f(x))
定理4:
1) f(n) = θ(g(n)) <=> g(n) = θ(f(n))
2) 若 f(n) >= g(n) 或者 g(n) = O(f(n))
则 O(f(n) +/- g(n)) = O(f(n))
Ω(f(n) +/- g(n)) = Ω(f(n))
1、f(n) >= g(n) 和 g(n) = O(f(n)) 都包含了 f(n) 和 g(n) 同阶的情况,注意当同阶做减为 0 的时候没意义
复杂度排行:
1 < log n < n ^ α (0 < α < 1) < n < n log n < n ^ (1 + α) (α > 0) < 2 ^ n < n! < n ^ n ...
线性| 亚线性 |线性| 多项式 | 指数
示例:
1) log n = o(n ^ α) (α > 0)
2) log n = ω(1)
3) n log n = o(n ^ (1 + α)) (α > 0)
4) n ^ α = o(2 ^ n) (α > 0)
1、注:
1) O(1) 和 O(2) 表示一个级别
2) O(2 ^ n) 和 O(3 ^ n) 表示一个级别
这些都是同一级别的不同表示方式,他们表示的内涵一样,只是记号不一样而已
2、f(x) = O(n ^ α) (α > 0) 为多项式级别,我们称这种算法是可行的、简单的,当然,谁也不会认为 n ^ 80 次方是容易的,
一般α最多取到 3 (长辈的经验之谈)
非多项式级别(指数级别)我们称算法是不可行的,只能解决规模 n 较小的问题
如果文章有什么内容错误的话,欢迎评论区留言,小编一定会尽快改正的!