(递归式例子)对下列每个递归式,给出
T
(
n
)
T(n)
T(n)的渐近上界和下界。假定
n
≤
2
n ≤ 2
n≤2时
T
(
n
)
T(n)
T(n)是常数。给出尽量紧确的界,并验证其正确性。
a.
T
(
n
)
=
2
T
(
n
/
2
)
+
n
4
T(n)=2T(n/2)+n^4
T(n)=2T(n/2)+n4
b.
T
(
n
)
=
T
(
7
n
/
10
)
+
n
T(n)=T(7n/10)+n
T(n)=T(7n/10)+n
c.
T
(
n
)
=
16
T
(
n
/
4
)
+
n
2
T(n)=16T(n/4)+n^2
T(n)=16T(n/4)+n2
d.
T
(
n
)
=
7
T
(
n
/
3
)
+
n
2
T(n)=7T(n/3)+n^2
T(n)=7T(n/3)+n2
e.
T
(
n
)
=
7
T
(
n
/
2
)
+
n
2
T(n)=7T(n/2)+n^2
T(n)=7T(n/2)+n2
f.
T
(
n
)
=
2
T
(
n
/
4
)
+
n
T(n)=2T(n/4)+\sqrt{n}
T(n)=2T(n/4)+n
g.
T
(
n
)
=
T
(
n
−
2
)
+
n
2
T(n)=T(n-2)+n^2
T(n)=T(n−2)+n2
解
a.
应用主定理,根据递归式有
a
=
2
,
b
=
2
,
f
(
n
)
=
n
4
a = 2, b = 2,f(n) = n^4
a=2,b=2,f(n)=n4,所以有
n
l
o
g
b
a
=
n
l
o
g
2
2
=
n
n^{{\rm log}_b a}=n^{{\rm log}_22}=n
nlogba=nlog22=n。于是有
f
(
n
)
=
n
4
=
Ω
(
n
1
+
ε
)
=
Ω
(
n
l
o
g
b
a
+
ε
)
f(n)=n^4=Ω(n^{1+ε})=Ω(n^{{\rm log}_ba+ε})
f(n)=n4=Ω(n1+ε)=Ω(nlogba+ε),其中
ε
=
3
ε = 3
ε=3。并且当
1
/
8
≤
c
<
1
1/8 ≤ c < 1
1/8≤c<1时,有
a
f
(
n
/
b
)
=
2
f
(
n
/
2
)
=
2
•
(
n
/
2
)
4
=
n
4
/
8
≤
c
f
(
n
)
=
c
n
4
af(n/b) = 2f(n/2) = 2•(n/2)^4 = n^4/8 ≤ cf(n) = cn^4
af(n/b)=2f(n/2)=2•(n/2)4=n4/8≤cf(n)=cn4。因此,可以应用主定理情况3,于是
T
(
n
)
=
Θ
(
f
(
n
)
)
=
Θ
(
n
4
)
T(n) = Θ(f(n)) = Θ(n^4)
T(n)=Θ(f(n))=Θ(n4)。
b.
应用主定理,根据递归式有
a
=
1
,
b
=
10
/
7
,
f
(
n
)
=
n
a = 1, b = 10/7,f(n) = n
a=1,b=10/7,f(n)=n,所以有
n
l
o
g
b
a
=
n
l
o
g
10
/
7
1
=
n
0
=
1
n^{{\rm log}_ba}=n^{{\rm log}_{10/7}1}=n^0=1
nlogba=nlog10/71=n0=1。于是有
f
(
n
)
=
n
=
Ω
(
n
0
+
ε
)
=
Ω
(
n
l
o
g
b
a
+
ε
)
f(n)=n=Ω(n^{0+ε})=Ω(n^{{\rm log}_ba+ε})
f(n)=n=Ω(n0+ε)=Ω(nlogba+ε),其中
ε
=
1
ε = 1
ε=1。并且当
7
/
10
≤
c
<
1
7/10 ≤ c < 1
7/10≤c<1时,有
a
f
(
n
/
b
)
=
f
(
7
n
/
10
)
=
7
n
/
10
≤
c
f
(
n
)
=
c
n
af(n/b) = f(7n/10) = 7n/10 ≤ cf(n) = cn
af(n/b)=f(7n/10)=7n/10≤cf(n)=cn。因此,可以应用主定理情况3,于是
T
(
n
)
=
Θ
(
f
(
n
)
)
=
Θ
(
n
)
T(n) = Θ(f(n)) = Θ(n)
T(n)=Θ(f(n))=Θ(n)。
c.
应用主定理,根据递归式有
a
=
16
,
b
=
4
,
f
(
n
)
=
n
2
a = 16, b = 4,f(n) = n^2
a=16,b=4,f(n)=n2,所以有
n
l
o
g
b
a
=
n
l
o
g
4
16
=
n
2
n^{{\rm log}_ba}=n^{{\rm log}_416}=n^2
nlogba=nlog416=n2。于是有
f
(
n
)
=
n
2
=
Θ
(
n
2
)
=
Θ
(
n
l
o
g
b
a
)
f(n)=n^2=Θ(n^2 )=Θ(n^{{\rm log}_ba} )
f(n)=n2=Θ(n2)=Θ(nlogba)。因此,可以应用主定理情况2,于是
T
(
n
)
=
Θ
(
n
l
o
g
b
a
•
l
g
n
)
=
Θ
(
n
2
l
g
n
)
T(n)=Θ(n^{{\rm log}_ba}•{\rm lg}n)=Θ(n^2{\rm lg}n)
T(n)=Θ(nlogba•lgn)=Θ(n2lgn)。
d.
应用主定理,根据递归式有
a
=
7
,
b
=
3
,
f
(
n
)
=
n
2
a = 7, b = 3,f(n) = n^2
a=7,b=3,f(n)=n2,所以有
n
l
o
g
b
a
=
n
l
o
g
3
7
n^{{\rm log}_ba}=n^{{\rm log}_37}
nlogba=nlog37。于是有
f
(
n
)
=
n
2
=
Ω
(
n
l
o
g
3
7
+
ε
)
f(n)=n^2=Ω(n^{{\rm log}_37+ε})
f(n)=n2=Ω(nlog37+ε),其中
ε
=
0.228
ε = 0.228
ε=0.228。并且当
7
/
9
≤
c
<
1
7/9 ≤ c < 1
7/9≤c<1时,有
a
f
(
n
/
b
)
=
7
f
(
n
/
3
)
=
7
•
(
n
/
3
)
2
=
7
n
2
/
9
≤
c
f
(
n
)
=
c
n
2
af(n/b) = 7f(n/3) = 7•(n/3)^2 = 7n^2/9 ≤ cf(n) = cn^2
af(n/b)=7f(n/3)=7•(n/3)2=7n2/9≤cf(n)=cn2。因此,可以应用主定理情况3,于是
T
(
n
)
=
Θ
(
f
(
n
)
)
=
Θ
(
n
2
)
T(n) = Θ(f(n)) = Θ(n^2)
T(n)=Θ(f(n))=Θ(n2)。
e.
应用主定理,根据递归式有
a
=
7
,
b
=
2
,
f
(
n
)
=
n
2
a = 7, b = 2,f(n) = n^2
a=7,b=2,f(n)=n2,所以有
n
l
o
g
b
a
=
n
l
g
7
n^{{\rm log}_ba}=n^{{\rm lg}7}
nlogba=nlg7。于是有
f
(
n
)
=
n
2
=
Θ
(
n
2
)
=
O
(
n
l
g
7
−
ε
)
f(n)=n^2=Θ(n^2)=O(n^{{\rm lg}7-ε})
f(n)=n2=Θ(n2)=O(nlg7−ε),其中
ε
=
0.807
ε = 0.807
ε=0.807。因此,可以应用主定理情况1,于是
T
(
n
)
=
Θ
(
n
l
o
g
b
a
)
=
Θ
(
n
l
g
7
)
T(n)=Θ(n^{{\rm log}_ba})=Θ(n^{{\rm lg}7})
T(n)=Θ(nlogba)=Θ(nlg7)。
f.
应用主定理,根据递归式有
a
=
2
,
b
=
4
,
f
(
n
)
=
n
=
n
1
/
2
a = 2, b = 4,f(n)=\sqrt{n}=n^{1/2}
a=2,b=4,f(n)=n=n1/2,所以有
n
l
o
g
b
a
=
n
l
o
g
4
2
=
n
1
/
2
n^{{\rm log}_ba}=n^{{\rm log}_42}=n^{1/2}
nlogba=nlog42=n1/2。于是有
f
(
n
)
=
n
1
/
2
=
Θ
(
n
1
/
2
)
=
Θ
(
n
l
o
g
b
a
)
f(n)=n^{1/2}=Θ(n^{1/2})=Θ(n^{{\rm log}_ba})
f(n)=n1/2=Θ(n1/2)=Θ(nlogba)。因此,可以应用主定理情况2,于是
T
(
n
)
=
Θ
(
n
l
o
g
b
a
•
l
g
n
)
=
Θ
(
n
1
/
2
l
g
n
)
=
Θ
(
n
l
g
n
)
T(n)=Θ(n^{{\rm log}_ba}•{\rm lg}n)=Θ(n^{1/2}{\rm lg}n)=Θ(\sqrt{n}{\rm lg}n)
T(n)=Θ(nlogba•lgn)=Θ(n1/2lgn)=Θ(nlgn)。
g.
本题不能应用主定理,而需要采用递归树方法。考虑
n
n
n为偶数的情况,画出递归树如下。
递归树一共有
n
/
2
n/2
n/2层,每层均只有一个结点。假设叶结点深度为
i
i
i,那么有
n
−
2
i
=
2
n − 2i = 2
n−2i=2,于是得到
i
=
(
n
−
2
)
/
2
i = (n−2)/2
i=(n−2)/2,即叶结点深度为
(
n
−
2
)
/
2
(n−2)/2
(n−2)/2。除叶结点外,深度为
i
i
i的结点产生的代价为
(
n
−
2
i
)
2
(n−2i)^2
(n−2i)2。将各层代价加起来,得到
T
(
n
)
=
∑
i
=
0
(
n
−
4
)
/
2
(
n
−
2
i
)
2
+
Θ
(
1
)
=
Θ
(
n
3
)
T(n)=\sum\limits_{i=0}^{(n-4)/2}{(n-2i)^2} +Θ(1)=Θ(n^3)
T(n)=i=0∑(n−4)/2(n−2i)2+Θ(1)=Θ(n3)
n
n
n为奇数的情况是类似的,这里不再做分析。
算法导论 — 思考题4-1 递归式例子
最新推荐文章于 2023-03-02 16:52:35 发布