(根据渐近增长率排序)
a. 根据增长的阶来排序下面的函数,即求出满足
g
1
=
Ω
(
g
2
)
,
g
2
=
Ω
(
g
3
)
,
…
,
g
29
=
Ω
(
g
30
)
g_1 = Ω(g_2), g_2 = Ω(g_3), …, g_{29} = Ω(g_{30})
g1=Ω(g2),g2=Ω(g3),…,g29=Ω(g30)的函数的一种排序
g
1
,
g
2
,
…
,
g
30
g_1, g_2, …, g_{30}
g1,g2,…,g30。把你的表划分成等价类,使得函数
f
(
n
)
f(n)
f(n)和
g
(
n
)
g(n)
g(n)在相同类中当且仅当
f
(
n
)
=
Θ
(
g
(
n
)
)
f(n) = Θ(g(n))
f(n)=Θ(g(n))。
b. 给出非负函数
f
(
n
)
f(n)
f(n)的一个例子,使得对所有在(a)部分中的函数
g
i
(
n
)
g_i(n)
gi(n),
f
(
n
)
f(n)
f(n)既不是
O
(
g
i
(
n
)
)
O(g_i(n))
O(gi(n))也不是
Ω
(
g
i
(
n
)
)
Ω(g_i(n))
Ω(gi(n))。
解
a.
在下面的表格中,表格上层的函数比下层的函数增长要快,表格同一行中的函数互为
Θ
Θ
Θ关系。
一些简单的函数在这里就不做分析了,我们挑一些函数来分析。
(1)
g
2
(
n
)
=
2
2
n
g_2 (n)=2^{2^n}
g2(n)=22n和
g
3
(
n
)
=
(
n
+
1
)
!
g_3 (n)=(n+1)!
g3(n)=(n+1)!
先分析
g
3
(
n
)
g_3 (n)
g3(n),有
g
3
(
n
)
=
(
n
+
1
)
!
<
(
n
+
1
)
n
+
1
g_3 (n)=(n+1)!<(n+1)^{n+1}
g3(n)=(n+1)!<(n+1)n+1。令
f
3
(
n
)
=
(
n
+
1
)
n
+
1
f_3 (n)=(n+1)^{n+1}
f3(n)=(n+1)n+1,现在来比较
g
2
(
n
)
g_2 (n)
g2(n)和
f
3
(
n
)
f_3 (n)
f3(n)。直接比较二者很困难,我们分别对二者取复合对数。
l
g
l
g
(
g
2
(
n
)
)
=
l
g
l
g
(
2
2
n
)
=
l
g
(
2
n
)
=
n
{\rm lglg}(g_2(n))={\rm lglg}(2^{2^n})={\rm lg}(2^n)=n
lglg(g2(n))=lglg(22n)=lg(2n)=n
l
g
l
g
(
f
3
(
n
)
)
=
l
g
l
g
(
(
n
+
1
)
n
+
1
)
=
l
g
[
(
n
+
1
)
∙
l
g
(
n
+
1
)
]
=
l
g
(
n
+
1
)
+
l
g
l
g
(
n
+
1
)
<
2
l
g
(
n
+
1
)
{\rm lglg}(f_3(n))={\rm lglg}((n+1)^{n+1})={\rm lg}[(n+1)∙{\rm lg}(n+1)]={\rm lg}(n+1)+{\rm lglg}(n+1)<2{\rm lg}(n+1)
lglg(f3(n))=lglg((n+1)n+1)=lg[(n+1)∙lg(n+1)]=lg(n+1)+lglg(n+1)<2lg(n+1)
当
n
n
n足够大时,有
2
l
g
(
n
+
1
)
<
n
2{\rm lg}(n+1)<n
2lg(n+1)<n,故
l
g
l
g
(
f
3
(
n
)
)
<
l
g
l
g
(
g
2
(
n
)
)
{\rm lglg}(f_3(n))<{\rm lglg}(g_2 (n))
lglg(f3(n))<lglg(g2(n))。由于复合对数函数
l
g
l
g
(
x
)
{\rm lglg}(x)
lglg(x)是单调递增的,所以当
n
n
n足够大时,有
f
3
(
n
)
<
g
2
(
n
)
f_3(n)<g_2(n)
f3(n)<g2(n)。又由于
g
3
(
n
)
<
f
3
(
n
)
g_3(n)<f_3(n)
g3(n)<f3(n),所以当
n
n
n足够大时,有
g
3
(
n
)
<
g
2
(
n
)
g_3(n)<g_2(n)
g3(n)<g2(n),所以
g
2
(
n
)
=
Ω
(
g
3
(
n
)
)
g_2(n)=Ω(g_3(n))
g2(n)=Ω(g3(n))。
(2)
g
8
(
n
)
=
(
3
2
)
n
g_8 (n)=(\frac{3}{2})^n
g8(n)=(23)n和
g
9
(
n
)
=
(
l
g
n
)
l
g
n
g_9 (n)=({\rm lg}n)^{{\rm lg}n}
g9(n)=(lgn)lgn
同样直接比较二者很困难,我们分别对二者分取对数。
l
g
(
g
8
(
n
)
)
=
l
g
(
3
2
)
n
=
n
l
g
3
2
{\rm lg}(g_8(n))={\rm lg}(\frac{3}{2})^n=n{\rm lg}\frac{3}{2}
lg(g8(n))=lg(23)n=nlg23
l
g
(
g
9
(
n
)
)
=
l
g
(
(
l
g
n
)
l
g
n
)
=
l
g
n
∙
l
g
l
g
n
≤
l
g
2
n
{\rm lg}(g_9(n))={\rm lg}(({\rm lg}n)^{{\rm lg}n})={\rm lg}n∙{\rm lglg}n≤{\rm lg}^2n
lg(g9(n))=lg((lgn)lgn)=lgn∙lglgn≤lg2n
利用3.2节的结论
“
“
“任意多项式函数都比任意多对数函数增长要快
”
”
”,所以
l
g
2
n
=
o
(
n
l
g
3
2
)
{\rm lg}^2 n=o(n{\rm lg}\frac{3}{2})
lg2n=o(nlg23)。这说明,当
n
n
n足够大时,必然有
l
g
2
n
<
n
l
g
3
2
{\rm lg}^2n<n{\rm lg}\frac{3}{2}
lg2n<nlg23,即
l
g
(
g
9
(
n
)
)
<
l
g
(
g
8
(
n
)
)
{\rm lg}(g_9 (n))<{\rm lg}(g_8 (n))
lg(g9(n))<lg(g8(n))。由于对数函数是单调递增的,所以当
n
n
n足够大时,有
g
9
(
n
)
<
g
8
(
n
)
g_9 (n)<g_8 (n)
g9(n)<g8(n),所以
g
8
(
n
)
=
Ω
(
g
9
(
n
)
)
g_8 (n)=Ω(g_9 (n))
g8(n)=Ω(g9(n))。
(3)
g
11
(
n
)
=
(
l
g
n
)
!
g_{11}(n)=({\rm lg}n)!
g11(n)=(lgn)!和
g
12
(
n
)
=
n
3
g_{12}(n)=n^3
g12(n)=n3
利用习题3.2-4的结果“
⌈
l
g
n
⌉
!
⌈{\rm lg}n⌉!
⌈lgn⌉!不是多项式有界”,说明
(
l
g
n
)
!
({\rm lg}n)!
(lgn)!比多项式函数增长要快,而
g
12
(
n
)
g_{12} (n)
g12(n)刚好就是一个多项式函数。所以
g
11
(
n
)
=
Ω
(
g
12
(
n
)
)
g_{11} (n)=Ω(g_{12} (n))
g11(n)=Ω(g12(n))。
(4)
g
19
(
n
)
=
(
2
)
l
g
n
g_{19}(n)=(\sqrt{2})^{{\rm lg}n}
g19(n)=(2)lgn和
g
20
(
n
)
=
2
2
l
g
n
g_{20}(n)=2^{\sqrt{2{\rm lg}n}}
g20(n)=22lgn
还是分别对二者取对数进行分析。
l
g
(
g
19
(
n
)
)
=
l
g
(
(
2
)
l
g
n
)
=
l
g
n
∙
l
g
2
=
1
2
l
g
n
{\rm lg}(g_{19}(n))={\rm lg}((\sqrt{2})^{{\rm lg}n})={\rm lg}n∙lg\sqrt{2}=\frac{1}{2}{\rm lg}n
lg(g19(n))=lg((2)lgn)=lgn∙lg2=21lgn
l
g
(
g
20
(
n
)
)
=
l
g
(
2
2
l
g
n
)
=
2
l
g
n
=
2
∙
(
l
g
n
)
1
/
2
{\rm lg}(g_{20}(n))={\rm lg}(2^{\sqrt{2{\rm lg}n}})=\sqrt{2{\rm lg}n}=\sqrt{2}∙({\rm lg}n)^{1/2}
lg(g20(n))=lg(22lgn)=2lgn=2∙(lgn)1/2
如果令
m
=
l
g
n
m = {\rm lg}n
m=lgn,上面两个等式就变为
l
g
(
g
19
(
n
)
)
=
1
2
m
{\rm lg}(g_{19}(n))=\frac{1}{2}m
lg(g19(n))=21m和
l
g
(
g
20
(
n
)
)
=
2
∙
m
1
/
2
{\rm lg}(g_{20}(n))=\sqrt{2}∙m^{1/2}
lg(g20(n))=2∙m1/2。显然,当
m
m
m足够大时,必然有
1
2
m
>
2
∙
m
1
/
2
\frac{1}{2}m>\sqrt{2}∙m^{1/2}
21m>2∙m1/2,即
l
g
(
g
19
(
n
)
)
>
l
g
(
g
20
(
n
)
)
{\rm lg}(g_{19} (n))>{\rm lg}(g_{20} (n))
lg(g19(n))>lg(g20(n)),因为
m
m
m比
m
1
/
2
m^{1/2}
m1/2增长要快。由于对数函数是单调递增的,所以当
n
n
n足够大时,有
g
19
(
n
)
>
g
20
(
n
)
g_{19} (n)>g_{20} (n)
g19(n)>g20(n)。所以
g
19
(
n
)
=
Ω
(
g
20
(
n
)
)
g_{19} (n)=Ω(g_{20} (n))
g19(n)=Ω(g20(n))。
(5)
g
20
(
n
)
=
2
2
l
g
n
g_{20}(n)=2^{\sqrt{2{\rm lg}n}}
g20(n)=22lgn和
g
21
(
n
)
=
l
g
2
n
g_{21} (n)={\rm lg}^2n
g21(n)=lg2n
依然对二者取对数进行分析。
l
g
(
g
20
(
n
)
)
=
l
g
(
2
2
l
g
n
)
=
2
l
g
n
=
2
∙
(
l
g
n
)
1
/
2
{\rm lg}(g_{20} (n))={\rm lg}(2^{\sqrt{2{\rm lg}n}})=\sqrt{2{\rm lg}n}=\sqrt{2}∙({\rm lg}n)^{1/2}
lg(g20(n))=lg(22lgn)=2lgn=2∙(lgn)1/2
l
g
(
g
21
(
n
)
)
=
l
g
(
l
g
2
n
)
=
2
l
g
l
g
n
{\rm lg}(g_{21} (n))={\rm lg}({\rm lg}^2n)=2{\rm lglg}n
lg(g21(n))=lg(lg2n)=2lglgn
令
m
=
l
g
n
m = {\rm lg}n
m=lgn,上面两个等式就变为
l
g
(
g
20
(
n
)
)
=
2
∙
m
1
/
2
{\rm lg}(g_{20} (n))=\sqrt{2}∙m^{1/2}
lg(g20(n))=2∙m1/2和
l
g
(
g
21
(
n
)
)
=
2
l
g
m
{\rm lg}(g_{21}(n))=2{\rm lg}m
lg(g21(n))=2lgm。利用3.2节的结论
“
“
“任意多项式函数都比任意多对数函数增长要快
”
”
”,可以得出当
m
m
m足够大时,必然有
2
∙
m
1
/
2
>
2
l
g
m
\sqrt{2}∙m^{1/2}>2{\rm lg}m
2∙m1/2>2lgm,即
l
g
(
g
20
(
n
)
)
>
l
g
(
g
21
(
n
)
)
{\rm lg}(g_{20} (n))>{\rm lg}(g_{21} (n))
lg(g20(n))>lg(g21(n))。由于对数函数是单调递增的,所以当
n
n
n足够大时,有
g
20
(
n
)
>
g
21
(
n
)
g_{20} (n)>g_{21} (n)
g20(n)>g21(n)。所以
g
20
(
n
)
=
Ω
(
g
21
(
n
)
)
g_{20} (n)=Ω(g_{21} (n))
g20(n)=Ω(g21(n))。
b.
比如下面这个函数。
算法导论 — 思考题3-3 根据渐近增长率排序
最新推荐文章于 2024-09-01 16:53:44 发布