《算法导论(原书第3版)》第3章部分题目解答
第3章 函数的增长
3.1 渐进记号
3.1-1
\(\because\)f(n)与g(n)为渐进非负函数
\(\therefore \exists n_0\),当n>\(n_0\)时,
\(0\leq f(n)\leq max(f(n),g(n)), 0\leq g(n)\leq max(f(n),g(n))\)
两式相加,得\(0\leq (f(n)+g(n))/2\leq max(f(n),g(n))\)
而\(max(f(n),g(n))\leq f(n)+g(n))\)
\(\therefore 0\leq (f(n)+g(n))/2\leq max(f(n),g(n))\leq f(n)+g(n)\)
根据定义有 max(f(n),g(n)) = \(\Theta (f(n)+g(n))\)
3.1-5
根据定义,要使得f(n) = \(\Theta (g(n))\)
需要\(\exists c_1,c_2,n_0\)使得对于所有 \(n\geq n_0\),有\(0\leq c_1g(n)\leq f(n) \leq c_2g(n)\)
要使得\(f(n) = O(g(n)), f(n) = \Omega(g(n))\),分别有
\(\exists c3,n_1\)使得对于所有\(n\geq n_1\),有 \(f(n)\leq c_3f(n)\)
\(\exists c4,n_2\)使得对于所有\(n\geq n_2\),有 \(f(n)\leq c_4f(n)\)
充分性:
若\(f(n) = O(g(n)), f(n) = \Omega(g(n))\)同时满足
当\(n\geq max(n_1,n_2)\)时,有\(0\leq c_4g(n)\leq f(n) \leq c_3g(n)\)
根据定义,有f(n) = \(\Theta (g(n))\)
必要性:
若$f(n) = \(\Theta (g(n))\)
当\(n\geq n_0\)时,有 \(0\leq c_1g(n)\leq f(n)\leq c_2g(n)\)
即\(0\leq c_1g(n)\leq f(n), f(n)\leq c_2g(n)\)
根据定义,有f(n) = O(g(n)) 且 f(n) = \(\Omega (g(n))\)
3-1
d.
\(lim_{n->\infty }\frac{p(n)}{n^k} = lim_{n->\infty }\frac{\sum^d_{i=0}a_in^i}{n^k} = lim_{n->\infty }\frac{d!a_d}{n^k} = 0\)
\(\therefore \exists n_0,\) 当\(n>n_0\)时,对于任意c>0,有\(cn^k>\sum ^d_{i=0}a_in^i\)
根据定义,有\(p(n) = o(n^k)\)
3-2
| 序号 | A | B | O | o | \(\Omega\) | \(\omega\) | \(\Theta\) |
|---|---|---|---|---|---|---|---|
| a. | \(lg^kn\) | \(n^\varepsilon\) | x | x | o | o | x |
| b. | \(n^k\) | \(c^n\) | x | x | o | o | x |
| c. | \(\sqrt{n}\) | \(c^n\) | x | x | x | x | x |
| d. | \(2^n\) | \(2^{n/2}\) | o | o | x | x | x |
| e. | \(n^{lgc}\) | \(c^{lgn}\) | o | x | o | x | o |
| f. | lg(n!) | \(lg(n^n)\) | o | x | o | x | o |
| a,b,c,d显然 |
e:
\(lim_{n->\infty}\frac{ n^{lgc} }{ c^{lgn} }\)
=\(lim_{n->\infty}\frac{n^{log_nc/log_n10}}{c^{lgn}}\)
=\(lim_{n->\infty}\frac{n^{1/log_n10}}{c^{lgn}}\)
= 1
所以 \(n^{lgc} = \Theta(c^{lgn})\)
f:
斯特林近似公式(3.18):
\(n! = \sqrt{2\pi n}(\frac{n}{e})^n(1+\Theta(\frac{1}{n}))\)
\(lim_{n->\infty}\frac{lg(n!)}{lg(n^n)}\)
= \(lim_{n->\infty}(lg( \sqrt{2\pi n}(\frac{n}{e})^n)) / nlgn\)
= \(lim_{n->\infty}(\frac{1}{2}lgn + nlgn)/nlgn\)
= 3/2
所以 \(lg(n!)=lg(n^n)\)
思考题
3-4
a.
False.\(f(n) = n, g(n) = n^2\)
b.
False.\(f(n) = n, g(n) = n^2\)
c.
True.
因为\(f(n) = O(g(n))\)
所以\(\exists n_0, c>0\),当\(n>n_0\)时,有\(0\leq f(n)\leq cg(n)\)
因为\(\exists n_1\),当\(n>n_1\)时,有\(lg(g(n))\geq 1\)
且 \(f(n)\geq 1\)
所以当\(n>max(n_0,n_1)\)时
\(0<1\leq lg(f(n))\leq lgc+lg(g(n))\)
不妨取\(c>10\),则
\(0\leq lg(f(n))\leq lgc+lg(g(n))\leq lgc+lgclg(g(n))=(lgc+1)lg(g(n))\)
所以对于\(n>max(n_0,n_1)\),存在常数\(c_1\),使得\(0\leq lg(f(n))\leq c_1lg(g(n))\)
根据定义,有lg(f(n)) = O(lg(g(n))),得证
d.
False. \(f(n) = 2n, g(n) = n\)
e.
False. \(f(n)=\frac{1}{n}\)
f.
True.
因为\(f(n) = O(g(n))\)
\(\exists n_0,c>0\),使得当\(n>n_0\),有\(0\leq f(n)\leq cg(n)\)
即\(0\leq \frac{1}{c}f(n)\leq g(n)\)
即\(\exists n_0\),使得当\(n>n_0\),有\(0\leq c_1f(n)\leq g(n) (c_1 = \frac{1}{c}\)
根据定义,有\(g(n) = \Omega(f(n))\)
g.
False. \(f(n) = 2^n\)
h.
True.
\(\exists n_0\),使得当\(n>n_0\),有
\(0\leq o(f(n))<f(n)\)
又\(\frac{1}{2}\leq f(n)\leq 2f(n)\)
所以\(\frac{1}{2}f(n)\leq f(n)+o(f(n))\leq 2f(n)\)
根据定义,有\(f(n)+o(f(n))=\Theta(f(n))\)

浙公网安备 33010602011771号