2.1 计算复杂性函数的阶
## 增长的阶
算法的实际运行时间受除算法设计本身以外很多其他因素的影响,如:指令集、操作系统、编译器……
- 如何描述算法的效率 → \to →只与输入问题的规模有关
- 增长率
- 时间复杂度
- 忽略低阶项
- 保留最高阶项
- 忽略常系数
- 常见增长阶: Θ ( 1 ) \Theta(1) Θ(1), Θ ( l g n ) \Theta(lg\,n) Θ(lgn), Θ ( n ) \Theta(\sqrt[]{n}) Θ(n), Θ ( n ) \Theta(n) Θ(n), Θ ( n l g n ) \Theta(nlg\,n) Θ(nlgn), Θ ( n 2 ) \Theta(n^2) Θ(n2), Θ ( n 3 ) \Theta(n^3) Θ(n3), Θ ( 2 n ) \Theta(2^n) Θ(2n), Θ ( n ! ) \Theta(n!) Θ(n!)
- 利用 Θ ( n 2 ) \Theta(n^2) Θ(n2)表示插入排序的最坏运行时间
- 增长记号 O , Θ , Ω , o , ω O, \Theta, \Omega, o, \omega O,Θ,Ω,o,ω
- O O O表示渐进上界
- Θ \Theta Θ表示渐进紧界
- Ω \Omega Ω表示渐进下界
同阶函数集合 Θ \Theta Θ
Θ ( g ( n ) ) = { f ( n ) ∣ ∃ c 1 , c 2 > 0 , ∀ n > n 0 , c 1 g ( n ) ≤ f ( n ) ≤ c 2 g ( n ) } \Theta(g(n))=\{\,f(n)|\exists c_1,c_2 >0,\forall n>n_0,c_1g(n)\le f(n) \le c_2g(n) \,\} Θ(g(n))={ f(n)∣∃c1,c2>0,∀n>n0,c1g(n)≤f(n)≤c2g(n)}
称为与g(n)同阶的函数集合
- 若 f ( n ) ∈ Θ ( g ( n ) ) f(n)\in \Theta(g(n)) f(n)∈Θ(g(n)), g ( n ) g(n) g(n)与 f ( n ) f(n) f(n)同阶, 记作 f ( n ) = Θ ( g ( n ) ) f(n) = \Theta(g(n)) f(n)=Θ(g(n))
Θ ( g ( n ) ) \Theta(g(n)) Θ(g(n))例子:
- 通常 f ( n ) = a n 2 + b n + c = Θ ( n 2 ) f(n)=an^2+bn+c=\Theta(n^2) f(n)=an2+bn+c=Θ(n2),其中a,b,c是常数且 a > 0 a>0 a>0
- 若 p ( n ) = ∑ i = 0 d a i n i p(n)=\sum_{i=0}^{d}a_in^i p(n)=∑i=0daini,其中 a i a_i ai是常数且 a d > 0 a_d>0 ad>0,则 p ( n ) = Θ ( n d ) p(n)=\Theta(n^d) p(n)=Θ(nd)
- Θ ( n 0 ) \Theta(n^0) Θ(n0)或者 Θ ( 1 ) \Theta(1) Θ(1)为常数时间复杂性
低阶函数集合 O O O
对于给定函数 g ( n ) g(n) g(n):
O ( g ( n ) ) = f { ( n ) 存 在 正 常 数 c 和 n 0 满 足 对 于 所 有 n ≥ n 0 , 0 ≤ f ( n ) ≤ c g ( n ) } O(g(n))=f\{(n) \,\bold{存在}正常数c和n_0 满足对于所有n\ge n_0, 0 \le f(n) \le cg(n)\,\} O(g(n))=f{
(n)存在正常数c和n0满足对于所有n≥n0,0≤f(n)≤cg(n)}
记作 f ( n ) ∈ O ( g ( n ) ) f(n)\in O(g(n)) f(n)∈O(g(n)), 或简记为 f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n))
Θ ( g ( n ) ) \Theta(g(n)) Θ(g(n))与 O ( g ( n ) ) O(g(n)) O(g(n))的关系:
- f ( n ) = Θ ( g ( n ) ) ⟹ f ( n ) = O ( g ( n ) ) f(n)=\Theta(g(n))\implies f(n)=O(g(n)) f(n)=Θ(g(n))⟹f(n)=O(g(n))
- Θ \Theta Θ强于 O O O
- Θ ( g ( n ) ) ⊆ O ( g ( n ) ) \Theta(g(n)) \subseteq O(g(n)) Θ(g(n))⊆O(g(n))
- a n 2 + b n + c = Θ ( n 2 ) an^2+bn+c=\Theta(n^2) an2+bn+c=Θ(n2)并且 a n 2 + b n + c = O ( n 2 ) an^2+bn+c=O(n^2) an2+bn+c=O(n2)
- a n + b = O ( n 2 ) an+b=O(n^2) an+b=O(n2)
- n = O ( n 2 ) n=O(n^2) n=O(n2)
如果 f ( n ) = O ( n k ) f(n)=O(n^k) f(n)=O(nk) ,则称 f ( n ) f(n) f(n)是多项式界限的
严格低阶函数 o o o
对于给定函数 g ( n ) g(n) g(n):
o ( g ( n ) ) = f { ( n ) 存 在 任 意 正 常 数 c , 存 在 一 个 正 数 n 0 满 足 对 于 所 有 n ≥ n 0 , 0 ≤ f ( n ) < c g ( n ) } o(g(n))=f\{(n) \,存在\bold{任意}正常数c,\bold{存在一个正数}n_0 满足对于所有n\ge n_0, 0 \le f(n) < cg(n)\,\} o(g(n))=f{
(n)存在任意正常数c,存在一个正数n0满足对于所有n≥n0,0≤f(n)<cg(n)}
记作 f ( n ) ∈ o ( g ( n ) ) f(n)\in o(g(n)) f(n)∈o(g(n)), 或简记为 f ( n ) = o ( g ( n ) ) f(n)=o(g(n)) f(n)=o(g(n))
o o o与 O O O的关系:
- O O O可能是或不是紧的
- 2 n 2 = O ( n 2 ) 2n^2=O(n^2) 2n2=O(n2)是紧的,但 2 n = O ( n 2 ) 2n=O(n^2) 2n=O(n2)不是紧的
- o o o标记上界且不紧
- 2 n = o ( n 2 ) 2n=o(n^2) 2n=o(n2),但是 2 n 2 ≠ o ( n 2 ) 2n^2\ne o(n^2) 2n2=o(n2)
- 区别:KaTeX parse error: Undefined control sequence: \cases at position 1: \̲c̲a̲s̲e̲s̲{O:\exist\,c\,某…
高阶函数集合 Ω \Omega Ω
对于给定函数 g ( n ) g(n) g(n):
Ω ( g ( n ) ) = f { ( n ) 存 在 正 常 数 c 和 n 0 满 足 对 于 所 有 n ≥ n 0 , 0 ≤ c g ( n ) ≤ f ( n ) } \Omega(g(n))=f\{(n) \,存在正常数c和n_0 满足对于所有n\ge n_0, 0 \le cg(n) \le f(n)\,\} Ω(g(n))=f{
(n)存在正常数c和n0满足对于所有n≥n0,0≤cg(n)≤f(n)}
记作 f ( n ) ∈ Ω ( g ( n ) ) f(n)\in \Omega(g(n)) f(n)∈Ω(g(n)), 或简记为 f ( n ) = Ω ( g ( n ) ) f(n)=\Omega(g(n)) f(n)=Ω(g(n))
Ω \Omega Ω用来描述运行时间的最好情况,对所有输入都正确
例如,对于插入排序:
- 最好运行情况为 Ω ( n ) \Omega(n) Ω(n)
- 运行时间为 Ω ( n ) \Omega(n) Ω(n) ( Ω ( n 2 ) \Omega(n^2) Ω(n2)[x])
- 最坏运行时间为 Ω ( n 2 ) \Omega(n^2) Ω(n2)
也可以用来描述问题:
- 排序问题的时间复杂性为 Ω ( n ) \bold{\Omega(n)} Ω(n) → \to → 最好情况
O , Θ , Ω \bold{O,\Theta,\Omega} O,Θ,Ω的关系:
对 于 f ( n ) 和 g ( n ) , f ( n ) = Θ ( g ( n ) ) 当 且 仅 当 f ( n ) = O ( g ( n ) ) 且 f ( n ) = Ω ( g ( n ) ) 对于f(n)和g(n),\bold{f(n)=\Theta(g(n))}当且仅当\\ \bold{f(n)=O(g(n))且f(n)=\Omega(g(n))} 对于f(n)和g(n),f(n)=Θ(g(n))当且仅当f(n)=O(g(n))且f(n)=Ω(g(n))
严格高阶函数集合 ω \omega ω
对于给定函数 g ( n ) g(n) g(n):
ω ( g ( n ) ) = f { ( n ) 对 于 任 意 正 常 数 c , 存 在 正 数 n 0 满 足 对 于 所 有 n ≥ n 0 , 0 ≤ c g ( n ) ≤ f ( n ) } \omega(g(n))=f\{(n) \,对于\bold{任意}正常数c,\bold{存在正数}n_0 满足对于所有n\ge n_0, 0 \le cg(n) \le f(n)\,\} ω(g(n))=f{
(n)对于任意正常数c,存在正数n0满足对于所有n≥n0,0≤cg(n)≤f(n)}
记作 f ( n ) ∈ ω ( g ( n ) ) f(n)\in \omega(g(n)) f(n)∈ω(g(n)), 或简记为 f ( n ) = ω ( g ( n ) ) f(n)=\omega(g(n)) f(n)=ω(g(n))
lim n → ∞ f ( n ) g ( n ) = ∞ \lim_{n\to \infty}\frac{f(n)}{g(n)}=\infty n→∞limg(n)f(n)=∞
ω \omega ω表示不紧的下界
KaTeX parse error: Can't use function '$' in math mode at position 25: …2}{2}=\omega(n)$̲,但$\frac{n^2}{2…
ω \omega ω与 Ω \Omega Ω 的区别:KaTeX parse error: Undefined control sequence: \cases at position 1: \̲c̲a̲s̲e̲s̲{ \omega:\,\exi…
ω \omega ω与 o o o的关系:
f ( n ) = ω ( g ( n ) ) ⟺ g ( n ) = o ( f ( n ) ) f(n)=\omega(g(n)) \iff g(n)=o(f(n)) f(n)=ω(g(n))⟺g(n)=o(f(n))
渐进符号的性质
-
传递性: O , Θ , Ω , o , ω O, \Theta, \Omega, o, \omega O,Θ,Ω,o,ω
f ( n ) = Θ ( g ( n ) ) 并 且 g ( n ) = Θ ( h ( n ) ) ⟹ f ( n ) = Θ ( h ( n ) ) f(n)=\Theta(g(n))并且 g(n)=\Theta(h(n)) \implies f(n)=\Theta(h(n)) f(n)=Θ(g(n))并且g(n)=Θ(h(n))⟹f(n)=Θ(h(n)) -
自反性:$O,\Theta,\Omega $
f ( n ) = Θ ( f ( n ) ) f(n)=\Theta(f(n)) f(n)=Θ(f(n)) -
对称性: Θ \Theta Θ