渐近符号总结
在学习算法的时候,一个很重要的部分就是复杂度分析,或者说是叫做渐进分析,本文简单总结了相应的符号的意思。
1. Big O - O(g(n)) - 上界 (Upper Bound)
-
定义: f(n)=O(g(n)) 当且仅当存在常数 c>0 和 n0,使得对于所有 n≥n0:
f(n)≤c⋅g(n)
-
含义: f(n) 的增长不会超过 g(n)(最坏情况)
-
例子: 3n2+5n=O(n2),也可以说 =O(n3)(但不够紧)
2. Big Omega - Ω(g(n)) - 下界 (Lower Bound)
-
定义: f(n)=Ω(g(n)) 当且仅当存在常数 c>0 和 n0,使得对于所有 n≥n0:
f(n)≥c⋅g(n)
-
含义: f(n) 的增长至少是 g(n)(最好情况的下界)
-
例子: 3n2+5n=Ω(n2),也可以说 =Ω(n)(但不够紧)
3. Big Theta - Θ(g(n)) - 紧界 (Tight Bound)
-
定义: f(n)=Θ(g(n)) 当且仅当 f(n)=O(g(n)) 且 f(n)=Ω(g(n))
即存在常数 c1,c2>0 和 n0,使得对于所有 n≥n0:
c1⋅g(n)≤f(n)≤c2⋅g(n)
-
含义: f(n) 和 g(n) 的增长率相同
-
例子: 3n2+5n=Θ(n2)
4. Little o - o(g(n)) - 严格上界 (Strict Upper Bound)
-
定义: f(n)=o(g(n)) 当且仅当对于任意常数 c>0,存在 n0 使得对于所有 n≥n0:
f(n)<c⋅g(n)
等价于: limn→∞g(n)f(n)=0
-
含义: f(n) 增长严格慢于 g(n)
-
例子: n=o(n2),但 n2=o(n2)
5. Little omega - ω(g(n)) - 严格下界 (Strict Lower Bound)
-
定义: f(n)=ω(g(n)) 当且仅当对于任意常数 c>0,存在 n0 使得对于所有 n≥n0:
f(n)>c⋅g(n)
等价于: limn→∞g(n)f(n)=∞
-
含义: f(n) 增长严格快于 g(n)
-
例子: n2=ω(n),但 n2=ω(n2)
总结表格
| 符号 |
含义 |
类比 |
| f=O(g) |
f≤c⋅g |
≤ |
| f=Ω(g) |
f≥c⋅g |
≥ |
| f=Θ(g) |
c1g≤f≤c2g |
= |
| f=o(g) |
f<c⋅g (任意c) |
< |
| f=ω(g) |
f>c⋅g (任意c) |
> |
常见增长率排序(从慢到快)
1<logn<n<n<nlogn<n2<n3<2n<n!<nn