第四章 分治策略 4.4 用递归树方法求解递归式

4.4 用递归数方法求解递归式

一.

1.

  在递归树中,每个结点表示一个单一子问题的代价,子问题对应某次递归函数调用。我们将树中每层中的代价求和,得到每层代价,然后将所有层的代价求和,得到所有层次的递归调用的总代价。
  递归树最适合用来生成好的猜测,然后即可用代入法来验证猜测是都正确。当使用递归树来生成好的猜测时,常常需要忍受一点儿“不精确”,因为稍后才会验证猜测是否正确。如果在画递归树和代价求和时非常仔细,就可以用递归树直接证明解是否正确。

2.

  以递归式 T ( n ) = 3 T ( ⌊ n / 4 ⌋ ) + c n 2 T(n)=3T(\lfloor n/4\rfloor)+cn^2 T(n)=3T(n/4)+cn2 为例,如图所示:
在这里插入图片描述

二.

4.4-1

  对递归式 T ( n ) = 3 T ( ⌊ n / 2 ⌋ ) + n T(n)=3T(\lfloor n/2\rfloor)+n T(n)=3T(n/2)+n ,利用递归树确定一个好的渐近上界,用代入法进行验证。

  解:图略。递归树的层数为: lg ⁡ n + 1 \lg n +1 lgn+1
    第 i i i 层的代价符合通式: ( 3 / 2 ) i − 1 n (3/2)^{i-1}n (3/2)i1n
    叶子的树目为 n lg ⁡ 3 n^{\lg 3} nlg3
    猜测渐近上界为 O ( n lg ⁡ 3 ) O(n^{\lg3}) O(nlg3) ,下面使用代入法证明:
    当 n = 1 n = 1 n=1 T ( 1 ) = 1 ≤ 1 lg ⁡ 3 T(1) = 1 ≤ 1^{\lg3} T(1)=11lg3
    假设当 n < m n < m n<m 时, T ( n ) ≤ c n lg ⁡ 3 − d n T(n) ≤ cn^{\lg 3}-dn T(n)cnlg3dn ,那么当 n = m n=m n=m 时, T ( m ) = 3 T ( ⌊ m 2 ⌋ ) + m ≤ 3 c ⌊ m 2 ⌋ lg ⁡ 3 − 3 d ⌊ m 2 ⌋ + m ≤ 3 c ( m 2 ) lg ⁡ 3 − 3 d m 2 + m = c m lg ⁡ 3 + ( 1 − 3 d 2 ) m ≤ c m lg ⁡ 3 − d m 取d≥2 \begin{aligned}T(m)&=3T(\lfloor\frac{m}{2}\rfloor)+m\\ &≤3c\lfloor\frac{m}{2}\rfloor^{\lg3}-3d\lfloor\frac{m}{2}\rfloor+m\\ &≤3c(\frac{m}{2})^{\lg3}-\frac{3dm}{2}+m\\ &=cm^{\lg3}+(1-\frac{3d}{2})m\\ &≤cm^{\lg3}-dm&\text{取d≥2} \end{aligned} T(m)=3T(2m)+m3c2mlg33d2m+m3c(2m)lg323dm+m=cmlg3+(123d)mcmlg3dmd≥2    综上,渐近上界为 O ( n lg ⁡ 3 ) O(n^{\lg3}) O(nlg3)

4.4-2

  对递归式 T ( n ) = T ( n / 2 ) + n 2 T(n)=T(n/2)+n^2 T(n)=T(n/2)+n2 ,利用递归树确定一个好的渐近上界,用代入法进行验证。

  解:图略。递归树的层数为: lg ⁡ n + 1 \lg n +1 lgn+1
    第 i i i 层的代价符合通式: ( 1 / 4 ) i − 1 n 2 (1/4)^{i-1}n^2 (1/4)i1n2
    叶子的树目为 1 1 1
    猜测渐近上界为 O ( n 2 ) O(n^{2}) O(n2) ,下面使用代入法证明:
    当 n = 1 n = 1 n=1 T ( 1 ) = 1 ≤ 1 2 T(1) = 1 ≤ 1^{2} T(1)=112
    假设当 n < m n < m n<m 时, T ( n ) ≤ c n 2 T(n) ≤ cn^2 T(n)cn2 ,那么当 n = m n=m n=m 时, T ( m ) = T ( m 2 ) + m 2 ≤ c ( m 2 ) 2 + m 2 = ( c 4 + 1 ) m 2 ≤ c m 2 取c ≥ 4/3 \begin{aligned}T(m)&=T(\frac{m}{2})+m^2\\ &≤c(\frac{m}{2})^2+m^2\\ &=(\frac{c}{4}+1)m^2\\ &≤cm^2&\text{取c ≥ 4/3} \end{aligned} T(m)=T(2m)+m2c(2m)2+m2=(4c+1)m2cm2c ≥ 4/3    综上,渐近上界为 O ( n 2 ) O(n^2) O(n2)

4.4-3

  对递归式 T ( n ) = 4 T ( n / 2 + 2 ) + n T(n)=4T(n/2+2)+n T(n)=4T(n/2+2)+n ,利用递归树确定一个好的渐近上界,用代入法进行验证。

  解:图略。递归树的层数为: lg ⁡ n + 1 \lg n +1 lgn+1
    第 i i i 层的代价估计后符合通式: 2 i − 1 ( n + 2 i ) 2^{i-1}(n+2^i) 2i1(n+2i)
    叶子的树目为 n 2 n^2 n2
    猜测渐近上界为 O ( n 2 ) O(n^{2}) O(n2) ,下面使用代入法证明:
    当 n = 1 n = 1 n=1 T ( 1 ) = 1 ≤ 1 2 T(1) = 1 ≤ 1^{2} T(1)=112
    假设当 n < m n < m n<m 时, T ( n ) ≤ c n 2 T(n) ≤ cn^2 T(n)cn2 ,那么当 n = m n=m n=m 时, T ( m ) = T ( m 2 + 2 ) + m ≤ c ( m 2 + 2 ) 2 + m ≤ c m 2 取c ≥ 0 \begin{aligned}T(m)&=T(\frac{m}{2}+2)+m\\ &≤c(\frac{m}{2}+2)^2+m\\ &≤cm^2&\text{取c ≥ 0} \end{aligned} T(m)=T(2m+2)+mc(2m+2)2+mcm2c ≥ 0    综上,渐近上界为 O ( n 2 ) O(n^2) O(n2)

4.4-4

  对递归式 T ( n ) = T ( n − 1 ) + 1 T(n)=T(n-1)+1 T(n)=T(n1)+1 ,利用递归树确定一个好的渐近上界,用代入法进行验证。

  解:图略。递归树的层数为: n n n
    第 i i i 层的代价估计后符合通式: 1 1 1
    叶子的树目为 1 1 1
    猜测渐近上界为 O ( n ) O(n) O(n) ,下面使用代入法证明:
    当 n = 1 n = 1 n=1 T ( 1 ) = 1 ≤ 1 T(1) = 1 ≤ 1 T(1)=11
    假设当 n < m n < m n<m 时, T ( n ) ≤ c n T(n) ≤ cn T(n)cn ,那么当 n = m n=m n=m 时, T ( m ) = T ( m − 1 ) + 1 ≤ c ( m − 1 ) + 1 ≤ c m 取c ≥ 1 \begin{aligned}T(m)&=T(m-1)+1\\ &≤c(m-1)+1\\ &≤cm&\text{取c ≥ 1} \end{aligned} T(m)=T(m1)+1c(m1)+1cmc ≥ 1    综上,渐近上界为 O ( n ) O(n) O(n)

4.4-5

  对递归式 T ( n ) = T ( n − 1 ) + T ( n / 2 ) + n T(n)=T(n-1)+T(n/2)+n T(n)=T(n1)+T(n/2)+n ,利用递归树确定一个好的渐近上界,用代入法进行验证。

  解:图略。递归树不是完全树。递归树的层数为: n n n
    猜测渐近上界为 O ( 2 n ) O(2^n) O(2n) ,渐近下界为 Ω ( n 2 ) \Omega(n^2) Ω(n2) ,下面使用代入法证明:
    当 n = 1 n = 1 n=1 1 2 ≤ T ( 1 ) = 1 ≤ 2 1 1^2≤T(1) = 1 ≤ 2^{1} 12T(1)=121
    假设当 n < m n < m n<m 时, T ( n ) ≤ c 2 n − 4 n T(n) ≤ c2^n-4n T(n)c2n4n ,那么当 n = m n=m n=m 时, T ( m ) = T ( m − 1 ) + T ( m 2 ) + m ≤ c 2 m − 1 − 4 ( m − 1 ) + c 2 m 2 − 2 m + m ≤ c 2 m − 4 m 取m ≥ 2 \begin{aligned}T(m)&=T(m-1)+T(\frac{m}{2})+m\\ &≤c2^{m-1}-4(m-1)+c2^{\frac{m}{2}}-2m+m\\ &≤c2^m-4m&\text{取m ≥ 2} \end{aligned} T(m)=T(m1)+T(2m)+mc2m14(m1)+c22m2m+mc2m4mm ≥ 2    故渐近上界为 O ( 2 n ) O(2^n) O(2n)
    假设当 n < m n < m n<m 时, T ( n ) ≥ c n 2 T(n) ≥ cn^2 T(n)cn2 ,那么当 n = m n=m n=m 时, T ( m ) = T ( m − 1 ) + T ( m 2 ) + m ≥ c ( m − 1 ) 2 + c m 2 4 + m ≤ c m 2 取c ≤ 1/2 \begin{aligned}T(m)&=T(m-1)+T(\frac{m}{2})+m\\ &≥c(m-1)^2+c{\frac{m^2}{4}}+m\\ &≤cm^2&\text{取c ≤ 1/2} \end{aligned} T(m)=T(m1)+T(2m)+mc(m1)2+c4m2+mcm2c ≤ 1/2    故渐近上界为 Ω ( n 2 ) \Omega(n^2) Ω(n2)

4.4-6

  对递归式 T ( n ) = T ( n / 3 ) + T ( 2 n / 3 ) + c n T(n)=T(n/3)+T(2n/3)+cn T(n)=T(n/3)+T(2n/3)+cn ,利用递归树论证其解为 Ω ( n lg ⁡ n ) \Omega(n\lg n) Ω(nlgn) ,其中 c c c 为常数。

  解:图略。由递归树可知道路径长 log ⁡ 3 n + 1 \log_{3} n+1 log3n+1 。因此算法的成本 c n ( log ⁡ 3 n + 1 ) ≥ c n log ⁡ 3 n ≥ c n lg ⁡ n cn(\log_{3}n+1)≥cn\log_{3}n≥cn\lg n cn(log3n+1)cnlog3ncnlgn 。因此其解为 Ω ( n lg ⁡ n ) \Omega(n\lg n) Ω(nlgn)

4.4-7

  对递归式 T ( n ) = 4 T ( ⌊ n / 2 ⌋ ) + c n T(n)=4T(\lfloor n/2\rfloor)+cn T(n)=4T(n/2)+cn c c c 为常数),画出递归树,并给出其解的一个渐近紧确界。

  解:图略。递归树的层数为: lg ⁡ n + 1 \lg n +1 lgn+1
    第 i i i 层的代价符合通式: 2 i − 1 c n 2^{i-1}cn 2i1cn
    叶子的树目为 n 2 n^{2} n2
    猜测渐近紧确界为 Θ ( n 2 ) \Theta(n^2) Θ(n2) ,下面使用代入法证明:
    当 n = 1 n = 1 n=1 1 2 ≤ T ( 1 ) = 1 ≤ 1 2 1^2≤T(1) = 1 ≤ 1^2 12T(1)=112
    假设当 n < m n < m n<m 时, T ( n ) ≤ d n 2 − c n T(n) ≤ dn^2-cn T(n)dn2cn ,那么当 n = m n=m n=m 时, T ( m ) = 4 T ( ⌊ m 2 ⌋ ) + c m ≤ d m 2 − c m \begin{aligned}T(m)&=4T(\lfloor\frac{m}{2}\rfloor)+cm\\ &≤dm^2-cm\\ \end{aligned} T(m)=4T(2m)+cmdm2cm    故渐近上界为 O ( n 2 ) O(n^2) O(n2)
    假设当 n < m n < m n<m 时, T ( n ) ≥ d n 2 − c n T(n) ≥dn^2-cn T(n)dn2cn ,那么当 n = m n=m n=m 时, T ( m ) = 4 T ( ⌊ m 2 ⌋ ) + c m ≥ d m 2 − c m \begin{aligned}T(m)&=4T(\lfloor\frac{m}{2}\rfloor)+cm\\ &≥dm^2-cm\\ \end{aligned} T(m)=4T(2m)+cmdm2cm    故渐近下界为 Ω ( n 2 ) \Omega(n^2) Ω(n2)
    故渐近紧确界为 Θ ( n 2 ) \Theta(n^2) Θ(n2)

4.4-8

  对递归式 T ( n ) = T ( n − a ) + T ( a ) + c n T(n)=T(n-a)+T(a)+cn T(n)=T(na)+T(a)+cn ,利用递归树给出一个渐近紧确解,其中 a ≥ 1 a≥1 a1 c > 0 c>0 c>0 是常数。

  解:图略。递归树的层数为: n / a n/a n/a
    第 i i i 层的代价符合通式: c n cn cn
    叶子的树目为 n / a n/a n/a
    猜测渐近紧确界为 Θ ( n 2 ) \Theta(n^2) Θ(n2) ,下面使用代入法证明:
    当 n = 1 n = 1 n=1 1 2 ≤ T ( 1 ) = 1 ≤ 1 2 1^2≤T(1) = 1 ≤ 1^2 12T(1)=112
    假设当 n < m n < m n<m 时, T ( n ) ≤ d n 2 T(n) ≤ dn^2 T(n)dn2 ,那么当 n = m n=m n=m 时, T ( m ) = T ( m − a ) + T ( a ) + c m ≤ d ( m − a ) 2 + d a 2 + c m ≤ d m 2 取a>1/2,n>2a \begin{aligned}T(m)&=T(m-a)+T(a)+cm\\ &≤d(m-a)^2+da^2+cm\\ &≤dm^2&\text{取a>1/2,n>2a} \end{aligned} T(m)=T(ma)+T(a)+cmd(ma)2+da2+cmdm2a>1/2,n>2a    故渐近上界为 O ( n 2 ) O(n^2) O(n2)
    假设当 n < m n < m n<m 时, T ( n ) ≥ d n 2 T(n) ≥ dn^2 T(n)dn2 ,那么当 n = m n=m n=m 时, T ( m ) = T ( m − a ) + T ( a ) + c m ≥ d ( m − a ) 2 + d a 2 + c m ≥ d m 2 取a<1/2,n>2a \begin{aligned}T(m)&=T(m-a)+T(a)+cm\\ &≥d(m-a)^2+da^2+cm\\ &≥dm^2&\text{取a<1/2,n>2a} \end{aligned} T(m)=T(ma)+T(a)+cmd(ma)2+da2+cmdm2a<1/2,n>2a    故渐近下界为 Ω ( n 2 ) \Omega(n^2) Ω(n2)
    故渐近紧确界为 Θ ( n 2 ) \Theta(n^2) Θ(n2)

4.4-9

  对递归式 T ( n ) = T ( α n ) + T ( ( 1 − α ) n ) + c n T(n)=T(\alpha n)+T((1-\alpha)n)+cn T(n)=T(αn)+T((1α)n)+cn ,利用递归树给出一个渐近紧确解,其中 0 < α < 1 0<\alpha <1 0<α<1 c > 0 c>0 c>0 是常数。

  解:图略。由对称性可假设 α ∈ ( 0 , 1 / 2 ) \alpha\in(0,1/2) α(0,1/2) ,递归树的层数为: log ⁡ 1 / a n \log_{1/a}n log1/an
    第 i i i 层的代价符合通式: c n cn cn
    猜测渐近紧确界为 Θ ( n lg ⁡ n ) \Theta(n\lg n) Θ(nlgn) ,下面使用代入法证明:
    假设当 n < m n < m n<m 时, T ( n ) ≤ d n lg ⁡ n T(n) ≤ dn\lg n T(n)dnlgn ,那么当 n = m n=m n=m 时, T ( m ) = T ( α m ) + T ( ( 1 − α ) m ) + c m ≤ d α m lg ⁡ ( α m ) + d ( 1 − α ) m lg ⁡ ( ( 1 − α ) m ) + c m = d m lg ⁡ m + d m ( α lg ⁡ α + ( 1 − α ) lg ⁡ ( 1 − α ) ) + c m ≤ d m lg ⁡ m 取d>-c/(αlgα+(1-α)lg(1-α)) \begin{aligned}T(m)&=T(\alpha m)+T((1-\alpha)m)+cm\\ &≤d\alpha m\lg(\alpha m)+d(1-\alpha)m\lg((1-\alpha)m)+cm\\ &=dm\lg m+dm(\alpha\lg \alpha+(1-\alpha)\lg(1-\alpha))+cm\\ &≤dm\lg m&\text{取d>-c/(αlgα+(1-α)lg(1-α))} \end{aligned} T(m)=T(αm)+T((1α)m)+cmdαmlg(αm)+d(1α)mlg((1α)m)+cm=dmlgm+dm(αlgα+(1α)lg(1α))+cmdmlgmd>-c/(αlgα+(1-α)lg(1-α))    故渐近上界为 O ( n lg ⁡ n ) O(n\lg n) O(nlgn)
    假设当 n < m n < m n<m 时, T ( n ) ≥ d n lg ⁡ n T(n) ≥ dn\lg n T(n)dnlgn ,那么当 n = m n=m n=m 时, T ( m ) = T ( α m ) + T ( ( 1 − α ) m ) + c m ≥ d α m lg ⁡ ( α m ) + d ( 1 − α ) m lg ⁡ ( ( 1 − α ) m ) + c m = d m lg ⁡ m + d m ( α lg ⁡ α + ( 1 − α ) lg ⁡ ( 1 − α ) ) + c m ≥ d m lg ⁡ m 取0<d<-c/(αlgα+(1-α)lg(1-α)) \begin{aligned}T(m)&=T(\alpha m)+T((1-\alpha)m)+cm\\ &≥d\alpha m\lg(\alpha m)+d(1-\alpha)m\lg((1-\alpha)m)+cm\\ &=dm\lg m+dm(\alpha\lg \alpha+(1-\alpha)\lg(1-\alpha))+cm\\ &≥dm\lg m&\text{取0<d<-c/(αlgα+(1-α)lg(1-α))} \end{aligned} T(m)=T(αm)+T((1α)m)+cmdαmlg(αm)+d(1α)mlg((1α)m)+cm=dmlgm+dm(αlgα+(1α)lg(1α))+cmdmlgm0<d<-c/(αlgα+(1-α)lg(1-α))    故渐近下界为 Ω ( n lg ⁡ n ) \Omega(n\lg n) Ω(nlgn)
    故渐近紧确界为 Θ ( n lg ⁡ n ) \Theta(n\lg n) Θ(nlgn)

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值