算法导论 — 思考题4-3 更多的递归式例子

本文详细解析了多个递归式的渐近上界和下界,包括应用主定理、递归树方法及直接求解策略,涵盖复杂度分析的各种情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

更多的递归式例子)对下列每个递归式,给出T(n)T(n)T(n)的渐近上界和下界。假定对足够小的nnnT(n)T(n)T(n)是常数。给出尽量紧确的界,并验证其正确性。
  a. T(n)=4T(n/3)+nlgnT(n)=4T(n/3)+n{\rm lg}nT(n)=4T(n/3)+nlgn
  b. T(n)=3T(n/3)+n/lgnT(n)=3T(n/3)+n/{\rm lg}nT(n)=3T(n/3)+n/lgn
  c. T(n)=4T(n/2)+n2nT(n)=4T(n/2)+n^2\sqrt{n}T(n)=4T(n/2)+n2n
  d. T(n)=3T(n/3−2)+n/2T(n)=3T(n/3-2)+n/2T(n)=3T(n/32)+n/2
  e. T(n)=2T(n/2)+n/lgnT(n)=2T(n/2)+n/{\rm lg}nT(n)=2T(n/2)+n/lgn
  f. T(n)=T(n/2)+T(n/4)+T(n/8)+nT(n)=T(n/2)+T(n/4)+T(n/8)+nT(n)=T(n/2)+T(n/4)+T(n/8)+n
  g. T(n)=T(n−1)+1/nT(n)=T(n-1)+1/nT(n)=T(n1)+1/n
  h. T(n)=T(n−1)+lgnT(n)=T(n-1)+{\rm lg}nT(n)=T(n1)+lgn
  i. T(n)=T(n−2)+1/lgnT(n)=T(n-2)+1/{\rm lg}nT(n)=T(n2)+1/lgn
  j. T(n)=nT(n)+nT(n)=\sqrt{n}T(\sqrt{n})+nT(n)=nT(n)+n
  
  
  a. T(n)=4T(n/3)+nlgnT(n)=4T(n/3)+n{\rm lg}nT(n)=4T(n/3)+nlgn
  应用主定理,根据递归式有a=4a = 4a=4, b=3b = 3b=3f(n)=nlgnf(n) = n{\rm lg}nf(n)=nlgn,所以有nlogba=nlog34n^{{\rm log}_b a}=n^{{\rm log}_3 4}nlogba=nlog34。于是有f(n)=nlgn=O(nlog34−ε)=O(nlogba−ε)f(n)=n{\rm lg}n=O(n^{{\rm log}_3 4-ε})=O(n^{{\rm log}_b a-ε})f(n)=nlgn=O(nlog34ε)=O(nlogbaε),任取0<ε<log34−10<ε<{\rm log}_3 4-10<ε<log341即可。因此,可以应用主定理情况1,于是T(n)=Θ(nlogba)=Θ(nlog34)T(n)=Θ(n^{{\rm log}_b a})=Θ(n^{{\rm log}_3 4})T(n)=Θ(nlogba)=Θ(nlog34)
  
  b. T(n)=3T(n/3)+n/lgnT(n)=3T(n/3)+n/{\rm lg}nT(n)=3T(n/3)+n/lgn
  应用递归树方法,递归树如下图所示。
  在这里插入图片描述
  在递归树中,深度为iii的结点对应规模为n/3in/3^in/3i的子问题。当n/3i=1n/3^i = 1n/3i=1时,即i=log3ni = {\rm log}_3ni=log3n时,子问题规模变为111,这对应于叶结点T(1)T(1)T(1),因此叶结点的深度为log3n{\rm log}_3nlog3n
  每层的结点数都是上一层的333倍,因此深度为i的结点数为3i3^i3i。并且由于深度为iii的结点对应的子问题规模为n/3in/3^in/3i,故深度为iii的每个结点的代价为c(n/3i)/lg(n/3i)c(n/3^i)/{\rm lg}(n/3^i)c(n/3i)/lg(n/3i)。因此,除叶结点外,深度为iii的所有结点的代价之和为3i•(c(n/3i)/lg(n/3i))=cn/(lgn−i•lg3)3^i•(c(n/3^i)/{\rm lg}(n/3^i))=cn/({\rm lg}n-i•{\rm lg}3)3i(c(n/3i)/lg(n/3i))=cn/(lgnilg3)。又由于深度为iii的结点数为3i3^i3i,并且叶结点深度为log3n{\rm log}_3nlog3n,故叶结点一共有3log3n=n3^{{\rm log}_3n}=n3log3n=n个,于是所有叶结点的代价之和为Θ(n)Θ(n)Θ(n)
  现在将每一层的代价加起来,得到
  在这里插入图片描述
  代入法证明省略。
  
  c. T(n)=4T(n/2)+n2nT(n)=4T(n/2)+n^2\sqrt{n}T(n)=4T(n/2)+n2n
  应用主定理,根据递归式有a=4a = 4a=4, b=2b = 2b=2f(n)=n2n=n2.5f(n)=n^2\sqrt{n}=n^{2.5}f(n)=n2n=n2.5,所以有nlogba=nlog24=n2n^{{\rm log}_ba}=n^{{\rm log}_2 4}=n^2nlogba=nlog24=n2。于是有f(n)=n2.5=Ω(n2+ε)=Ω(nlogba+ε)f(n)=n^{2.5}=Ω(n^{2+ε})=Ω(n^{{\rm log}_b a+ε})f(n)=n2.5=Ω(n2+ε)=Ω(nlogba+ε),其中ε = 0.5。并且当1/2≤c<11/\sqrt{2}≤c<11/2c<1时,有af(n/b)=4f(n/2)=4•(n/2)2.5=n2.5/2≤cf(n)=cn2.5af(n/b)=4f(n/2)=4•(n/2)^{2.5}=n^{2.5}/\sqrt{2}≤cf(n)=cn^{2.5}af(n/b)=4f(n/2)=4(n/2)2.5=n2.5/2cf(n)=cn2.5。因此,可以应用主定理情况3,于是T(n)=Θ(f(n))=Θ(n2.5)T(n) = Θ(f(n)) = Θ(n^{2.5})T(n)=Θ(f(n))=Θ(n2.5)
  
  d. T(n)=3T(n/3−2)+n/2T(n)=3T(n/3-2)+n/2T(n)=3T(n/32)+n/2
  猜想这个递归式的解应该和递归式T(n)=3T(n/3)+n/2T(n)=3T(n/3)+n/2T(n)=3T(n/3)+n/2的解一致,现在用主方法求解这个新的递归式。根据新的递归式有a=3a = 3a=3, b=3b = 3b=3f(n)=n/2f(n) = n/2f(n)=n/2,所以有nlogba=nlog33=nn^{{\rm log}_b a}=n^{{\rm log}_3 3}=nnlogba=nlog33=n。于是有f(n)=n/2=Θ(n)=Θ(nlogba)f(n)=n/2=Θ(n)=Θ(n^{{\rm log}_b a})f(n)=n/2=Θ(n)=Θ(nlogba)。因此,可以应用主定理情况2,于是T(n)=Θ(nlogbalgn)=Θ(nlgn)T(n)=Θ(n^{{\rm log}_b a}{\rm lg}n)=Θ(n{\rm lg}n)T(n)=Θ(nlogbalgn)=Θ(nlgn)
  下面将这个结果代入原递归式进行验证。我们要证明的是:存在正常数c1c_1c1c2c_2c2,使得c1nlgn≤T(n)≤c2nlgnc_1n{\rm lg}n≤T(n)≤c_2n{\rm lg}nc1nlgnT(n)c2nlgn对足够大的nnn都成立。然而,直接证明c1nlgn≤T(n)≤c2nlgnc_1n{\rm lg}n≤T(n)≤c_2n{\rm lg}nc1nlgnT(n)c2nlgn很困难,我们不妨尝试证明c1(n+3)lg(n+3)≤T(n)≤c2(n+3)lg(n+3)c_1 (n+3){\rm lg}(n+3)≤T(n)≤c_2 (n+3){\rm lg}(n+3)c1(n+3)lg(n+3)T(n)c2(n+3)lg(n+3)
  (1) 证明存在正常数c1c_1c1,使得T(n)≥c1(n+3)lg(n+3)T(n)≥c_1(n+3){\rm lg}(n+3)T(n)c1(n+3)lg(n+3)对足够大的nnn都成立
  将归纳假设代入递归式得到
  在这里插入图片描述
  现在要选取合适的c1c_1c1,使得不等式c1(n+3)lg(n+3)−c1(n+3)lg3+n/2≥c1(n+3)lg(n+3)c_1 (n+3){\rm lg}(n+3)-c_1 (n+3){\rm lg}3+n/2≥c_1 (n+3){\rm lg}(n+3)c1(n+3)lg(n+3)c1(n+3)lg3+n/2c1(n+3)lg(n+3)成立。对这个不等式做一些变换。
  在这里插入图片描述
  显然,12(1+3/n)lg3\frac{1}{2(1+3/n){\rm lg}3}2(1+3/n)lg31是关于nnn的单调递增函数。为使递归式T(n)=3T(n/3−2)+n/2T(n)=3T(n/3-2)+n/2T(n)=3T(n/32)+n/2有意义,必须使n≥9n ≥ 9n9。当n=9n = 9n=9时,12(1+3/n)lg3\frac{1}{2(1+3/n){\rm lg}3}2(1+3/n)lg31取得最小值38lg3\frac{3}{8{\rm lg}3}8lg33。因此,只要取c1≤38lg3c_1 ≤ \frac{3}{8{\rm lg}3}c18lg33,就能使得不等式c1≤12(1+3/n)lg3c_1≤\frac{1}{2(1+3/n){\rm lg}3}c12(1+3/n)lg31成立,此时T(n)≥c1(n+3)lg(n+3)T(n)≥c_1 (n+3){\rm lg}(n+3)T(n)c1(n+3)lg(n+3)成立。
  (2) 证明存在正常数c2c_2c2,使得T(n)≤c2(n+3)lg(n+3)T(n)≤c_2 (n+3){\rm lg}(n+3)T(n)c2(n+3)lg(n+3)对足够大的nnn都成立
  证明过程与前文类似的分析,最终得到:只要取c2≥12lg3c_2 ≥ \frac{1}{2{\rm lg}3}c22lg31,就能使得不等式T(n)≤c2(n+3)lg(n+3)T(n)≤c_2 (n+3){\rm lg}(n+3)T(n)c2(n+3)lg(n+3)成立。具体证明过程就不赘述。
  
  e. T(n)=2T(n/2)+n/lgnT(n)=2T(n/2)+n/{\rm lg}nT(n)=2T(n/2)+n/lgn
  该递归式的求解过程与b类似,其解也为T(n)=Θ(nlglgn)T(n)=Θ(n{\rm lglg}n)T(n)=Θ(nlglgn)。具体求解过程就不赘述。
  
  f. T(n)=T(n/2)+T(n/4)+T(n/8)+nT(n)=T(n/2)+T(n/4)+T(n/8)+nT(n)=T(n/2)+T(n/4)+T(n/8)+n
  应用递归树方法。递归树如下图所示。
  在这里插入图片描述
  这不是一棵满二叉树。从第000层到第log8n{\rm log}_8 nlog8n层是满的,从第log8n+1{\rm log}_8 n+1log8n+1层到最底层是不满的。考虑从第000层到第log8n{\rm log}_8 nlog8n层的代价,有
  在这里插入图片描述
  因此,可以得到T(n)T(n)T(n)的下界为Ω(n)Ω(n)Ω(n)。我们猜测T(n)T(n)T(n)的上界也为O(n)O(n)O(n)。于是,我们猜测的解为T(n)=Θ(n)T(n) = Θ(n)T(n)=Θ(n)。下面将这个猜测代入原递归式进行验证。我们要证明的是:存在正常数c1c_1c1c2c_2c2,使得c1n≤T(n)≤c2nc_1 n≤T(n)≤c_2 nc1nT(n)c2n对足够大的nnn都成立。
  (1) 证明存在正常数c1c_1c1,使得T(n)≥c1nT(n)≥c_1 nT(n)c1n对足够大的nnn都成立
  将归纳假设代入递归式得到
  在这里插入图片描述
  现在要选取合适的c1c_1c1,使得不等式78c1n+n≥c1n\frac{7}{8} c_1 n+n≥c_1 n87c1n+nc1n成立。将这个不等式做一下变换。
  在这里插入图片描述
  显然,只要取c1≤8c_1 ≤ 8c18,就能使得不等式78c1n+n≥c1n\frac{7}{8} c_1 n+n≥c_1 n87c1n+nc1n成立,此时T(n)≥c1nT(n)≥c_1 nT(n)c1n成立。
  (2) 证明存在正常数c2c_2c2,使得T(n)≤c2nT(n)≤c_2 nT(n)c2n对足够大的nnn都成立
  证明过程与上文类似,最终得到:只要取c2≥8c_2 ≥ 8c28,就能使得不等式T(n)≤c2nT(n)≤c_2 nT(n)c2n成立。具体证明过程就不赘述。
  
  g. T(n)=T(n−1)+1/nT(n)=T(n-1)+1/nT(n)=T(n1)+1/n
  该递归式可以直接求解。根据递归式可以联立以下方程组。
  在这里插入图片描述
  将方程组中各方程相加,得到
  在这里插入图片描述
  左右两边约去相同项,得到
  在这里插入图片描述
  
  h. T(n)=T(n−1)+lgnT(n)=T(n-1)+{\rm lg}nT(n)=T(n1)+lgn
  该递归式可以直接求解。根据递归式可以联立下列方程组。
  在这里插入图片描述
  将方程组中各方程相加,得到
  在这里插入图片描述
  左右两边约去相同项,得到
  在这里插入图片描述
  
  i. T(n)=T(n−2)+1/lgnT(n)=T(n-2)+1/{\rm lg}nT(n)=T(n2)+1/lgn
  本题笔者解答不了,希望有高手能指教。
  
  j. T(n)=nT(n)+nT(n)=\sqrt{n}T(\sqrt{n})+nT(n)=nT(n)+n
  采用替代变量法。令n=2mn = 2^mn=2m,那么递归式变为T(2m)=2m/2∙T(2m/2)+2mT(2^m)=2^{m/2}∙T(2^{m/2})+2^mT(2m)=2m/2T(2m/2)+2m。再令S(m)=T(2m)S(m)=T(2^m)S(m)=T(2m),得到S(m)=2m/2•S(m/2)+2mS(m)=2^{m/2}•S(m/2)+2^mS(m)=2m/2S(m/2)+2m
  递归式S(m)=2m/2•S(m/2)+2mS(m)=2^{m/2}•S(m/2)+2^mS(m)=2m/2S(m/2)+2m可以直接求解。假设mmm为2的幂,可以联立下列方程组。
  在这里插入图片描述
  将方程组中各方程相加,并约去左右两边的相同项,得到
  在这里插入图片描述
  由于n=2mn = 2^mn=2m,所以有m=lgnm = {\rm lg}nm=lgn,代入上式得到
  在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值