主方法

–《算法导论第三版》第4章 分治策略
主方法为如下形式的递归式提供了一种 “ 菜谱” 式的求解方法:
T ( n ) = a T ( n b ) + f ( n ) T(n) = aT(\frac{n}{b}) + f(n) T(n)=aT(bn)+f(n)

  1. 其中 a ⩾ 1 a \geqslant 1 a1 b > 1 b > 1 b>1是常数, f ( n ) f(n) f(n)是渐近函数。
    上述递归式描述的是这样一种算法的运行时间: 它将规模为n的问题分解为a个子问题,每个子问题规模为 n b \frac{n}{b} bn,其中a和b都
    是正常数。a个子问题递归地进行求解,每个花费时间 T ( n b ) T(\frac{n}{b}) T(bn)。函数 f ( n ) f(n) f(n)包含了问题分解和子问题解合并的代价。
  2. 其中 n b \frac{n}{b} bn可能不是整数,但将式中 T ( n b ) T(\frac{n}{b}) T(bn)替换为 T ( ⌈ n b ⌉ ) T(\lceil\frac{n}{b}\rceil) T(bn) T ( ⌊ n b ⌋ ) T(\lfloor\frac{n}{b}\rfloor) T(bn)不会影响递归式的渐进性质。

主方法主要依赖于主定理。(证明详见《算法导论第三版》P55)
(主定理)令 a ⩾ 1 a \geqslant 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 \frac{n}{b} bn解释为 ⌈ n b ⌉ \lceil\frac{n}{b}\rceil bn ⌊ n b ⌋ \lfloor\frac{n}{b}\rfloor bn。那么 T ( n ) T(n) T(n)有如下渐进界:

  1. 若对某个常数 ε > 0 \varepsilon > 0 ε>0 f ( n ) = O ( n l o g b a − ε ) f(n) = O(n^{log_{b}a-\varepsilon}) f(n)=O(nlogbaε),则 T ( n ) = Θ ( n l o g b a ) T(n) = \Theta(n^{log_{b}a}) T(n)=Θ(nlogba)。( f ( n ) f(n) f(n)多项式意义上的小于(渐进小于) n l o g b a n^{log_{b}a} nlogba)
  2. f ( n ) = Θ ( n l o g b a l g k n ) f(n) = \Theta(n^{log_{b}a}lg^kn) f(n)=Θ(nlogbalgkn),则 T ( n ) = Θ ( n l o g b a l g k + 1 n ) T(n) = \Theta(n^{log_{b}a}lg^{k+1}n) T(n)=Θ(nlogbalgk+1n)
  3. (若对某个常数 ε > 0 \varepsilon > 0 ε>0 f ( n ) = Ω ( n l o g b a + ε ) f(n) = \Omega(n^{log_{b}a+\varepsilon}) f(n)=Ω(nlogba+ε)),且对于某个常数 c < 1 c < 1 c<1和所有充分大的n有 a f ( n b ) ⩽ c f ( n ) af(\frac{n}{b}) \leqslant cf(n) af(bn)cf(n),那么 T ( n ) = Θ ( f ( n ) ) T(n) = \Theta(f(n)) T(n)=Θ(f(n))。 ( f ( n ) f(n) f(n)多项式意义上的大于(渐进大于) n l o g b a n^{log_{b}a} nlogba)

例如,描述Strassen算法的递归式中, a = 7 a = 7 a=7 b = 2 b = 2 b=2 f ( n ) = Θ ( n 2 ) f( n) = \Theta(n^2) f(n)=Θ(n2) ⇒ \Rightarrow T ( n ) = Θ ( n l o g 2 7 ) T(n) = \Theta(n^{log_27}) T(n)=Θ(nlog27)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值