算法练习题
1. 证明对任意常实数aaa和bbb,其中b>0b>0b>0有(n+a)b=Θ(nb){(n+a)}^b=\Theta(n^b)(n+a)b=Θ(nb)
解:
依题,对于∀b>0,(n+a)b=θ(nb)∀b>0,(n+a)^b=θ(n^b )∀b>0,(n+a)b=θ(nb)都有:
当a>0a>0a>0时,nb<(n+a)b<2b∗nbn^b<(n+a)^b<2^b*n^bnb<(n+a)b<2b∗nb
即c1=1,c2=2bc_1=1,c_2=2^bc1=1,c2=2b
同理有当a<0a<0a<0时,2−b∗nb<(n+a)b<nb2^{-b}*n^b<(n+a)^b<n^b2−b∗nb<(n+a)b<nb
即c1=2−b,c2=1c_1=2^{-b},c_2=1c1=2−b,c2=1
满足(n+a)b=θ(nb)(n+a)^b=θ(n^b )(n+a)b=θ(nb)的定义,故得证
2. 解释为什么“算法AAA的运行时间至少是O(n2)O(n^2)O(n2)”这句话是无意义的
解:因为时间复杂度O(n2)O(n^2 )O(n2)只代表时间随数据量规模的增加变化程度,并不指任何具体运行时间。且O(n2)O(n^2 )O(n2)描述了时间变化程度的上界,而至少描述了下界。综上两条,“算法AAA的运行时间至少是O(n2)O(n^2 )O(n2)”这一表述是无意义的。
3. 2(n+1)=O(2n)2^{(n+1)}=O(2^n)2(n+1)=O(2n)成立吗?22n=O(2n)2^{2n}=O(2^n)22n=O(2n)成立吗?
解: 2(n+1)=O(2n)2^{(n+1)}=O(2^n )2(n+1)=O(2n)成立, 22n=O(2n)2^{2n}=O(2^n )22n=O(2n)不成立
4. 证明limn→+∞n!2πn(ne)n=1\lim\limits_{n \rightarrow +\infty} \frac{n!}{\sqrt{2\pi n{(\frac{n}{e})}^n}}=1n→+∞lim2πn(en)nn!=1
解:
不妨设
an=n!n(n+12)e−na_n=\frac{n!}{n^{(n+\frac{1}{2})} e^{-n} }an=n(n+21)e−nn!
则有:
anan+1=(n+1)n+32nn+12(n+1)e=1e(1+1n)n(1+12)12\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
所以:
anan+1>1\frac{a_n}{a_{n+1}}>1an+1an>1
即:
an>an+1a_n>a_{n+1}an>an+1
故ana_nan单调递减,依积分放缩有:
lnn!>(n+12)lnn−n\lnn!>(n+\frac{1}{2}) \lnn-nlnn!>(n+21)lnn−n
即:
n!>n(n+12)e−nn!>n^{(n+\frac{1}{2})} e^{-n}n!>n(n+21)e−n
因此有:
an>1a_n>1an>1
因此ana_nan极限存在,不妨设:
A=limn→+∞an=limn→+∞n!n(n+12)e−nA=\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=limn→+∞[(2n)!!(2n−1)!!]22n+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=limn→+∞[(2n)!!(2n)!!(2n)!!]22n+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=limn→+∞24n[(n!)2(2n)!]22n+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=limn→+∞24n[(An(n+12)e−n)2A(2n)2n+12e−2n]22n+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=limn→+∞24n(2−2n−12An)22n+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=limn→+∞24n(2−2n−12An)22n+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=limn→+∞24nA22−4n−1∗n2n+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=A24\frac{\pi}{2}=\frac{A^2}{4}2π=4A2
解得:
A=2πA=\sqrt{2\pi}A=2π
因此:
limn→+∞n!n(n+12)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π
即:
limn→+∞n!2πn(ne)n=1\lim\limits_{n \rightarrow +\infty} \frac{n!}{\sqrt{2\pi n{(\frac{n}{e})}^n}}=1n→+∞lim2πn(en)nn!=1
故得证
5. 证明n!=ω(2n)n!=ω(2^n)n!=ω(2n)
即证明:
limn→+∞2nn!=0\lim\limits_{n \rightarrow +\infty} \frac{2^n}{n!}=0n→+∞limn!2n=0
因为
limn→+∞2nn!=21∗22∗23∗...∗2n−2∗2n−1∗2n\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≤limn→+∞2nn!≤2∗limn→+∞(23)n<00\le \lim\limits_{n \rightarrow +\infty} \frac{2^n}{n!}\le 2*\lim\limits_{n \rightarrow +\infty} (\frac{2}{3})^n <00≤n→+∞limn!2n≤2∗n→+∞lim(32)n<0
依夹逼定理:
limn→+∞2nn!=0\lim\limits_{n \rightarrow +\infty} \frac{2^n}{n!}=0n→+∞limn!2n=0
即n!=ω(2n)n!=ω(2^n)n!=ω(2n)
故得证。
6. 证明n!=O(nn)n!=O(n^n )n!=O(nn)
即证明:
limn→+∞n!nn=0\lim\limits_{n \rightarrow +\infty} \frac{n!}{n^n}=0n→+∞limnnn!=0
展开并化简得:
limn→+∞n!nn=1n∗2n∗3n∗...∗n−2n∗n−1n∗nn\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≤limn→+∞n!nn=1n∗2n∗3n∗...∗n−2n∗n−1n∗nn≤limn→+∞1n=00\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}=00≤n→+∞limnnn!=n1∗n2∗n3∗...∗nn−2∗nn−1∗nn≤n→+∞limn1=0
依夹逼定理:
limn→+∞n!nn=0\lim\limits_{n \rightarrow +\infty} \frac{n!}{n^n}=0n→+∞limnnn!=0
即n!=O(nn)n!=O(n^n )n!=O(nn)
故得证。
7. 为下表中的每对表达式(A,B)(A,B)(A,B)指出AAA是否是BBB的OOO、ooo、Ω\OmegaΩ、ω\omegaω或Θ\ThetaΘ。假设k≥1,ε>0k\ge1,\varepsilon \gt0k≥1,ε>0且c>1c\gt1c>1均为常量。回答应该以表格的形式将是或否写在每个空格中。
AAA | BBB | OOO | ooo | ΩΩΩ | ωωω | Θ\ThetaΘ |
---|---|---|---|---|---|---|
lgkn\lg^knlgkn | ncn^cnc | 是 | 是 | 否 | 否 | 否 |
nkn^knk | cnc^ncn | 是 | 是 | 否 | 否 | 否 |
n\sqrt{n}n | nsinnn^{\sinn}nsinn | 否 | 否 | 否 | 否 | 否 |
2n2^n2n | 2n/22^{n/2}2n/2 | 否 | 否 | 是 | 是 | 否 |
nlgcn^{\lgc}nlgc | clgnc^{\lgn }clgn | 是 | 否 | 是 | 否 | 是 |
lgn!\lgn!lgn! | lgnn\lg{n^n }lgnn | 是 | 否 | 是 | 否 | 是 |
8. 根据增长率来对下列函数排序;即找出函数的一种排序g1,g2,...,g30g_1,g_2,...,g_{30}g1,g2,...,g30,使g1=Ω(g2)g_1=\Omega(g_2)g1=Ω(g2),g2=Ω(g3)g_2=\Omega(g_3)g2=Ω(g3),.........,g29=Ω(g30)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),2lg⋅n2^{\lg\cdot n}2lg⋅n,2lgn\sqrt{2}^{\lg n}2lgn,n2n^2n2,n!n!n!,(lgn)!(\lg n)!(lgn)!,(32)n(\frac{3}{2})^n(23)n,n3n^3n3,lg2n\lg^2nlg2n,lg(n!)\lg(n!)lg(n!),22n2^{2^n}22n,n1/lgnn^{1/\lg n}n1/lgn,lnlnn\ln\ln nlnlnn,lg⋅n\lg\cdot nlg⋅n,n∗2nn*2^nn∗2n,nlglgnn^{\lg\lg n}nlglgn,lnn\ln nlnn,111,2lgn2^{\lg n}2lgn,(lgn)lgn(\lg n)^{\lg n}(lgn)lgn,ene^nen,4lgn4^{\lg n}4lgn,(n+1)!(n+1)!(n+1)!,lgn\sqrt{\lg n}lgn,lg⋅(lgn)\lg\cdot (\lg n)lg⋅(lgn),22lgn2^{\sqrt{2\lg n}}22lgn,nnn,2n2^n2n,nlgnn\lg nnlgn,22n+12^{2^{n+1}}22n+1
解:
22n+1>22n>(n+1)!>n!>en>n∗2n>2n>(32)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>12^{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}>122n+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