算法练习题
1. 证明对任意常实数 a a a和 b b b,其中 b > 0 b>0 b>0有 ( n + a ) b = Θ ( n b ) {(n+a)}^b=\Theta(n^b) (n+a)b=Θ(nb)
解:
依题,对于 ∀ b > 0 , ( n + a ) b = θ ( n b ) ∀b>0,(n+a)^b=θ(n^b ) ∀b>0,(n+a)b=θ(nb)都有:
当 a > 0 a>0 a>0时, n b < ( n + a ) b < 2 b ∗ n b n^b<(n+a)^b<2^b*n^b nb<(n+a)b<2b∗nb
即 c 1 = 1 , c 2 = 2 b c_1=1,c_2=2^b c1=1,c2=2b
同理有当 a < 0 a<0 a<0时, 2 − b ∗ n b < ( n + a ) b < n b 2^{-b}*n^b<(n+a)^b<n^b 2−b∗nb<(n+a)b<nb
即 c 1 = 2 − b , c 2 = 1 c_1=2^{-b},c_2=1 c1=2−b,c2=1
满足 ( n + a ) b = θ ( n b ) (n+a)^b=θ(n^b ) (n+a)b=θ(nb)的定义,故得证
2. 解释为什么“算法 A A A的运行时间至少是 O ( n 2 ) O(n^2) O(n2)”这句话是无意义的
解:因为时间复杂度 O ( n 2 ) O(n^2 ) O(n2)只代表时间随数据量规模的增加变化程度,并不指任何具体运行时间。且 O ( n 2 ) O(n^2 ) O(n2)描述了时间变化程度的上界,而至少描述了下界。综上两条,“算法 A A A的运行时间至少是 O ( n 2 ) O(n^2 ) O(n2)”这一表述是无意义的。
3. 2 ( n + 1 ) = O ( 2 n ) 2^{(n+1)}=O(2^n) 2(n+1)=O(2n)成立吗? 2 2 n = O ( 2 n ) 2^{2n}=O(2^n) 22n=O(2n)成立吗?
解: 2 ( n + 1 ) = O ( 2 n ) 2^{(n+1)}=O(2^n ) 2(n+1)=O(2n)成立, 2 2 n = O ( 2 n ) 2^{2n}=O(2^n ) 22n=O(2n)不成立
4. 证明 lim n → + ∞ n ! 2 π n ( n e ) n = 1 \lim\limits_{n \rightarrow +\infty} \frac{n!}{\sqrt{2\pi n{(\frac{n}{e})}^n}}=1 n→+∞lim2πn(en)nn!=1
解:
不妨设
a n = n ! n ( n + 1 2 ) e − n a_n=\frac{n!}{n^{(n+\frac{1}{2})} e^{-n} } an=n(n+21)e−nn!
则有:
a n a n + 1 = ( n + 1 ) n + 3 2 n n + 1 2 ( n + 1 ) e = 1 e ( 1 + 1 n ) n ( 1 + 1 2 ) 1 2 \frac{a_n}{a_{n+1}} =\frac{
{(n+1)}^{n+\frac{3}{2}}}{n^{n+\frac{1}{2}}(n+1)e} =\frac{1}{e}(1+\frac{1}{n})^n(1+\frac{1}{2})^\frac{1}{2} an+1an=nn+21(n+1)e(n+1)n+23=e1(1+n1)n(1+21)21
所以:
a n a n + 1 > 1 \frac{a_n}{a_{n+1}}>1 an+1an>1
即:
a n > a n + 1 a_n>a_{n+1} an>an+1
故 a n a_n an单调递减,依积分放缩有:
ln n ! > ( n + 1 2 ) ln n − n \lnn!>(n+\frac{1}{2}) \lnn-n lnn!>(n+21)lnn−n
即:
n ! > n ( n + 1 2 ) e − n n!>n^{(n+\frac{1}{2})} e^{-n} n!>n(n+21)e−n
因此有:
a n > 1 a_n>1 an>1
因此 a n a_n an极限存在,不妨设:
A = lim n → + ∞ a n = lim n → + ∞ n ! n ( n + 1 2 ) e − n A=\lim\limits_{n \rightarrow +\infty}a_n=\lim\limits_{n \rightarrow +\infty}\frac{n!}{n^{(n+\frac{1}{2})} e^{-n} } A=n→+∞liman=n→+∞limn(n+21)e−nn!
依华里士公式有:
π 2 = lim n → + ∞ [ ( 2 n ) ! ! ( 2 n − 1 ) ! ! ] 2 2 n + 1 \frac{\pi}{2}=\lim\limits_{n \rightarrow +\infty}\frac{[\frac{(2n)!!}{(2n-1)!!}]^2}{2n+1} 2π=n→+∞lim2n+1[(2n−1)!!(2n)!!]2
依次化简得:
π 2 = lim n → + ∞ [ ( 2 n ) ! ! ( 2 n ) ! ! ( 2 n ) ! ! ] 2 2 n + 1 \frac{\pi}{2}=\lim\limits_{n \rightarrow +\infty}\frac{[\frac{(2n)!!(2n)!!}{(2n)!!}]^2}{2n+1} 2π=n→+∞lim2n+1[(2n)!!(2n)!!(2n)!!]2
π 2 = lim n → + ∞ 2 4 n [ ( n ! ) 2 ( 2 n ) ! ] 2 2 n + 1 \frac{\pi}{2}=\lim\limits_{n \rightarrow +\infty}\frac{2^{4n}[\frac{
{(n!)}^2}{(2n)!}]^2}{2n+1} 2π=n→+∞lim2n+124n[(2n)!(n!)2]2
π 2 = lim n → + ∞ 2 4 n [ ( A n ( n + 1 2 ) e − n ) 2 A ( 2 n ) 2 n + 1 2 e − 2 n ] 2 2 n + 1 \frac{\pi}{2}=\lim\limits_{n \rightarrow +\infty}\frac{2^{4n}[\frac{
{(An^{(n+\frac{1}{2})}e^{-n})}^2}{A(2n)^{2n+\frac{1}{2}}e^{-2n}}]^2}{2n+1} 2π=n→+∞lim2n+124n[A(2n)2n+21e−2n(An(n+21)e−n)2]2
π 2 = lim n → + ∞ 2 4 n ( 2 − 2 n − 1 2 A n ) 2 2 n + 1 \frac{\pi}{2}=\lim\limits_{n \rightarrow +\infty}\frac{2^{4n}(2^{-2n-\frac{1}{2}}A\sqrt{n})^2}{2n+1} 2π=n→+∞lim2n+124n(2−2n−21An)2
π 2 = lim n → + ∞ 2 4 n ( 2 − 2 n − 1 2 A n ) 2 2 n + 1 \frac{\pi}{2}=\lim\limits_{n \rightarrow +\infty}\frac{2^{4n}(2^{-2n-\frac{1}{2}}A\sqrt{n})^2}{2n+1} 2π=n→+∞lim2n+124n(2−2n−21An)2
π 2 = lim n → + ∞ 2 4 n A 2 2 − 4 n − 1 ∗ n 2 n + 1 \frac{\pi}{2}=\lim\limits_{n \rightarrow +\infty}\frac{2^{4n}A^22^{-4n-1}*n}{2n+1} 2π=n→+∞lim2n+124nA22−4n−1∗n
π 2 = A 2 4 \frac{\pi}{2}=\frac{A^2}{4} 2π=4A2
解得:
A = 2 π A=\sqrt{2\pi} A=2π
因此:
lim n → + ∞ n ! n ( n + 1 2 ) e − n = 2 π \lim\limits_{n \rightarrow +\infty}\frac{n!}{n^{(n+\frac{1}{2})} e^{-n} }=\sqrt{2\pi} n→+∞limn(n+21)e−nn!=2π
即:
lim n → + ∞ n ! 2 π n ( n e ) n = 1 \lim\limits_{n \rightarrow +\infty} \frac{n!}{\sqrt{2\pi n{(\frac{n}{e})}^n}}=1 n→+∞lim2πn(en)nn!=1
故得证
5. 证明 n ! = ω ( 2 n ) n!=ω(2^n) n!=ω(2n)
即证明:
lim n → + ∞ 2 n n ! = 0 \lim\limits_{n \rightarrow +\infty} \frac{2^n}{n!}=0 n→+∞limn!2n=0
因为
lim n → + ∞ 2 n n ! = 2 1 ∗ 2 2 ∗ 2 3 ∗ . . . ∗ 2 n − 2 ∗ 2 n − 1 ∗ 2 n \lim\limits_{n \rightarrow +\infty} \frac{2^n}{n!}=\frac{2}{1}*\frac{2}{2}*\frac{2}{3}*...*\frac{2}{n-2}*\frac{2}{n-1}*\frac{2}{n} n→+∞limn!2n=12∗22∗32∗...∗n−22∗n−12∗n2
则有
0 ≤ lim n → + ∞ 2 n n ! ≤ 2 ∗ lim n → + ∞ ( 2 3 ) n < 0 0\le \lim\limits_{n \rightarrow +\infty} \frac{2^n}{n!}\le 2*\lim\limits_{n \rightarrow +\infty} (\frac{2}{3})^n <0 0≤n→+∞limn!2n≤2∗n→+∞lim(32)n<0
依夹逼定理:
lim n → + ∞ 2 n n ! = 0 \lim\limits_{n \rightarrow +\infty} \frac{2^n}{n!}=0 n→+∞limn!2n=0
即 n ! = ω ( 2 n ) n!=ω(2^n) n!=ω(2n)
故得证。
6. 证明 n ! = O ( n n ) n!=O(n^n ) n!=O(nn)
即证明:
lim n → + ∞ n ! n n = 0 \lim\limits_{n \rightarrow +\infty} \frac{n!}{n^n}=0 n→+∞limnnn!=0
展开并化简得:
lim n → + ∞ n ! n n = 1 n ∗ 2 n ∗ 3 n ∗ . . . ∗ n − 2 n ∗ n − 1 n ∗ n n \lim\limits_{n \rightarrow +\infty} \frac{n!}{n^n}=\frac{1}{n}*\frac{2}{n}*\frac{3}{n}*...*\frac{n-2}{n}*\frac{n-1}{n}*\frac{n}{n} n→+∞limnnn!=n1∗n2∗n3∗...∗nn−2∗nn−1∗nn
易得:
0 ≤ lim n → + ∞ n ! n n = 1 n ∗ 2 n ∗ 3 n ∗ . . . ∗ n − 2 n ∗ n − 1 n ∗ n n ≤ lim n → + ∞ 1 n = 0 0\le \lim\limits_{n \rightarrow +\infty} \frac{n!}{n^n}=\frac{1}{n}*\frac{2}{n}*\frac{3}{n}*...*\frac{n-2}{n}*\frac{n-1}{n}*\frac{n}{n}\le \lim\limits_{n \rightarrow +\infty}\frac{1}{n}=0 0≤n→+∞limnnn!=n1∗n2∗n3∗...∗nn−2∗nn−1∗nn≤n→+∞limn1=0
依夹逼定理:
lim n → + ∞ n ! n n = 0 \lim\limits_{n \rightarrow +\infty} \frac{n!}{n^n}=0 n→+∞limnnn!=0
即 n ! = O ( n n ) n!=O(n^n ) n!=O(nn)
故得证。
7. 为下表中的每对表达式 ( A , B ) (A,B) (A,B)指出 A A A是否是 B B B的 O O O、 o o o、 Ω \Omega Ω、 ω \omega ω或 Θ \Theta Θ。假设 k ≥ 1 , ε > 0 k\ge1,\varepsilon \gt0 k≥1,ε>0且 c > 1 c\gt1 c>1均为常量。回答应该以表格的形式将是或否写在每个空格中。
A A A | B B B | O O O | o o o | Ω Ω Ω | ω ω ω | Θ \Theta Θ |
---|---|---|---|---|---|---|
lg k n \lg^kn lgkn | n c n^c nc | 是 | 是 | 否 | 否 | 否 |
n k n^k nk | c n c^n cn | 是 | 是 | 否 | 否 | 否 |
n \sqrt{n} n | n sin n n^{\sinn} nsinn | 否 | 否 | 否 | 否 | 否 |
2 n 2^n 2n | 2 n / 2 2^{n/2} 2n/2 | 否 | 否 | 是 | 是 | 否 |
n lg c n^{\lgc} nlgc | c lg n c^{\lgn } clgn | 是 | 否 | 是 | 否 | 是 |
lg n ! \lgn! lgn! | lg n n \lg{n^n } lgnn | 是 | 否 | 是 | 否 | 是 |
8. 根据增长率来对下列函数排序;即找出函数的一种排序 g 1 , g 2 , . . . , g 30 g_1,g_2,...,g_{30} g1,g2,...,g30,使 g 1 = Ω ( g 2 ) g_1=\Omega(g_2) g1=Ω(g2), g 2 = Ω ( g 3 ) g_2=\Omega(g_3) g2=Ω(g3), . . . ... ..., g 29 = Ω ( g 30 ) g_{29}=\Omega(g_{30}) g29=Ω(g30)。将该序列划分成等价类,使 f ( n ) f(n) f(n)和 g ( n ) g(n) g(n)在同一个等价类中当且仅当 f ( n ) = Θ ( g ( n ) ) ) f(n)=\Theta(g(n))) f(n)=Θ(g(n)))。
函数如下:
lg ( lg ⋅ n ) \lg(\lg\cdot n) lg(lg⋅n), 2 lg ⋅ n 2^{\lg\cdot n} 2lg⋅n, 2 lg n \sqrt{2}^{\lg n} 2lgn, n 2 n^2 n2, n ! n! n!, ( lg n ) ! (\lg n)! (lgn)!, ( 3 2 ) n (\frac{3}{2})^n (23)n, n 3 n^3 n3, lg 2 n \lg^2n lg2n, lg ( n ! ) \lg(n!) lg(n!), 2 2 n 2^{2^n} 22n, n 1 / lg n n^{1/\lg n} n1/lgn, ln ln n \ln\ln n lnlnn, lg ⋅ n \lg\cdot n lg⋅n, n ∗ 2 n n*2^n n∗2n, n lg lg n n^{\lg\lg n} nlglgn, ln n \ln n lnn, 1 1 1, 2 lg n 2^{\lg n} 2lgn, ( lg n ) lg n (\lg n)^{\lg n} (lgn)lgn, e n e^n en, 4 lg n 4^{\lg n} 4lgn, ( n + 1 ) ! (n+1)! (n+1)!, lg n \sqrt{\lg n} lgn, lg ⋅ ( lg n ) \lg\cdot (\lg n) lg⋅(lgn), 2 2 lg n 2^{\sqrt{2\lg n}} 22lgn, n n n, 2 n 2^n 2n, n lg n n\lg n nlgn, 2 2 n + 1 2^{2^{n+1}} 22n+1
解:
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 > 2 lg n > 2 2 lg n > lg 2 n > ln n > lg n > ln ln n > 2 lg ⋅ n > lg ⋅ n = lg ⋅ ( lg n ) > lg ( lg ⋅ n ) > n 1 / lg n > 1 2^{2^{n+1} }>2^{2^{n} }>(n+1)!>n!>e^n>n* 2^n>2^n>(\frac{3}{2})^n>(\lg n)^{\lg n} =n^{\lg\lg n} >(\lgn )!>n^3>n^2=4^{\lg n} >n\cdot \lg n=\lg(n!)> n=2^{\lg n }>\sqrt{2}^{\lg n}>2^{\sqrt{2\lg n}}>\lg^2n>\ln n>\sqrt{\lg n}>\ln\ln n>2^{\lg\cdot n}>\lg\cdot n=\lg\cdot(\lg n)>\lg(\lg\cdot n)>n^{1/\lg n}>1 22n+1>22n>(n+1)!>n!>en>n∗2n>2n>(23)n>(lgn)lgn=nlglgn>(lgn)!>n3>n2=4lgn>n⋅lgn=lg(n!)>n=2lgn>2lgn>22lgn>lg2n>lnn>lgn>lnlnn>2lg⋅n>lg⋅n=lg⋅(lgn)>lg(lg⋅n)>n1/lgn>1