算法练习题
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