算法导论笔记 - 主方法求解递归式

算法导论笔记 - 主方法求解递归式

1. 考虑递归式 T(n) = a * T(n/b) + f(n), 求其 T(n).

主方法对应的三种情况:

  • ω>0,.s.t,f(n) = O(nlogbaω), 则 T(n) = θ(nlogba)
  • 若 f(n) = θ(nlogba), 则 T(n) = θ(nlogbalgn)
  • ω>0, .s.t, f(n) = Ω(nlogbaω), 且 如果 c<1和足够大的 n, .s.t, a * f(n/b) <= f(n), 则 T(n) = θ(f(n))

2. 如何理解?

关键在于比较 f(n) 与 nlogba

  • 对于情况1, f(n) 不仅要小于 nlogba, 而且要多项式意义上的小于, 即对于足够大的 n, 有 nω>nlogbaf(n)
  • 对于情况2,直观理解
  • 对于情况3, f(n) 不仅要大于 nlogba,而且要多项式意义上的大于, 即对于足够大的 n, 有 nω>f(n)nlogba, 且必须满足正则条件 c<1和足够大的 n, .s.t, a * f(n/b) <= f(n)

注:
1. 多项式意义上的大于,举个例子, nω>lgn, 对任意的 ω>0和足够大的 n 成立
2. 主方法不能覆盖所有情况,当 nlogba大于但不多项式下大于,或者小于但不多项式下小于,则主方法不能用于求解递归式

3. 强化训练

a. T(n)=2T(n/2)+nlgn

由表达式得知,nlogba=nlog22, 由于 f(n)nlogba=lgn,
对于 任意的 ω, 都不存在 lgn>nω,
所以,T(n) 不可被主方法求解。

b. T(n)=3T(n/4)+n2

由表达式得知,nlogba=nlog43n0.793,
所以 ω0.2,.s.t, f(n)=Ω(nlogba+ω)

正则条件 af(n/b)=3n242=316n2, 故 c=3/16<1, .s.t, af(n/b)316f(n)
所以 T(n)=θ(n2)

c. T(n)=2T(n4)+n

由表达式得知,nlogba=nlog42=n12,
由此知, f(n)=θ(nlogba),
所以, T(n)=θ(nlogbalgn)=θ(n12lgn)

d. T(n)=4T(n4)+n

由表达式得知,$n^{log_b a} = n^{log_4 4}=n,

ω=12, .s.t, f(n)=O(nlogbaω)
所以,T(n)=θ(n)


版权声明:本文为weixin_36497128原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。