定义
- 如果存在正常数 c 和 n0使得当 N≥n0时 T(N)≤cf(N),则计为 T(N)=O(f(N))。
- 如果存在正常数 c 和 n0使得当 N≥n0时 T(N)≥cg(N),则计为 T(N)=Ω(g(N))。
- T(N)=θ(h(N))当且仅当 T(N)=O(h(N))和 T(N)=Ω(g(N))。
- 任意正常数 c 都存在常数 n0使得当 N≥n0时 T(N)<cp(N),则 T(N)=o(p(N))。
看不懂没关系,算法主要用这些来比较相对增长率,定义中四个公式分别表示
- T(N)的增长率小于或等于 f(N)的增长率,f(N)是 T(N)的上界(upper bound)
- T(N)的增长率大于或等于 g(N)的增长率,T(N)是 f(N)的下界(lower bound)
- T(N)的增长率等于 h(N)的增长率
- T(N)的增长率小于 p(N)的增长率
eg:
N3比 N2增长快,则可以表示为 N2=O(N3)
需要掌握的结论
- 如果 T1(N)=O(f(N))且 T2(N)=O(g(N)),那么 (a) T1(N)+T2(N)=O(f(N)+g(N));直观表达为 max(O(f(N)),O(g(N)))。
(b) T1(N)*T2(N)=O(f(N)*g(N))。 - 如果 T(N)是一个 k 次多项式,则 T(N)=θ(Nk)
- 对任意常数 k,logkN=O(N);对数增长的特别缓慢。
注意
- 尽量不要将常数或者低阶项放入大 O 中,因为算法分析中常数和低阶项很有可能被忽略。
- 总能通过计算极限 limN→∞f(N)/g(N)来确定两个函数的相对增长率,必要可使用洛必达法则。有四种可能值
2.1 极限为 0:f(N)=o(g(N))。
2.2 极限是 c≠0:f(N)=θ(g(N))。
2.3 极限是 ∞:g(N)=o(o(f(N)))。
2.4 极限摆动:二者无关。
参考资料《数据结构与算法分析》
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于