《算法导论(原书第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))\)

posted @ 2019-12-31 10:29  baoliang  阅读(631)  评论(0)    收藏  举报