第四章 分治策略 4.5 用主方法求解递归式

4.5 用主方法求解递归式

一.

1.主定理

  令 a ≥ 1 a≥1 a1 b > 1 b>1 b>1 是常数, f ( n ) f(n) f(n) 是一个函数, T ( n ) T(n) T(n) 是定义在非负整数上的递归式: T ( n ) = a T ( n b ) + f ( n ) T(n)=aT(\frac{n}{b})+f(n) T(n)=aT(bn)+f(n)  其中我们将 n / b n/b n/b 解释为 ⌊ n / b ⌋ \lfloor n/b\rfloor n/b ⌈ n / b ⌉ \lceil n/b\rceil n/b 。那么 T ( n ) T(n) T(n) 有如下渐近线:
  1. 若对某个常数 ϵ > 0 \epsilon>0 ϵ>0 f ( n ) = O ( n log ⁡ b a − ϵ ) f(n)=O(n^{\log_{b}a-\epsilon}) f(n)=O(nlogbaϵ) ,则 T ( n ) = Θ ( n log ⁡ b a ) T(n)=\Theta(n^{\log_{b}a}) T(n)=Θ(nlogba)
  2. 若 f ( n ) = Θ ( n log ⁡ b a ) f(n)=\Theta(n^{\log_{b}a}) f(n)=Θ(nlogba) ,则 T ( n ) = Θ ( n log ⁡ a b lg ⁡ n ) T(n)=\Theta(n^{\log_{a}b}\lg n) T(n)=Θ(nlogablgn)
  3. 若对某个常数 ϵ > 0 \epsilon>0 ϵ>0 f ( n ) = Ω ( n log ⁡ b a + ϵ ) f(n)=\Omega(n^{\log_{b}a+\epsilon}) f(n)=Ω(nlogba+ϵ) ,且对某个常数 c < 1 c<1 c<1 和所有足够大的 n n n a f ( n / b ) ≤ c f ( n ) af(n/b)≤cf(n) af(n/b)cf(n) ,则 T ( n ) = Θ ( f ( n ) ) T(n)=\Theta(f(n)) T(n)=Θ(f(n))

二.

4.5-1

  对下列递归式,使用主方法求出渐近紧确界。
  a. T ( n ) = 2 T ( n / 4 ) + 1 T(n)=2T(n/4)+1 T(n)=2T(n/4)+1
  b. T ( n ) = 2 T ( n / 4 ) + n T(n)=2T(n/4)+\sqrt n T(n)=2T(n/4)+n
  c. T ( n ) = 2 T ( n / 4 ) + n T(n)=2T(n/4)+n T(n)=2T(n/4)+n
  d. T ( n ) = 2 T ( n / 4 ) + n 2 T(n)=2T(n/4)+n^2 T(n)=2T(n/4)+n2

  解:四个式子都需要与 n log ⁡ 4 1 / 2 = n n^{\log_4 1/2}=\sqrt n nlog41/2=n 做出比较。
    a. 由于 1 = O ( n 1 / 2 − ϵ ) 1=O(n^{1/2-\epsilon}) 1=O(n1/2ϵ) ,其中 0 < ϵ ≤ 1 / 2 0<\epsilon≤1/2 0<ϵ1/2 ,故而 T ( n ) = Θ ( n ) T(n)=\Theta(\sqrt n) T(n)=Θ(n )
    b. 由于 1 = Θ ( n 1 / 2 ) 1=\Theta(n^{1/2}) 1=Θ(n1/2) ,故而 T ( n ) = Θ ( n lg ⁡ n ) T(n)=\Theta(\sqrt n\lg n) T(n)=Θ(n lgn)
    c. 由于 1 = Ω ( n 1 / 2 + ϵ ) 1=\Omega(n^{1/2+\epsilon}) 1=Ω(n1/2+ϵ) ,其中 0 < ϵ ≤ 1 / 2 0<\epsilon≤1/2 0<ϵ1/2 ,故而 T ( n ) = Θ ( n ) T(n)=\Theta(n) T(n)=Θ(n)
    d. 由于 1 = O ( n 1 / 2 − ϵ ) 1=O(n^{1/2-\epsilon}) 1=O(n1/2ϵ) ,其中 0 < ϵ ≤ 2 0<\epsilon≤2 0<ϵ2 ,故而 T ( n ) = Θ ( n 2 ) T(n)=\Theta(n^2) T(n)=Θ(n2)

4.5-2

   Caesar 教授想设计一个渐近快于 Strassen 算法的矩阵相乘算法。他的算法使用分治方法,将每个矩阵分解为 n / 4 × n / 4 n/4\times n/4 n/4×n/4 的子矩阵,分解和合并步骤共花费 Θ ( n 2 ) \Theta(n^2) Θ(n2) 时间。他需要确定,他的算法需要创建多少个字问题,才能击败 Strassen 算法。如果他的算法创建 a a a 个子问题,则描述运行时间 T ( n ) T(n) T(n) 的递归式为 T ( n ) = a T ( n / 4 ) + Θ ( n 2 ) T(n)=aT(n/4)+\Theta(n^2) T(n)=aT(n/4)+Θ(n2)Caesar 教授的算法如果要渐近快于 Strassen 算法, a a a 的最大整数值应是多少?

  解:关键在于讨论 n log ⁡ 4 a n^{\log_4 a} nlog4a Θ ( n lg ⁡ 7 ) \Theta(n^{\lg7}) Θ(nlg7) 的关系,其中 Strassen 算法时间复杂度为 Θ ( n lg ⁡ 7 ) \Theta(n^{\lg 7}) Θ(nlg7) 。若 a = 49 a=49 a=49 ,则 n lg ⁡ 7 = Θ ( n lg ⁡ 7 ) n^{\lg7}=\Theta(n^{\lg 7}) nlg7=Θ(nlg7) ,而若 a < 49 , n log ⁡ 4 a = O ( n lg ⁡ 7 − ϵ ) a<49,n^{\log_4 a}=O(n^{\lg 7-\epsilon}) a<49,nlog4a=O(nlg7ϵ) ,其中 0 < ϵ < lg ⁡ 7 0<\epsilon<\lg7 0<ϵ<lg7 ,从而 T ( n ) = Θ ( n lg ⁡ 7 ) T(n)=\Theta(n^{\lg7}) T(n)=Θ(nlg7) 。从而 a a a 的最大整数值为 48 48 48

4.5-3

  使用主方法证明:二分查找递归式 T ( n ) = T ( n / 2 ) + Θ ( 1 ) T(n)=T(n/2)+\Theta(1) T(n)=T(n/2)+Θ(1) 的解是 T ( n ) = Θ ( lg ⁡ n ) T(n)=\Theta(\lg n) T(n)=Θ(lgn) 。(二分查找的描述见联系 2.3 − 5 2.3-5 2.35

  证明:由于 log ⁡ 2 1 = Θ ( 1 ) \log_2 1=\Theta(1) log21=Θ(1) ,于是 T ( n ) = Θ ( lg ⁡ n ) T(n)=\Theta(\lg n) T(n)=Θ(lgn)

4.5-4

  主方法能应用于递归式 T ( n ) = 4 T ( n / 2 ) + n 2 lg ⁡ n T(n)=4T(n/2)+n^2\lg n T(n)=4T(n/2)+n2lgn 吗?请说明为什么可以或者为什么不可以。给出这个递归式的一个渐近上界。

  解:不可以。由于 n 2 lg ⁡ n = O ( n log ⁡ 2 4 ) = O ( n 2 ) n^2\lg n=O(n^{\log_2 4})=O(n^2) n2lgn=O(nlog24)=O(n2) 并不是多项式的渐近上界,于是不符合主方法的三个条件。
    由递归树猜想结果为 Θ ( n 2 lg ⁡ 2 n ) \Theta(n^2\lg^2n) Θ(n2lg2n) 。假设当 n < m n<m n<m T ( n ) ≤ c n 2 lg ⁡ 2 n T(n)≤cn^2\lg^2n T(n)cn2lg2n ,那么当 n = m n=m n=m 时, T ( m ) = 4 T ( m / 2 ) + m 2 lg ⁡ m ≤ 4 c ( m 2 ) 2 lg ⁡ 2 m 2 + m 2 lg ⁡ m ≤ c m 2 lg ⁡ 2 m − ( 2 c − 1 ) m 2 lg ⁡ m + c m 2 ≤ c m 2 lg ⁡ m 取c≥1/lg 2 \begin{aligned}T(m)&=4T(m/2)+m^2\lg m\\ &≤4c(\frac{m}{2})^2\lg^2\frac{m}{2}+m^2\lg m\\ &≤cm^2\lg^2m-(2c-1)m^2\lg m+cm^2\\ &≤cm^2\lg m&\text{取c≥1/lg 2} \end{aligned} T(m)=4T(m/2)+m2lgm4c(2m)2lg22m+m2lgmcm2lg2m(2c1)m2lgm+cm2cm2lgmc≥1/lg 2

4.5-5

  考虑主定理情况 3 3 3 的一部分:对某个常数 c < 1 c<1 c<1 ,正则条件 a f ( n / b ) ≤ c f ( n ) af(n/b)≤cf(n) af(n/b)cf(n) 是否成立。给出一个例子,其中常数 a ≥ 1 , b > 1 a≥1,b>1 a1,b>1 且函数 f ( n ) f(n) f(n) 满足主定理情况 3 3 3 中除正则条件外的所有条件。

  解:确定 a = 1 , b = 2 a=1,b=2 a=1,b=2 f ( n ) = n ( 2 − cos ⁡ n ) f(n)=n(2-\cos n) f(n)=n(2cosn) ,此时 n 2 ( 2 − cos ⁡ n 2 ) ≤ c n \frac{n}{2}(2-\cos\frac{n}{2})≤cn 2n(2cos2n)cn 1 − c o s ( n / 2 ) 2 ≤ c \frac{1-cos(n/2)}{2}≤c 21cos(n/2)c 1 − c o s ( n / 2 ) 2 ≤ c 1-\frac{cos(n/2)}{2}≤c 12cos(n/2)c    因而 c ≥ 1 c≥1 c1 ,然而 c < 1 c < 1 c<1

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值