|
8 | 8 |
|
9 | 9 | ## 2. 渐进记号 |
10 | 10 |
|
| 11 | +渐进记号描述函数的增长趋势。五个渐进记号如下: |
| 12 | + |
11 | 13 | ### 2.1. 定义 |
12 | 14 |
|
13 | 15 | 1. $\Theta(g(n))=\{f(n)\space |\space\exists\space c_1,\space c_2,\space n_0>0,\forall\space n \ge n_0,\space 0\le c_1g(n)\le f(n)\le c_2g(n)\}$ |
|
16 | 18 | 4. $o(g(n))=\{f(n)\space |\space\forall\space c\gt 0,\space\exists\space n_0\gt 0,\space\forall n\ge n_0,\space 0\le f(n)\lt cg(n)\}$ |
17 | 19 | 5. $\omega(g(n))=\{f(n)\space |\space\forall\space c\gt 0,\space\exists\space n_0\gt 0,\space\forall n\ge n_0,\space 0\le cg(n)\lt f(n)\}$ |
18 | 20 |
|
19 | | -> 注:规范的写法应当是 $f(n)\in O(g(n))$,但为了方便,可以用 $f(n)=O(g(n))$ 代替 |
| 21 | +::: tip 等号代替属于 |
| 22 | + |
| 23 | +为了方便,当 $f(n)\in O(g(n))$ 时,记作 $f(n)=O(g(n))$。 |
| 24 | + |
| 25 | +::: |
| 26 | + |
| 27 | +其中,第 2.4.5. 可以更快速地用极限定义: |
| 28 | + |
| 29 | +1. $$f(n) \in O(g(n)) \Leftrightarrow \lim_{n \to \infin} \frac{f(n)}{g(n)}=C$$ |
| 30 | +2. $$f(n) \in o(g(n)) \Leftrightarrow \lim_{n \to \infin} \frac{f(n)}{g(n)}=0$$ |
| 31 | +3. $$f(n) \in \omega(g(n)) \Leftrightarrow \lim_{n \to \infin} \frac{f(n)}{g(n)}=\infin$$ |
20 | 32 |
|
21 | 33 | ### 2.2. 性质 |
22 | 34 |
|
|
42 | 54 |
|
43 | 55 | ## 2.3 时间复杂度的表示 |
44 | 56 |
|
45 | | -1. 时间复杂度可以用渐进记号表示,最常用的是大 O 记号 |
46 | | -2. 大多数情况下,我们只关注算法的**最坏情况运行时间** |
47 | | - 1. 对大部分算法来说,最坏情况经常出现 |
48 | | - 2. **平均情况运行时间**很可能等于最坏情况运行时间 |
49 | | - 3. 有例外,比如**快速排序** |
| 57 | +1. 时间复杂度可以用渐进记号表示,最常用的是大 O 记号。 |
| 58 | +2. 大多数情况下,我们只关注算法的**最坏情况运行时间**: |
| 59 | + 1. 对大部分算法来说,最坏情况经常出现; |
| 60 | + 2. **平均情况运行时间**很可能等于最坏情况运行时间; |
| 61 | + 3. 有例外,比如**快速排序**。 |
50 | 62 |
|
51 | 63 | ## 2.4 例子 |
52 | 64 |
|
53 | | -1. 常数函数的时间复杂度是 $\Theta(1)$,也可写成 $\Theta(n^0)$(_为什么?_) |
| 65 | +1. 常数函数的时间复杂度是 $\Theta(1)$,也可写成 $\Theta(n^0)$(为什么?) |
54 | 66 | 2. 函数的增长不一定能比较: |
55 | 67 | $f(n)=n$,$g(n)=n^{1+\sin n}$ |
56 | | - 此时 $f(n)=O(g(n))$ 和 $f(n)=\Omega(g(n))$ 均不成立(_为什么?_) |
| 68 | + 此时 $f(n)=O(g(n))$ 和 $f(n)=\Omega(g(n))$ 均不成立(为什么?) |
57 | 69 | 3. $\lg(n!)=\Theta(n\lg n)$ |
58 | | - - 由 [**斯特林公式**](https://zhuanlan.zhihu.com/p/145007068),$\lg(n!) \approx \lg(\sqrt{2\pi n} (\frac{n}{e})^n)=\lg(\sqrt{2\pi n}) + n\lg(n) – n\lg(e)$ |
59 | | - $\lg(\sqrt{2\pi n})$ 和 $- n\lg(e)$ 均可视为较 $n\lg(n)$ 小的项 |
60 | | - $\implies\lg(n!) = O(n\lg{n})$。 |
61 | | - - 又因为 $n! \geq \left(\frac{n}{2}\right)^{\frac{n}{2}}$(_为什么?_) |
62 | | - $\lg(n!) \geq \frac{n}{2} \lg(\frac{n}{2})$ |
| 70 | + - 由 [**斯特林公式**](https://zhuanlan.zhihu.com/p/145007068),$\lg(n!) \approx \lg(\sqrt{2\pi n} (\frac{n}{e})^n)=\lg(\sqrt{2\pi n}) + n\lg(n) – n\lg(e)$。又因为 $\lg(\sqrt{2\pi n})$ 和 $- n\lg(e)$ 均可视为较 $n\lg(n)$ 小的项,所以 $\lg(n!) = O(n\lg{n})$。 |
| 71 | + - 又因为 $n! \geq \left(\frac{n}{2}\right)^{\frac{n}{2}}$(为什么?) |
| 72 | + 两边取对数,得 $\lg(n!) \geq \frac{n}{2} \lg(\frac{n}{2})$ |
63 | 73 | $\implies\lg(n!) \geq c \cdot n\lg{n}$ (其中$c$是某个常数) |
64 | 74 | $\implies\lg{n}! = \Omega(n\lg{n})$ |
65 | 75 | - 由以上两式子可得,$\lg{n}! = \Theta(n\lg{n})$ |
|
0 commit comments