渐进记号
一、五种渐进记号
- 大 O O O记号:
对于给定函数 g ( n ) g(n) g(n), f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n)):存在正常量 c c c和 n 0 n_{0} n0,使得对所有 n ≥ n 0 n \geq n_{0} n≥n0,有 0 ≤ f ( n ) ≤ c g ( n ) 0 \leq f(n) \leq cg(n) 0≤f(n)≤cg(n)成立。 f ( n ) f(n) f(n)只有一个渐进上界, f ( n ) f(n) f(n)的阶不高于 g ( n ) g(n) g(n)的阶。
- Ω \Omega Ω记号:
对于给定函数 g ( n ) g(n) g(n), f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n)):存在正常量 c c c和 n 0 n_{0} n0,使得对所有 n ≥ n 0 n \geq n_{0} n≥n0,有 0 ≤ c g ( n ) ≤ f ( n ) 0 \leq cg(n) \leq f(n) 0≤cg(n)≤f(n)成立。 f ( n ) f(n) f(n)只有一个渐进下界, f ( n ) f(n) f(n)的阶不低于 g ( n ) g(n) g(n)的阶。
- Θ \Theta Θ记号:
对于给定函数 g ( n ) g(n) g(n), f ( n ) = Θ ( g ( n ) ) f(n)=\Theta(g(n)) f(n)=Θ(g(n)):存在正常量 c 1 c_{1} c1, c 2 c_{2} c2和 n 0 n_{0} n0,使得对所有 n ≥ n 0 n \geq n_{0} n≥n0,有 0 ≤ c 1 g ( n ) ≤ f ( n ) ≤ c 2 g ( n ) 0 \leq c_{1}g(n) \leq f(n) \leq c_{2}g(n) 0≤c1g(n)≤f(n)≤c2g(n)成立。 Θ \Theta Θ记号渐进地给出了一个函数的上界和下界, f ( n ) f(n) f(n)的阶等于 g ( n ) g(n) g(n)的阶
若 f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n))且 f ( n ) = Ω ( g ( n ) ) f(n)= \Omega (g(n)) f(n)=Ω(g(n)),则 f ( n ) = Θ ( g ( n ) ) f(n)= \Theta (g(n)) f(n)=Θ(g(n))。
- 小 o o o记号:
对于给定函数 g ( n ) g(n) g(n), f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n)):存在正常量 c > 0 c > 0 c>0和 n 0 > 0 n_{0} > 0 n0>0,使得对所有 n ≥ n 0 n \geq n_{0} n≥n0,有 0 ≤ f ( n ) < c g ( n ) 0 \leq f(n) < cg(n) 0≤f(n)<cg(n)成立。 f ( n ) f(n) f(n)只有一个渐进紧确上界, f ( n ) f(n) f(n)的阶低于 g ( n ) g(n) g(n)的阶。
- ω \omega ω记号:
对于给定函数 g ( n ) g(n) g(n), f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n)):存在正常量 c > 0 c > 0 c>0和 n 0 > 0 n_{0} > 0 n0>0,使得对所有 n ≥ n 0 n \geq n_{0} n≥n0,有 0 ≤ c g ( n ) < f ( n ) 0 \leq cg(n) < f(n) 0≤cg(n)<f(n)成立。 f ( n ) f(n) f(n)只有一个渐进紧确下界, f ( n ) f(n) f(n)的阶高于 g ( n ) g(n) g(n)的阶。
二、 相关定理
- 定理1:
(1)如果 lim n → + ∞ f ( n ) g ( n ) \lim_{n \to +\infty} \frac{f(n)}{g(n)} limn→+∞g(n)f(n)存在,且为某个常数 c c c,则 f ( n ) = Θ ( g ( n ) ) f(n)= \Theta (g(n)) f(n)=Θ(g(n))
(2)如果 lim n → + ∞ f ( n ) g ( n ) = 0 \lim_{n \to +\infty} \frac{f(n)}{g(n)}=0 limn→+∞g(n)f(n)=0,则 f ( n ) = O ( g ( n ) ) f(n)= O (g(n)) f(n)=O(g(n))
(3)如果 lim n → + ∞ f ( n ) g ( n ) = ∞ \lim_{n \to +\infty} \frac{f(n)}{g(n)}=\infty limn→+∞g(n)f(n)=∞,则 f ( n ) = ω ( g ( n ) ) f(n)= \omega (g(n)) f(n)=ω(g(n))
由定理1可以导出两个重要结果:
(1)多项式函数的阶低于指数函数的阶:
n d = o ( r n ) , r > 1 , d > 0 n^{d}=o(r^{n}), \quad r > 1,d > 0 nd=o(rn),r>1,d>0
(2)对数函数的阶低于幂函数的阶:
l n n = o ( n d ) , d > 0 {\rm ln}n=o(n^{d}), \quad d>0 lnn=o(nd),d>0
- 定理2,传递性:
若 f ( n ) = Θ ( g ( n ) ) f(n)= \Theta (g(n)) f(n)=Θ(g(n)),且 g ( n ) = Θ ( h ( n ) ) g(n)=\Theta (h(n)) g(n)=Θ(h(n)),则 f ( n ) = Θ ( h ( n ) ) f(n)=\Theta(h(n)) f(n)=Θ(h(n))。对于大 O O O、小 o o o、 Ω \Omega Ω、 ω \omega ω同样成立。
- 定理3:
f = O ( h ) , g = O ( h ) → f + g = O ( h ) f=O(h), \quad g=O(h) \rightarrow f+g=O(h) f=O(h),g=O(h)→f+g=O(h)
该性质可推广到有限个函数。算法由有限个步骤构成,若每一步的时间复杂度函数的上界都是 h ( n ) h(n) h(n),那么算法的时间复杂度函数可以写作 O ( h ( n ) ) O(h(n)) O(h(n))
三、相关性质
- 1、自反性:
f ( n ) = Θ ( f ( n ) ) f(n)=\Theta (f(n)) f(n)=Θ(f(n))
f ( n ) = O ( f ( n ) ) f(n)=O(f(n)) f(n)=O(f(n))
f ( n ) = Ω ( f ( n ) ) f(n)=\Omega(f(n)) f(n)=Ω(f(n))
- 2、对称性:
f ( n ) = Θ ( g ( n ) ) f(n)=\Theta(g(n)) f(n)=Θ(g(n)),当且仅当 g ( n ) = Θ ( f ( n ) ) g(n)=\Theta(f(n)) g(n)=Θ(f(n))
- 3、转置对称性:
f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n))当且仅当 g ( n ) = Ω ( f ( n ) ) g(n)=\Omega(f(n)) g(n)=Ω(f(n))
f ( n ) = o ( g ( n ) ) f(n)=o(g(n)) f(n)=o(g(n))当且仅当 g ( n ) = ω ( f ( n ) ) g(n)=\omega(f(n)) g(n)=ω(f(n))
四、几类重要函数
-
至少指数函数级: 2 n 2^{n} 2n, 3 n 3^{n} 3n, n ! n! n!, 2 2 n 2^{2^{n}} 22n, n 2 n n2^{n} n2n, ( log n ) log n = n log log n (\log n)^{\log n}=n^{\log \log n} (logn)logn=nloglogn
-
多项式级: n n n, n 2 n^{2} n2, n l o g n n {\rm log}n nlogn, n 1 2 n^{\frac{1}{2}} n21, n 3 n^{3} n3, l o g ( n ! ) = Θ ( n l o g n ) {\rm log}(n!)=\Theta(n {\rm log}n) log(n!)=Θ(nlogn)
-
对数多项式级: l o g n {\rm log}n logn, l o g 2 n {\rm log}^{2}n log2n, l o g l o g n {\rm log log}n loglogn, log n \sqrt{\log n} logn
取整函数
-
⌊ x ⌋ \lfloor x \rfloor ⌊x⌋:向下取整, ⌈ x ⌉ \lceil x \rceil ⌈x⌉:向上取整
-
一些性质:
x − 1 < ⌊ x ⌋ ≤ x ≤ ⌈ x ⌉ < x + 1 x-1<\lfloor x\rfloor \leq x \leq\lceil x\rceil< x+1 x−1<⌊x⌋≤x≤⌈x⌉<x+1
⌊ x + n ⌋ = ⌊ x ⌋ + n , ⌈ x + n ⌉ = ⌈ x ⌉ + n \lfloor x+n\rfloor=\lfloor x\rfloor+ n,\lceil x+n\rceil=\lceil x\rceil+ n ⌊x+n⌋=⌊x⌋+n,⌈x+n⌉=⌈x⌉+n
⌈ n 2 ⌉ + ⌊ n 2 ⌋ = n \left\lceil\frac{n}{2}\right\rceil+\left\lfloor\frac{n}{2}\right\rfloor= n ⌈2n⌉+⌊2n⌋=n
⌈ ⌈ n a ⌉ b ⌉ = ⌈ n a b ⌉ , ⌊ ⌊ n a ⌋ b ⌋ = ⌊ n a b ⌋ \left\lceil\frac{\left\lceil\frac{n}{a}\right\rceil}{b}\right\rceil=\left\lceil\frac{n}{a b}\right\rceil, \quad \left\lfloor\frac{\left\lfloor\frac{n}{a}\right\rfloor}{b}\right\rfloor=\left\lfloor\frac{n}{a b}\right\rfloor ⌈b⌈an⌉⌉=⌈abn⌉,⌊b⌊an⌋⌋=⌊abn⌋
参考资料
-
《算法导论》
更多文章请浏览作者个人网站5663015.github.io
添加作者微信,一起交流学习,微信号:wuan3076
您的打赏是我进步的动力~