数据结构与算法分析——数学基础

  1. 如果存在正常数cccn0n_0n0 使得当N≥n0N \geq n_0Nn0T(N)≤cf(N)T(N) \leq cf(N)T(N)cf(N),则记为T(N)=O(f(N))T(N) = O(f(N))T(N)=O(f(N))
  2. 如果存在正常数cccn0n_0n0 使得当N≥n0N \geq n_0Nn0T(N)≥cg(N)T(N) \geq cg(N)T(N)cg(N),则记为T(N)=Ω(g(N))T(N) = \Omega(g(N))T(N)=Ω(g(N))
  3. T(N)=Θ(h(N))T(N) = \Theta(h(N))T(N)=Θ(h(N))当且仅当T(N)=O(h(N))T(N) = O(h(N))T(N)=O(h(N))T(N)=Ω(h(N))T(N) = \Omega(h(N))T(N)=Ω(h(N))
  4. 如果对每一正常数ccc都存在常数n0n_0n0使得当N>n0N > n_0N>n0T(N)<cp(N)T(N) < cp(N)T(N)<cp(N),则T(N)=o(p(N))T(N) = o(p(N))T(N)=o(p(N))。有时也可以说,如果T(N)=O(p(N))T(N) = O(p(N))T(N)=O(p(N))T(N)≠Θ(p(N))T(N) \neq \Theta(p(N))T(N)=Θ(p(N)),则T(N)=o(p(N))T(N) = o(p(N))T(N)=o(p(N))

上述定义的目的是要在函数间建立一种相对的级别。

1000N=O(N2)1000N = O(N^2)1000N=O(N2)称为大O标记法O(N2)O(N^2)O(N2)读作“大ON的平方”。

T(N)=O(f(N))T(N) = O(f(N))T(N)=O(f(N))时,我们是在保证函数T(N)T(N)T(N)是在以不快于f(N)f(N)f(N)的速度增长;因此f(N)f(N)f(N)T(N)T(N)T(N)的一个上界。这意味着f(N)=Ω(T(N))f(N) = \Omega(T(N))f(N)=Ω(T(N)),于是我们说T(N)T(N)T(N)f(N)f(N)f(N)的一个下界。

如果g(N)=2N2g(N) = 2N^2g(N)=2N2,那么g(N)=O(N4)g(N) = O(N^4)g(N)=O(N4)g(N)=O(N3)g(N) = O(N^3)g(N)=O(N3)g(N)=O(N2)g(N) = O(N^2)g(N)=O(N2)从技术上看都是成立的,但是最后一个是最佳选择。

  • 法则1:如果T1(N)=O(f(N))T_1(N) = O(f(N))T1(N)=O(f(N))T2(N)=O(g(N))T_2(N) = O(g(N))T2(N)=O(g(N)),那么
    • T1(N)+T2(N)=O(f(N)+g(N))T_1(N) + T_2(N) = O(f(N) + g(N))T1(N)+T2(N)=O(f(N)+g(N))
    • T1(N)∗T2(N)=O(f(N)∗g(N))T_1(N) * T_2(N) = O(f(N) * g(N))T1(N)T2(N)=O(f(N)g(N))
  • 法则2:如果T(N)T(N)T(N)是一个kkk次多项式,则T(N)=Θ(Nk)T(N) = \Theta(N^k)T(N)=Θ(Nk)
  • 法则3:对任意常数kkklogkN=O(N)log^kN = O(N)logkN=O(N)。它告诉我们对数增长得非常缓慢。
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐