目录

算法导论 Chap3 习题


3.1

3.1-1

因为 $f(n)$ 和 $g(n)$ 都是渐近非负的,所以对于 $f(n)$ 和 $g(n)$ 有:

$$ \begin{aligned} \exists n_1:\quad f(n) & \geqslant 0\quad \text{for all}\ n > n_1 \\ \exists n_2:\quad g(n) & \geqslant 0\quad \text{for all}\ n > n_2 \end{aligned} $$

令 $n_0 = \max(n_1, n_2)$,则对于 $n > n_0$,下列不等式成立:

$$ \begin{aligned} f(n) & \leqslant \max(f(n), g(n)) \\ g(n) & \leqslant \max(f(n), g(n)) \\ \frac{1}{2}(f(n) + g(n)) & \leqslant \max(f(n), g(n)) \\ \max(f(n), g(n)) & \leqslant (f(n) + g(n)) \end{aligned} $$
结合后两个不等式得: $$ 0 \leqslant \frac{1}{2}(f(n) + g(n)) \leqslant \max{(f(n), g(n))} \leqslant f(n) + g(n). $$ 即当 $c_1 = \frac{1}{2}$ 和 $c_2 = 1$ 时,$\Theta{(f(n) + g(n))}$ 的定义。

3.1-2

将 $(n + a)^b$ 以二项式展开,得:

$$ (n + a)^b = C_0^b n^b a^0 + C_1^b n^{b - 1} a^1 + \cdots + C_b^b n^0 a^b. $$ 对二项式成立的一个不等式是对于 $x \geqslant 1$,有:

$$ a_0 x^0 + a_1 x^1 + \cdots + a_n x^n \leqslant (a_0 + a_1 + \cdots + a_n) x^n. $$ 因此可得:

$$ \begin{aligned} C_0^b n^b & \leqslant C_0^b n^b a^0 + C_1^b n^{b - 1} a^1 + \cdots + C_b^b n^0 a^b \\ & \leqslant (C_0^b + C_1^b + \cdots + C_b^b) n^b = 2^b n^b. \end{aligned} $$

从而 $(n + a)^b = \Theta(n^b).$

3.1-3

这个句子对于算法 $A$ 的上下界都没有准确描述。

3.1-4

(1)$2^{n + 1} = 2 \times 2^n$。令 $c \geqslant 2, n_0 = 0$,使得对所有 $n \geqslant n_0$ 有 $0 \leqslant 2^{n + 1} \leqslant c \times 2^n$。根据定义,$2^{n + 1} = O(2^n)$,因此为真。

(2)$2^{2n} = 2^n \times 2^n = 4^n$。无法找到任何 $c$ 和 $n_0$ 使得 $0 \leqslant 2^{2^n} = 4^n \leqslant c \times 2^n$ 对所有 $n \geqslant n_0$ 成立。

3.1-5

充分性:因为 $f(n) = \Theta(g(n))$,有 $0 \leqslant c_{1}g(n) \leqslant f(n) \leqslant c_{2}g(n)$ 对所有 $n \geqslant n_0$ 都成立。

由 $0 \leqslant c_{1}g(n) \leqslant f(n)$ 可得 $f(n) = O(g(n))$;由 $0 \leqslant f(n) \leqslant c_{2}g(n)$ 可得 $f(n) = \Omega(g(n))$。

必要性:因为 $f(n) = O(g(n))$ 且 $f(n) = \Omega(g(n))$,有:

$$ \begin{aligned} 0 \leqslant c_{1}'g(n) \leqslant f(n)\ 对所有\ n \geqslant n_1\ 成立 \\ 0 \leqslant f(n) \leqslant c_{2}'g(n)\ 对所有\ n \geqslant n_2\ 成立 \end{aligned} $$

令 $n_0’ = \max(n_1,n_2)$,合并不等式得:

$$ 0 \leqslant c_{1}'g(n) \leqslant f(n) \leqslant c_{2}'g(n)\ 对所有\ n \geqslant n_0'\ 成立. $$

3.1-6

证明同 3.1-5。

3.1-7

根据定义有 $0 \leqslant o(g(n)) < ch(n)$,$0 \leqslant ch(n) < \omega(g(n))$。因此 $o(g(n)) < \omega(g(n))$,故 $o(g(n)) \cap \omega(g(n)) = \emptyset$。

3.1-8

$$ \begin{aligned} \Omega(g(n,m)) = \{f(n,m): & 存在正常量\ c,n_0\ 和\ m_0 \\ & 使得\ 0 \leqslant cg(n,m) \leqslant f(n,m) \\ & 对所有\ n \geqslant n_0\ 或\ m \geqslant m_0\ 成立\} \\ \end{aligned} $$
$$ \begin{aligned} \Theta(g(n,m)) = \{f(n,m): & 存在正常量\ c_1,c_2,n_0\ 和\ m_0 \\ & 使得\ 0 \leqslant c_1g(n,m) \leqslant f(n,m) \leqslant c_2g(n,m) \\ & 对所有\ n \geqslant n_0\ 或\ m \geqslant m_0\ 成立\} \end{aligned} $$

3.2

3.2-1

(1)因为 $f(n)$ 和 $g(n)$ 都是单调递增函数,所以当 $n_1 \leqslant n_2$ 时,有 $f(n_1) \leqslant f(n_2)$ 和 $g(n_1) \leqslant g(n_2)$。另外令 $g(n_1) = m_1$, $g(n_2) = m_2$, 有 $m_1 \leqslant m_2$。综上可得: $$ f(n_1) + g(n_1) \leqslant f(n_2) + g(n_1) \leqslant f(n_2) + g(n_2) \ f(m_1) \leqslant f(m_2) $$

故 $f(n) + g(n)$ 和 $f(g(n))$ 都是单调递增的。

(2)因为 $f(n)$ 和 $g(n)$ 都是非负的,所以有: $$ f(n_1) \cdot g(n_1) \leqslant f(n_2) \cdot g(n_1) \leqslant f(n_2) \cdot g(n_2) $$

3.2-2

$$ \begin{aligned} a^{\log_{b}{c}} & = (c^{\log_{c}{a}})^{\log_{b}{c}} \\ & = c^{\log_{c}{a} \cdot {\log_{b}{c}}} \\ & = c^{\frac{\log_{c}{a}}{\log_{c}{b}}} \\ & = c^{\log_{b}{a}} \end{aligned} $$

3.2-3

(1)证明 $\lg(n!) = \Theta(n \lg n)$:

$$ \begin{aligned} \lg(n!) & = \lg\left(\sqrt{2\pi n}\left(\frac{n}{e}\right)^n\left(1 + \Theta\left(\frac{1}{n}\right)\right)\right) \\ & = \lg\sqrt{2\pi n } + \lg\Big(\frac{n}{e}\Big)^n + \lg\left(1+\Theta\left(\frac{1}{n}\right)\right) \\ & = \Theta(\sqrt n) + n\lg{\frac{n}{e}} + \lg\left(\Theta(1) + \Theta\left(\frac{1}{n}\right)\right) \\ & = \Theta(\sqrt n) + \Theta(n\lg n) + \Theta\left(\frac{1}{n}\right) \\ & = \Theta(n\lg n) \end{aligned} $$

(2)证明 $n! = \omega(2^n)$:

$$ \begin{aligned} \lim_{n \to \infty} \frac{2^n}{n!} & = \lim_{n \to \infty} \frac{2^n}{\sqrt{2 \pi n} \left(\frac{n}{e}\right)^n \left(1 + \Theta\left(\frac{1}{n}\right)\right)} \\ & = \lim_{n \to \infty} \frac{1}{\sqrt{2 \pi n} \left(1 + \Theta\left(\frac{1}{n}\right)\right)} \left(\frac{2e}{n}\right)^n \\ & \leqslant \lim_{n \to \infty} \left(\frac{2e}{n}\right)^n \\ & \leqslant \lim_{n \to \infty} \frac{1}{2^n} = 0 & \text{for $n > 4e$} \end{aligned} $$
证明 $n! = o(n^n)$:
$$ \begin{aligned} \lim_{n \to \infty} \frac{n^n}{n!} & = \lim_{n \to \infty} \frac{n^n}{\sqrt{2 \pi n} \left(\frac{n}{e}\right)^n \left(1 + \Theta\left(\frac{1}{n}\right)\right)} \\ & = \lim_{n \to \infty} \frac{e^n}{\sqrt{2 \pi n} \left(1 + \Theta\left(\frac{1}{n}\right)\right)} \\ & = \lim_{n \to \infty} O\left(\frac{1}{\sqrt n}\right)e^n \\ & \geqslant \lim_{n \to \infty} \frac{e^n}{c\sqrt n} & \text{(for some constant $c > 0$)} \\ & \geqslant \lim_{n \to \infty} \frac{e^n}{cn} \\ & = \lim_{n \to \infty} \frac{e^n}{c} = \infty \end{aligned} $$

3.2-4 $\star$

(1)如果 $f(n)$ 是多项式有界的,则存在常量 $c$,$k$,$n_0$ 使得对所有 $n \geqslant n_0$,有 $f(n) \leqslant cn^k$。因此 $\lg(f(n)) \leqslant kc \lg n$,即 $\lg(f(n)) = O(\lg n)$。所以如果 $\lg(f(n)) = O(\lg n)$,那么 $f(n)$ 就是多项式有界的。

因为 $\lg(n!) = \Theta(n \lg n)$,$\lceil \lg n \rceil = \Theta(\lg n)$,得:

$$ \begin{aligned} \lg(\lceil \lg n \rceil!) & = \Theta(\lceil \lg n \rceil \lg \lceil \lg n \rceil) \\ & = \Theta(\lg n \lg\lg n) \\ & = \omega(\lg n) \\ & \ne O(\lg n) \end{aligned} $$
所以 $\lceil \lg n \rceil!$ 不是多项式有界的。

(2)同样按照(1)中的分析,可得:

$$ \begin{aligned} \lg(\lceil \lg\lg n \rceil!) & = \Theta(\lceil \lg\lg n \rceil \lg \lceil \lg\lg n \rceil) \\ & = \Theta(\lg\lg n\lg\lg\lg n) \\ & = o((\lg\lg n)^2) \\ & = o(\lg^2(\lg n)) \\ & = o(\lg n) \\ & = O(\lg n) \end{aligned} $$

3.2-5 $\star$

$$ \begin{aligned} \lim_{n \to \infty} \frac{\lg(\lg^*n)}{\lg^*(\lg n)} & = \lim_{n \to \infty} \frac{\lg(\lg^* 2^n)}{\lg^*(\lg 2^n)} \\ & = \lim_{n \to \infty} \frac{\lg(1 + \lg^* n)}{\lg^* n} \\ & = \lim_{n \to \infty} \frac{\lg(1 + n)}{n} \\ & = \lim_{n \to \infty} \frac{1}{1 + n} \\ & = 0 \end{aligned} $$

所以 $\lg^{*}(\lg n)$ 更大。

3.2-6

$$ \begin{aligned} \phi^2 & = \left(\frac{1 + \sqrt 5}{2}\right)^2 = \frac{6 + 2\sqrt 5}{4} = 1 + \frac{1 + \sqrt 5}{2} = 1 + \phi \\ \hat\phi^2 & = \left(\frac{1 - \sqrt 5}{2}\right)^2 = \frac{6 - 2\sqrt 5}{4} = 1 + \frac{1 - \sqrt 5}{2} = 1 + \hat\phi \end{aligned} $$

3.2-7

基本情况:对于 $i = 0$,有: $$ \frac{\phi^0 - \hat\phi^0}{\sqrt 5} = \frac{1 - 1}{\sqrt 5} = 0 = F_0 $$ 对于 $i = 1$,有: $$ \frac{\phi^1 - \hat\phi^1}{\sqrt 5} = \frac{(1 + \sqrt 5) - (1 - \sqrt 5)}{2 \sqrt 5} = 1 = F_1 $$ 假设 $F_{i - 1} = \cfrac{\phi^{i - 1} - \hat\phi^{i - 1}}{\sqrt 5}$ 和 $F_{i - 2} = \cfrac{\phi^{i - 2} - \hat\phi^{i - 2}}{\sqrt 5}$ 成立,则:

$$ \begin{aligned} F_i & = F_{i - 1} + F_{i - 2} \\ & = \frac{\phi^{i - 1} - \hat\phi^{i - 1}}{\sqrt 5} + \frac{\phi^{i - 2} - \hat\phi^{i - 2}}{\sqrt 5} \\ & = \frac{\phi^{i - 2}(\phi + 1) - \hat\phi^{i - 2}(\hat\phi + 1)}{\sqrt 5} \\ & = \frac{\phi^{i - 2}\phi^2 - \hat\phi^{i - 2}\hat\phi^2}{\sqrt 5} \\ & = \frac{\phi^i - \hat\phi^i}{\sqrt 5} \end{aligned} $$

3.2-8

利用 $\Theta$ 记号的对称性,可得:

$$ k \ln k = \Theta(n) \Rightarrow n = \Theta(k \ln k) $$

则:

$$ \ln n = \Theta(\ln(k \ln k)) = \Theta(\ln k + \ln\ln k) = \Theta(\ln k) $$

从而:

$$ \cfrac{n}{\ln n} = \cfrac{\Theta(k \ln k)}{\Theta(\ln k)} = \Theta\left({\cfrac{k \ln k}{\ln k}}\right) = \Theta(k) $$

再利用对称性,得:

$$ \cfrac{n}{\ln n} = \Theta(k) \Rightarrow k = \Theta\left(\cfrac{n}{\ln n}\right) $$

思考题

3-1

a. 需要选择 $c$ 使得:

$$ \sum\limits_{i = 0}^d a_i n^i = a_d n^d + a_{d - 1}n^{d - 1} + \cdots + a_1n + a_0 \leqslant cn^d $$

不等式两边除以 $n^d$,得: $$ c \geqslant a_d + \frac{a_{d - 1}}n + \frac{a_{d - 2}}{n^2} + \cdots + \frac{a_0}{n^d} $$ 令 $c = a_d + b$,则:

$$ \begin{aligned} a_d + b & \geqslant a_d + \frac{a_{d - 1}}n + \frac{a_{d - 2}}{n^2} + \cdots + \frac{a_0}{n^d} \\ b & \geqslant \frac{a_{d - 1}}n + \frac{a_{d - 2}}{n^2} + \cdots + \frac{a_0}{n^d} \end{aligned} $$
若令 $b = 1$,则可得 $n_0$ 的值: $$ n_0 = \max(da_{d - 1}, d\sqrt{a_{d - 2}}, \dots, d\sqrt[d]{a_0}) $$ 对于 $n \geqslant n_0$: $$ p(n) \leqslant cn^d $$ 即 $O(n^d)$ 的定义。故当 $k \geqslant d$,$p(n) = O(n^k)$。

b. 令 a 中的 $b = -1$,同理可得 $\Omega$ 记号的定义。

c. 综合 a 和 b 可得 $\Theta$ 记号的定义。

d. 同理。

e. 同理。

3-2

$A$$B$$O$$o$$\Omega$$\omega$$\Theta$
$\lg^k n$$n^{\epsilon}$yesyesnonono
$n^k$$c^n$yesyesnonono
$\sqrt{n}$$n^{\sin n}$nonononono
$2^n$$2^{n / 2}$nonoyesyesno
$n^{\lg c}$$c^{\lg n}$yesnoyesnoyes
$\lg(n!)$$\lg(n^n)$yesnoyesnoyes

3-3

a.

$$ \begin{array}{ll} 2^{2^{n + 1}}, & \\ 2^{2^n}, & \\ (n + 1)!, & \\ n!, & \\ e^n, & \\ n\cdot 2^n, & \\ 2^n, & \\ (3 / 2)^n, & \\ (\lg n)^{\lg n} = n^{\lg\lg n}, & \\ (\lg n)!, & \\ n^3, & \\ n^2 = 4^{\lg n}, & \\ n\lg n \text{ and } \lg(n!), & \\ n = 2^{\lg n}, & \\ (\sqrt 2)^{\lg n}\quad (= \sqrt n), & \\ 2^{\sqrt{2\lg n}}, & \\ \lg^2 n, & \\ \ln n, & \\ \sqrt{\lg n}, & \\ \ln\ln n, & \\ 2^{\lg^*n}, & \\ \lg^*n \text{ and } \lg^*(\lg n), & \\ \lg(\lg^*n), & \\ n^{1 / \lg n}\quad (= 2) \text{ and } 1. & \end{array} $$
b.
$$ f(n) = \begin{cases} 2^{2^{n + 2}} & \text{if $n$ is even}, \\ 0 & \text{if $n$ is odd}. \end{cases} $$

3-4

a. 不成立。如 $n = O(n^2)$,但 $n^2 \ne O(n)$。

b. 不成立。如 $n^2 + n \ne \Theta(\min(n^2, n)) = \Theta(n)$。

c. 成立。因为对 $n \geqslant n_0$ 有 $f(n) \geqslant 1$。

$$ \exists c, n_0: \forall n \geqslant n_0, 0 \leqslant f(n) \leqslant cg(n). $$

可得:

$$ 0 \leqslant \lg f(n) \leqslant \lg(cg(n)) = \lg c + \lg(g(n)) $$

现在需要证明存在常量 $c’$ 使得 $\lg(f(n)) \leqslant c’ \lg(g(n))$。

因为 $\lg(g(n)) \geqslant 1$,所以: $$ c’ = \frac{\lg c + \lg(g(n))}{\lg(g(n))} = \frac{\lg c}{\lg(g(n))} + 1 \leqslant \lg c + 1 $$ 常量 $c’$ 存在,故命题成立。

d. 不成立。如 $2n = O(n)$,但 $2^{2n} = 4^n \ne O(2^n)$。

e. 成立。当 $f(n) \geqslant 1$ 时,对所有 $n \geqslant 1$ 来说 $0 \leqslant f(n) \leqslant cf^2(n)$ 是平凡的。

f. 成立。首先有 $0 \leqslant f(n) \leqslant cg(n)$,需要证明存在常量 $c’$ 使得 $0 \leqslant c’ f(n) \leqslant g(n)$。当 $c’ = \cfrac{1}{c}$ 时明显成立。

g. 不成立。令 $f(n) = 2^n$,则需要证明下面的不等式成立:

$$ \exists c_1, c_2, n_0: \forall n \geqslant n_0, 0 \leqslant c_1 \cdot 2^{n / 2} \leqslant 2^n \leqslant c_2 \cdot 2^{n / 2}. $$

不等式同除以 $2^{n / 2}$,得: $$ c_1 \leqslant 2^{n / 2} \leqslant c_2 $$ 因为 $c_2$ 为常量,对任意大的 $n$,不等式不可能成立。

h. 成立。令 $g(n) = o(f(n))$,有: $$ \exists c, n_0: \forall n \geqslant n_0, 0 \leqslant g(n) < cf(n). $$ 需要证明: $$ \exists c_1, c_2, n_0: \forall n \geqslant n_0, 0 \leqslant c_1f(n) \leqslant f(n) + g(n) \leqslant c_2f(n). $$ 令 $c_1 = 1$,$c_2 = c + 1$,不等式成立。

3-5

a.

$$ f(n) = \begin{cases} O(g(n)) \text{ and } \mathop \Omega \limits^\infty(g(n)) & \text{if $f(n) = \Theta(g(n))$}, \\ O(g(n)) & \text{if $0 \leqslant f(n) \leqslant cg(n)$}, \\ \mathop \Omega \limits^\infty(g(n)) & \text{if $0 \leqslant cg(n) \leqslant f(n)$, 对无穷多的整数 $n$}. \end{cases} $$
b. 优点:可以刻画所有函数之间的关系。

缺点:刻画不够精确。

c. 对任意两个函数 $f(n)$ 和 $g(n)$,如果 $f(n) = \Theta(g(n))$,有:

$$ \begin{aligned} f(n) & = O'(g(n)) \\ f(n) & = \Omega(g(n)) \\ \end{aligned} $$

反之则不成立。

d. $\tilde\Omega$ 记号的定义:

$$ \begin{aligned} \tilde\Omega(g(n)) = \{f(n): &\ 存在正常量\ c, k\ 和\ n_0\ 使得对所有\ n \geqslant n_0\ 有 \\ & 0 \leqslant cg(n)\lg^k(n) \leqslant f(n)\}. \end{aligned} $$
$\tilde\Theta$ 记号的定义: $$ \begin{aligned} \tilde{\Theta}(g(n)) = \{f(n): &\ 存在正常量\ c_1, c_2, k_1, k_2\ 和\ n_0\ 使得对所有\ n \geqslant n_0\ 有 \\ & 0 \leqslant c_1 g(n) \lg^{k_1}(n) \leqslant f(n) \leqslant c_2g (n) \lg^{k_2}(n) \}. \end{aligned} $$ 对任意两个函数 $f(n)$ 和 $g(n)$,有: $$ f(n) = \tilde\Theta(g(n)) $$ 当且仅当: $$ f(n) = \tilde O(g(n))\quad \text{and}\quad f(n) = \tilde\Omega(g(n)) $$

3-6

$f(n)$$c$$f_c^*(n)$
$n-1$0$\Theta(n)$
$\lg n$1$\Theta(\lg^* n)$
$n / 2$1$\Theta(\lg n)$
$n / 2$2$\Theta(\lg n)$
$\sqrt n$2$\Theta(\lg \lg n)$
$\sqrt n$1NA
$n^{1 / 3}$2$\Theta(\log_3 \lg n)$
$n / \lg n$2$\omega(\lg \lg n)$,$o(\lg n)$

参考答案:https://github.com/walkccc/CLRS。