Skip to content

Commit 4b8fe89

Browse files
committed
小修改
1 parent 3c85fc3 commit 4b8fe89

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

docs/教程/正文/数据结构与算法/算法/3_算法的时间和空间复杂度.md

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
## 2. 渐进记号
1010

11+
渐进记号描述函数的增长趋势。五个渐进记号如下:
12+
1113
### 2.1. 定义
1214

1315
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,7 +18,17 @@
1618
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)\}$
1719
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)\}$
1820

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$$
2032

2133
### 2.2. 性质
2234

@@ -42,24 +54,22 @@
4254

4355
## 2.3 时间复杂度的表示
4456

45-
1. 时间复杂度可以用渐进记号表示,最常用的是大 O 记号
46-
2. 大多数情况下,我们只关注算法的**最坏情况运行时间**
47-
1. 对大部分算法来说,最坏情况经常出现
48-
2. **平均情况运行时间**很可能等于最坏情况运行时间
49-
3. 有例外,比如**快速排序**
57+
1. 时间复杂度可以用渐进记号表示,最常用的是大 O 记号
58+
2. 大多数情况下,我们只关注算法的**最坏情况运行时间**
59+
1. 对大部分算法来说,最坏情况经常出现
60+
2. **平均情况运行时间**很可能等于最坏情况运行时间
61+
3. 有例外,比如**快速排序**
5062

5163
## 2.4 例子
5264

53-
1. 常数函数的时间复杂度是 $\Theta(1)$,也可写成 $\Theta(n^0)$(_为什么?_
65+
1. 常数函数的时间复杂度是 $\Theta(1)$,也可写成 $\Theta(n^0)$(为什么?
5466
2. 函数的增长不一定能比较:
5567
$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))$ 均不成立(为什么?
5769
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})$
6373
$\implies\lg(n!) \geq c \cdot n\lg{n}$ (其中$c$是某个常数)
6474
$\implies\lg{n}! = \Omega(n\lg{n})$
6575
- 由以上两式子可得,$\lg{n}! = \Theta(n\lg{n})$

0 commit comments

Comments
 (0)