Algorinote_2_主定理与 Akra-Bazzi 定理

Algorinote_10_主定理与 Akra-Bazzi 定理

主定理 Master theorem

对于形如 T ( n ) = a T ( n b ) + f ( n ) T(n)=aT(\frac nb)+f(n) T(n)=aT(bn)+f(n) 的递归式,其中:

  • n 是问题规模大小;
  • a 是原问题的子问题个数;
  • n/b 是每个子问题的大小,这里假设每个子问题有相同的规模大小;
  • f(n) 是将原问题分解成子问题和将子问题的解合并成原问题的解的时间。

preview

令 d 是 f(n) 中 n 的最高幂次, f ( n ) = Θ ( n d ) f(n)=\Theta(n^d) f(n)=Θ(nd)

f ( n ) f(n) f(n) n log ⁡ b a n^{\log_ba} nlogba 的增长速度进行对比,原理上是在每层的单个子问题的治理时间 a l a y e r a^{layer} alayer,与子问题的数量之间作权衡 b d   ∗   l a y e r b^{d\ *\ layer} bd  layer(具体证明可以看看下文),实际是比较 d − log ⁡ b a d - \log_ba dlogba a − b d a - b^d abd 。于是有:

  • 如果后者更大,则 T ( n ) = Θ ( n l o g b a ) T(n)=\Theta(n^{log_ba}) T(n)=Θ(nlogba)
  • 如果二者相等,则 T ( n ) = Θ ( n log ⁡ b a log ⁡ k + 1 n ) = Θ ( n d log ⁡ n ) T(n)=\Theta(n^{\log_ba}\log^{k+1}n)=\Theta(n^d\log n) T(n)=Θ(nlogbalogk+1n)=Θ(ndlogn)
  • 如果前者更大,则 T ( n ) = Θ ( n d ) T(n)=\Theta(n^d) T(n)=Θ(nd)
    • 注意还需要对充分大的 n,存在 c < 1 使 a f ( n b ) ≤ c f ( n ) af(\frac nb) \le cf(n) af(bn)cf(n)

其中第二点中,因为在对 f ( n ) f(n) f(n) 的分析时得到的通常都是多项式 n d n^d nd 形式,即原文所提到的 log ⁡ k n \log^kn logkn 形式一般都是 k=0,所以我们把第二点化简成 i f    f ( n ) = Θ ( n log ⁡ b a ) if\ \ f(n)=\Theta(n^{\log_ba}) if  f(n)=Θ(nlogba),也就是 d = log ⁡ b a d = \log_ba d=logba

应用

认真理解一下 T ( n ) = a T ( n b ) + f ( n ) T(n)=aT(\frac nb)+f(n) T(n)=aT(bn)+f(n),a 代表当前层的分支数,f(n) 代表分支前的耗时,也就是本层用时,b 代表分解时对当前问题的切分程度,也即子问题与母问题的比例。

所以对于我们熟悉的快速排序,有 T ( n ) = 2 T ( n 2 ) + O ( n ) T(n)=2T(\frac n2)+O(n) T(n)=2T(2n)+O(n),所以 d = 1 = log ⁡ 2 2 = 1 d=1 = \log_22=1 d=1=log22=1 T ( n ) = Θ ( n log ⁡ n ) T(n)=\Theta(n\log n) T(n)=Θ(nlogn)

证明

img

根据对递归式的理解,第 i i i层有 a i a^i ai个子问题,每个子问题的大小是 n / b i n / b^i n/bi

所以这一层的用时是 a i ⋅ O ( ( n b i ) d ) = O ( n d ) ⋅ ( a b d ) i a^i \cdot O((\frac{n}{b^i})^d) = O(n^d)\cdot(\frac{a}{b^d})^i aiO((bin)d)=O(nd)(bda)i

把每层用时累加起来就是 KaTeX parse error: Expected group after '_' at position 5: \sum_̲\limits{i=0}^{\…,可以看出是一个等比数列,公比 q = a b d q=\frac{a}{b^d} q=bda ,考虑对 q 进行分类讨论(省略化简过程)

  • q > 1,即 d < log ⁡ b a d < \log_ba d<logba,最后一项占主导, S = O ( O ( n d ) ( a b d ) log ⁡ b a ) = O ( n log ⁡ b a ) S=O(O(n^d)(\frac{a}{b^d})^{\log_ba})=O(n^{\log_ba}) S=O(O(nd)(bda)logba)=O(nlogba)
  • q = 1,全都一样大,求和 S = ( 1 + log ⁡ b a ) O ( n d ) = O ( n d log ⁡ n ) S=(1+\log_ba)O(n^d)=O(n^d\log n) S=(1+logba)O(nd)=O(ndlogn)
  • q < 1,即 d > log ⁡ b a d > \log_ba d>logba,第一项占主导, S = O ( O ( n d ) ⋅ 1 ) = O ( n d ) S=O(O(n^d)\cdot1)=O(n^d) S=O(O(nd)1)=O(nd)
    • 此时当 f(n) 不是 n 的简单次幂形式(含有 log)时,还需要考虑 a f ( n b ) ≤ c f ( n ) af(\frac nb) \le cf(n) af(bn)cf(n) 来保证序列增长级递减

Akra-Bazzi 定理

考虑形如 T ( x ) = ∑ i = 1 k a i T ( b i x + h i ( x ) ) + f ( x ) ,    f o r   x ≥ x 0 T(x)=\sum\limits_{i=1}^{k}a_iT(b_ix+h_i(x))+f(x),\ \ for\ x\ge x_0 T(x)=i=1kaiT(bix+hi(x))+f(x),  for xx0 的递归式(T的转移可以有更多部分),其中:

  • $a_i>0, 0<b_i<1 $
  • ∣ g ( x ) ∣ ∈ O ( x c ) , 其 中 c 是 常 数 |g(x)|\in O(x^c),其中c是常数 g(x)O(xc)c
  • ∣ h i ( x ) ∣ ∈ O ( x log ⁡ 2 x ) |h_i(x)|\in O(\frac{x}{\log^2x}) hi(x)O(log2xx)

则有 T ( x ) = Θ ( x p + x p ⋅ ∫ 1 x f ( u ) u p + 1 d u ) \Large T(x) = \Theta(x^p + x^p\cdot\int_{1}^{x} \frac{f(u)}{u^{p+1}}du) T(x)=Θ(xp+xp1xup+1f(u)du),其中 ∑ i = 1 k a i b i p = 1 \sum\limits_{i=1}^{k}a_ib_i^p=1 i=1kaibip=1

应用

例题1 T ( n ) = 7 4 T ( 1 2 n ) + T ( 3 4 n ) + n 2 T(n)=\frac 74 T(\frac 12 n)+T(\frac 34n)+n^2 T(n)=47T(21n)+T(43n)+n2

​ 先找 p: 7 4 ( 1 2 ) p + ( 3 4 ) p = 1 \frac 74(\frac 12)^p+(\frac 34)^p = 1 47(21)p+(43)p=1,解得 p=2

​ 所以 T ( x ) = Θ ( x 2 ( 1 + ∫ 1 x u 2 u 3 d u ) ) = Θ ( x 2 ( 1 + log ⁡ x ) ) = Θ ( x 2 log ⁡ x ) T(x) = \Theta(x^2 (1+\int_{1}^{x} \frac{u^2}{u^{3}}du))=\Theta(x^2(1+\log x))=\Theta(x^2\log x) T(x)=Θ(x2(1+1xu3u2du))=Θ(x2(1+logx))=Θ(x2logx)

例题2 T ( n ) = 1 4 T ( 3 4 n ) + 3 4 T ( 1 4 n ) + 1 T(n)=\frac 14 T(\frac 34 n)+\frac 34 T(\frac 14n)+1 T(n)=41T(43n)+43T(41n)+1

​ 显然 p=0, T ( x ) = Θ ( 1 + ∫ 1 x 1 u d u ) = Θ ( log ⁡ x ) T(x)=\Theta(1+\int_1^x\frac 1udu)=\Theta(\log x) T(x)=Θ(1+1xu1du)=Θ(logx)

Ref

https://zhuanlan.zhihu.com/p/100531135

https://my.oschina.net/u/4324616/blog/4778589

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值