算法導論課后習題解析 第三章


3.1-1
分情況討論
當$f(n) \ge g(n)$時,$max(f(n), g(n))=f(n)$,存在$c_1=\frac 12,c_2=1,n_0>0$使得 $$0 < c_1(f(n)+g(n)) \le f(n) \le c_2(f(n)+g(n)) 對於所有n \ge n_0$$ 同理可證當$g(n) > f(n)$的情況


3.1-2
$(n+a)^b = n^b + c_1 n^{b-1} + c_2 n^{b-2} + \cdots + a^b=\theta (n^b)$


3.1-3
大O表示法用來表示一個算法復雜度的上界,而“至少”一詞用來形容下界,所以這句話的意思是該算法復雜度的上界只要不小於$O(n^2)$即可,相當於沒有說明算法的復雜度的界限,沒有意義。


3.1-4
$2^{n+1} = O(2^n)$
證明:存在$c=2, n_0>0$使得 $$0 \le 2^{n+1} \le c2^n 對於所有n \ge n_0$$ $2^{2n} \not = O(2^n)$
證明:假設存在$c,n_0$使得 $$\eqalign{ & 0 \le 2^{2n} \le c2^n 對於所有n \ge n_0 \\ & \Rightarrow 2^n * 2^n \le c 2^n \\ & \Rightarrow 2^n \le c }$$ 由於不存在常數c使得等式成立,故產生矛盾,得證。


3.1-5
利用定義就可以直接證明


3.1-6
最壞情況下復雜度為$O(g(n))$說明所有情況時間復雜度為$O(g(n))$,最好情況下時間復雜度為$\Theta(g(n))$說明所有情況時間復雜度為$\Omega(g(n))$,根據定理3.1得算法時間復雜度為$\Theta (g(n))$


3.1-7
$f(n)=o(g(n))$說明對於任意正常數$c,n_0$,對於所有的$n \ge n_0$都有$$0 \le f(n) < cg(n) 對於所有n \ge n_0$$ 這時假設$f(n)=\omega (g(n))$,說明對於任意正常數$c,n_0$,對於所有的$n \ge n_0$都有$$0 \le cg(n) < f(n)$$ 然而這樣的常數c是存在的,故產生矛盾,可得$o(g(n)) \cap \omega (g(n)) = \Phi$。


3.1-8
$$\eqalign{\Omega(g(m, n))= \{ f(m, n): & 存在大於零的常數c,n_0,m_0 \cr & 使得 0 \le cg(n,m) \le f(n, m) \cr & 對於所有n \ge n_0 或 m \ge m_0 \}}$$ $$\eqalign{\Theta(g(m, n))=\{f(m, n): & 存在大於零的常數c_1,c_2,n_0,m_0 \cr & 使得0\le c_1g(n,m) \le f(n, m) \le c_2g(n,m) \cr & 對於所有n \ge n_0 或 m \ge m_0 \} }$$


3.2-1
由於f(n)和g(n)單調遞增,所以對於任意$x_1 < x_2$,都有$$f(x_1) < f(x_2)$$ $$g(x_1) < g(x_2)$$所以$$f(x_1)+g(x_1) < f(x_2)+g(x_2)$$ $$f(g(x_1)) < f(g(x_2))$$ 如果當f(x)和g(x)都非負時顯然有$$f(x_1)*g(x_1) < f(x_2)*g(x_2)$$


3.2-2
$$\lg {a^{\log_bc}}=\log_bc \lg a=\frac {\lg a \lg c} {\lg b}$$ $$\lg {c^{\log_ba}}=\log_ba \lg c=\frac {\lg a \lg c} {\lg b}$$ $$\Rightarrow a^{\log_bc} = c^{\log_ba}$$


3.2-3
證明$\lg {(n!)} = \Theta (n \lg n)$: $$\lg {n!} = \sum_{i=1}^n{\lg i} < \sum_{i=1}^n{\lg n} = n \lg n$$ $$\sum_{i=1}^n{\lg i} = \sum_{i=1}^{n/2} {[\lg i + \lg {(n-i)}]} = \sum_{i=1}^{n/2} {[\lg {i (n-i)}]} > \sum_{i=1}^{n/2} {\lg {\frac {n^2}{4}}} = n \lg n - n = \frac 12 n \lg n$$ $$\Rightarrow \lg {(n!)} = \Theta (n \lg n)$$ 證明$n! = \omega (2^n)$: $$\because 當n > 4時,i (n-i) > 2^2$$ $$\therefore n! = \prod_{i=1}^{n/2} {i (n-i)} > \prod_{i=1}^{n/2} {2^2} = 2^n$$ $$\therefore n! = \omega (2^n)$$ 證明$n! = o (n^n)$: $$\because 當n > 1時,n! = \prod_{i=1}^n i < \prod_{i=1}^n n = n^n$$ $$\therefore n! = o (n^n)$$


3.2-4
證明$f(n)$是否多項式有界等價於證明$\lg {f(n)} = O (\lg n)$,這是因為如果$f(n)$多項式有界,則存在正常數$c,k,n_0$使得對於所有的$n > n_0$都有$f(n) < c n^k$,即$\lg {f(n)} < k c \lg n$,所以$\lg {f(n)} = O {\lg n}$,反之亦然。
對於$\lceil \lg n \rceil !$我們有 $$\lg {(\lceil \lg n \rceil !)} = \Theta (\lceil \lg n \rceil \lg {\lceil \lg n \rceil}) = \Theta (\lg n \lg {\lg n}) = \omega (\lg n)$$ $\lceil \lg n \rceil !$ 非多項式有界

對於 $ \lceil \lg {\lg n} \rceil ! $ 我們有 $$\eqalign { & \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 n)} $$ $ \lceil \lg {\lg n} \rceil ! $ 多項式有界


3.2-5
$$\lg^* {\lg n} = \lg^* n - 1 > \lg {\lg^* n},當\lg^* n > 2時$$


3.2-6
$$\phi ^2 = (\frac {1+\sqrt 5} {2})^2 = \frac {3 + \sqrt5} {2} = \phi + 1$$ $$\hat {\phi} ^2 = (\frac {1-\sqrt 5} {2})^2 = \frac {3 - \sqrt5} {2} = \hat {\phi} + 1$$


3.2-7
證明:
當i = 0時, $$\frac {\phi ^0 - \hat {\phi}^0}{\sqrt 5} = 0 = F_0$$ 當i = 1時, $$\frac {\phi ^1 - \hat {\phi}^1}{\sqrt 5} = 1 = F_1$$ 假設當i = k-1和i = k時都滿足公式,則當i = k+1時 $$F_{k+1}=F_k + F_{k-1} = \frac {(\phi ^k + \phi ^{k-1}) - (\hat {\phi}^k+\hat {\phi}^{k-1})}{\sqrt 5}=\frac {\phi^{k-1}(\phi + 1)-\hat {\phi}^{k-1}(\hat {\phi} + 1)}{\sqrt 5}=\frac {\phi ^{k+1} - \hat {\phi}^{k+1}}{\sqrt 5}$$


3.2-8
這題要用到性質$g(n) = \Theta (f(n)) \Leftrightarrow f(n) = \Theta (g(n))$,所以$k \ln k = \Theta (n) \Leftrightarrow n = \Theta (k \ln k)$, 要證$k = \Theta (n / \ln n)$等價於證$n / \ln n = \Theta (k)$,代入條件得 $$\frac {n}{\ln n} = \Theta (\frac {k \ln k} {\ln {(k \ln k})}) = \Theta (\frac {k \ln k} {\ln k}) = \Theta (k)$$


3-1
a. $$P(n) = \sum_{i=0}^d {a_i n^i} = n^d \sum_{i=0}^d {a_i n^{i-d}} \le n^d \sum_{i=0}^d {a_i} \le cn^k$$ b. $$P(n) = \sum_{i=0}^d {a_i n^i} \ge n^d \ge cn^d$$ c. 由前兩問可證。
d. 同a
e. 同b


3-2

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


3-3
a. $$2^{2^{n+1}} > 2^{2^n} > (n+1)! > n! > e^n > n 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= \lg {(n!)} > n = 2^{\lg n} > (\sqrt 2)^{\lg n} = \sqrt n > 2^{\sqrt {2\lg n}} > \lg^2 n > \ln n$$ $$ > \sqrt {\lg n} > \ln {\ln n} > 2^{\lg^* n} > \lg^* n = \lg^*{(\lg n)} > \lg {(\lg^* n)} > n^{1/ \lg n} = 2 = 1$$ b. 非連續性函數或者震盪函數就能滿足要求,比如 $$f(n)=\cases { n, & $-1^n > 0$ \\ 0, & ${-1}^n < 0$ }$$


3-4
a. 錯誤,舉個反例$n=O(n^2)$,而$n^2 \ne O(n)$
b. 錯誤,舉個反例$n + n^2 = O(n^2) \ne O(\min (n, n^2)) = O(n)$
c. 正確,$f(n)=O(g(n))$表明存在正常數$c, n_0$對所有$n \ge n_0$都有$f(n) \le c g(n)$,所以也有$\lg {f(n)} \le \lg {(c g(n))}$,得證
d. 正確,$f(n)=O(g(n))$表明存在正常數$c, n_0$對所有$n \ge n_0$都有$f(n) \le c g(n)$,所以也有$2^{f(n)} \le 2^{c g(n)}$,得證
e. 正確,同理可證。
f. 正確,定義直接證明。
g. 錯誤,舉個反例$2^n = \Theta(2^n) = \omega(2^{n/2})$
h. 正確,$g(n)=o(f(n))$表明存在正常數$n_0$對於任意正常數$c$,對所有$n \ge n_0$都有$g(n) < f(n)$,所以對於所有$n \ge n_0$都有$f(n)+o(f(n))) < f(n) + f(n) = 2f(n)$,得證。


3-5
a. 只要證明$f(n)=O(g(n))$的補集包含於$f(n)=\overset{\infty}{\Omega} (g(n))$中即可。$f(n)=O(g(n))$表示存在正常數$c, n_0$對所有$n \ge n_0$都有$f(n) \le c g(n)$,那么他的補集是不存在常數$c, n_0$對所有$n \ge n_0$都有$f(n) \le c g(n)$,顯然包含於$f(n)=\overset{\infty}{\Omega} (g(n))$中,因為如果存在正常數c對有限個n的話成立的話,就能找到一個$n_0$大於有限個n中最大的那個,使得$f(n) \le c g(n)$成立。但是如果換成$\Omega (g(n))$的話,3-3b中的例子就是個反例。
b. 用符號$\Omega (f(n))$可以保證在n足夠大的情況下算法復雜度都不低於$f(n)$,即最好的情況下也不低於$f(n)$。而使用符號$\overset{\infty}{\Omega} (f(n))$則表示該算法在很多時候復雜度都不低於$f(n)$,但在某些比較好的情況下有可能會低於$f(n)$。
c. 沒有變化?求指教
d. $$\eqalign { \tilde \Omega (g(n)) = \{ f(n) : & \exists c,k,n_0 > 0 對\,\forall n \ge n_0 \\ & 有0 \le c g(n) \lg^k(n) \le f(n)\} }$$ $$\eqalign { \tilde \Theta (g(n)) = \{ f(n) : & \exists c_1,c_2,k,n_0 > 0 對\,\forall n \ge n_0 \\ & 有0 \le c_1 g(n) \lg^k(n) \le f(n) \le c_2 g(n) \lg^k(n) \} }$$ 定理3.1由定義可知。


3-6
a. $\Theta (n)$
b. $\Theta (\lg^* n)$
c. $\Theta (\lg n)$
d. $\Theta (\lg n)$
e. $\Theta (\lg {\lg n})$
f. $\infty$
g. $\Theta (\lg {\lg n})$
h. 不會,求指教



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM