(递归式例子)对下列每个递归式,给出T(n)T(n)T(n)的渐近上界和下界。假定n≤2n ≤ 2n≤2时T(n)T(n)T(n)是常数。给出尽量紧确的界,并验证其正确性。
a. T(n)=2T(n/2)+n4T(n)=2T(n/2)+n^4T(n)=2T(n/2)+n4
b. T(n)=T(7n/10)+nT(n)=T(7n/10)+nT(n)=T(7n/10)+n
c. T(n)=16T(n/4)+n2T(n)=16T(n/4)+n^2T(n)=16T(n/4)+n2
d. T(n)=7T(n/3)+n2T(n)=7T(n/3)+n^2T(n)=7T(n/3)+n2
e. T(n)=7T(n/2)+n2T(n)=7T(n/2)+n^2T(n)=7T(n/2)+n2
f. T(n)=2T(n/4)+nT(n)=2T(n/4)+\sqrt{n}T(n)=2T(n/4)+n
g. T(n)=T(n−2)+n2T(n)=T(n-2)+n^2T(n)=T(n−2)+n2
解
a.
应用主定理,根据递归式有a=2,b=2,f(n)=n4a = 2, b = 2,f(n) = n^4a=2,b=2,f(n)=n4,所以有nlogba=nlog22=nn^{{\rm log}_b a}=n^{{\rm log}_22}=nnlogba=nlog22=n。于是有f(n)=n4=Ω(n1+ε)=Ω(nlogba+ε)f(n)=n^4=Ω(n^{1+ε})=Ω(n^{{\rm log}_ba+ε})f(n)=n4=Ω(n1+ε)=Ω(nlogba+ε),其中ε=3ε = 3ε=3。并且当1/8≤c<11/8 ≤ c < 11/8≤c<1时,有af(n/b)=2f(n/2)=2•(n/2)4=n4/8≤cf(n)=cn4af(n/b) = 2f(n/2) = 2•(n/2)^4 = n^4/8 ≤ cf(n) = cn^4af(n/b)=2f(n/2)=2•(n/2)4=n4/8≤cf(n)=cn4。因此,可以应用主定理情况3,于是T(n)=Θ(f(n))=Θ(n4)T(n) = Θ(f(n)) = Θ(n^4)T(n)=Θ(f(n))=Θ(n4)。
b.
应用主定理,根据递归式有a=1,b=10/7,f(n)=na = 1, b = 10/7,f(n) = na=1,b=10/7,f(n)=n,所以有nlogba=nlog10/71=n0=1n^{{\rm log}_ba}=n^{{\rm log}_{10/7}1}=n^0=1nlogba=nlog10/71=n0=1。于是有f(n)=n=Ω(n0+ε)=Ω(nlogba+ε)f(n)=n=Ω(n^{0+ε})=Ω(n^{{\rm log}_ba+ε})f(n)=n=Ω(n0+ε)=Ω(nlogba+ε),其中ε=1ε = 1ε=1。并且当7/10≤c<17/10 ≤ c < 17/10≤c<1时,有af(n/b)=f(7n/10)=7n/10≤cf(n)=cnaf(n/b) = f(7n/10) = 7n/10 ≤ cf(n) = cnaf(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)=n2a = 16, b = 4,f(n) = n^2a=16,b=4,f(n)=n2,所以有nlogba=nlog416=n2n^{{\rm log}_ba}=n^{{\rm log}_416}=n^2nlogba=nlog416=n2。于是有f(n)=n2=Θ(n2)=Θ(nlogba)f(n)=n^2=Θ(n^2 )=Θ(n^{{\rm log}_ba} )f(n)=n2=Θ(n2)=Θ(nlogba)。因此,可以应用主定理情况2,于是T(n)=Θ(nlogba•lgn)=Θ(n2lgn)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)=n2a = 7, b = 3,f(n) = n^2a=7,b=3,f(n)=n2,所以有nlogba=nlog37n^{{\rm log}_ba}=n^{{\rm log}_37}nlogba=nlog37。于是有f(n)=n2=Ω(nlog37+ε)f(n)=n^2=Ω(n^{{\rm log}_37+ε})f(n)=n2=Ω(nlog37+ε),其中ε=0.228ε = 0.228ε=0.228。并且当7/9≤c<17/9 ≤ c < 17/9≤c<1时,有af(n/b)=7f(n/3)=7•(n/3)2=7n2/9≤cf(n)=cn2af(n/b) = 7f(n/3) = 7•(n/3)^2 = 7n^2/9 ≤ cf(n) = cn^2af(n/b)=7f(n/3)=7•(n/3)2=7n2/9≤cf(n)=cn2。因此,可以应用主定理情况3,于是T(n)=Θ(f(n))=Θ(n2)T(n) = Θ(f(n)) = Θ(n^2)T(n)=Θ(f(n))=Θ(n2)。
e.
应用主定理,根据递归式有a=7,b=2,f(n)=n2a = 7, b = 2,f(n) = n^2a=7,b=2,f(n)=n2,所以有nlogba=nlg7n^{{\rm log}_ba}=n^{{\rm lg}7}nlogba=nlg7。于是有f(n)=n2=Θ(n2)=O(nlg7−ε)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)=Θ(nlogba)=Θ(nlg7)T(n)=Θ(n^{{\rm log}_ba})=Θ(n^{{\rm lg}7})T(n)=Θ(nlogba)=Θ(nlg7)。
f.
应用主定理,根据递归式有a=2,b=4,f(n)=n=n1/2a = 2, b = 4,f(n)=\sqrt{n}=n^{1/2}a=2,b=4,f(n)=n=n1/2,所以有nlogba=nlog42=n1/2n^{{\rm log}_ba}=n^{{\rm log}_42}=n^{1/2}nlogba=nlog42=n1/2。于是有f(n)=n1/2=Θ(n1/2)=Θ(nlogba)f(n)=n^{1/2}=Θ(n^{1/2})=Θ(n^{{\rm log}_ba})f(n)=n1/2=Θ(n1/2)=Θ(nlogba)。因此,可以应用主定理情况2,于是T(n)=Θ(nlogba•lgn)=Θ(n1/2lgn)=Θ(nlgn)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.
本题不能应用主定理,而需要采用递归树方法。考虑nnn为偶数的情况,画出递归树如下。

递归树一共有n/2n/2n/2层,每层均只有一个结点。假设叶结点深度为iii,那么有n−2i=2n − 2i = 2n−2i=2,于是得到i=(n−2)/2i = (n−2)/2i=(n−2)/2,即叶结点深度为(n−2)/2(n−2)/2(n−2)/2。除叶结点外,深度为iii的结点产生的代价为(n−2i)2(n−2i)^2(n−2i)2。将各层代价加起来,得到
T(n)=∑i=0(n−4)/2(n−2i)2+Θ(1)=Θ(n3)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)
nnn为奇数的情况是类似的,这里不再做分析。
算法导论 — 思考题4-1 递归式例子
最新推荐文章于 2026-06-17 12:11:02 发布
3821

被折叠的 条评论
为什么被折叠?



