数据结构与算法分析——数学基础
- 如果存在正常数 c c c和 n 0 n_0 n0 使得当 N ≥ n 0 N \geq n_0 N≥n0时 T ( N ) ≤ c f ( 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))。
- 如果存在正常数 c c c和 n 0 n_0 n0 使得当 N ≥ n 0 N \geq n_0 N≥n0时 T ( N ) ≥ c g ( N ) T(N) \geq cg(N) T(N)≥cg(N),则记为 T ( N ) = Ω ( g ( N ) ) T(N) = \Omega(g(N)) T(N)=Ω(g(N))。
- 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))。
- 如果对每一正常数 c c c都存在常数 n 0 n_0 n0使得当 N > n 0 N > n_0 N>n0时 T ( N ) < c p ( 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))。
上述定义的目的是要在函数间建立一种相对的级别。
1000 N = O ( N 2 ) 1000N = O(N^2) 1000N=O(N2)称为大O标记法, O ( N 2 ) 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 ) = 2 N 2 g(N) = 2N^2 g(N)=2N2,那么 g ( N ) = O ( N 4 ) g(N) = O(N^4) g(N)=O(N4), g ( N ) = O ( N 3 ) g(N) = O(N^3) g(N)=O(N3)和 g ( N ) = O ( N 2 ) g(N) = O(N^2) g(N)=O(N2)从技术上看都是成立的,但是最后一个是最佳选择。
- 法则1:如果
T
1
(
N
)
=
O
(
f
(
N
)
)
T_1(N) = O(f(N))
T1(N)=O(f(N))且
T
2
(
N
)
=
O
(
g
(
N
)
)
T_2(N) = O(g(N))
T2(N)=O(g(N)),那么
- T 1 ( N ) + T 2 ( 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))
- T 1 ( N ) ∗ T 2 ( 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)是一个 k k k次多项式,则 T ( N ) = Θ ( N k ) T(N) = \Theta(N^k) T(N)=Θ(Nk)。
- 法则3:对任意常数 k k k, l o g k N = O ( N ) log^kN = O(N) logkN=O(N)。它告诉我们对数增长得非常缓慢。