算法分析与设计CH4:Recurrences

CH4:Recurrences

Review:

  • MergeSort
  • 分析MergeSort的时间复杂度
    • 递归树 Picture of Recursion Tree
    • 迭代法 Telescoping
    • 数学归纳法 Mathematical Induction
  • 渐近分析
    • O − N o t a t i o n O-Notation ONotation
    • Ω − N o t a t i o n \Omega-Notation ΩNotation
    • Θ − N o t a t i o n \Theta-Notation ΘNotation

算法包含对自身的调用时,其运行时间可以用递归式表示:

M e r g e S o r t : T ( n ) = a T ( n / b ) + D ( n ) + C ( n ) = 2 T ( n / 2 ) + O ( n ) MergeSort:T(n) = aT(n/b) +D(n) +C(n) = 2T(n/2) + O(n) MergeSortT(n)=aT(n/b)+D(n)+C(n)=2T(n/2)+O(n)

3种求解递归函数的方法:

  • 代换法-------------Substitution
  • 递归树法----------Recursion Tree
  • 主方法-------------Master Method

4.1 Substitution Method 代换法

(1)步骤

步骤:

  • 猜测一个解的形式 Guess the form of solution
  • 使用数学归纳法证明 Verify by induction
  • 求解常数项 Solve for constants

(2)例子

Example1: T ( n ) = 4 T ( n / 2 ) + 100 n T(n) = 4T(n/2) + 100n T(n)=4T(n/2)+100n

猜测: O ( n 3 ) O(n^3) O(n3)(如果要证明 Θ \Theta Θ的话,那么要分别证明O和 Ω \Omega Ω

归纳基础: T ( 1 ) = Θ ( 1 ) T(1) = \Theta(1) T(1)=Θ(1)

归纳假设:$T(k) \leq ck^3 在 在 k < n$时成立

使用数学归纳法证明: T ( n ) ≤ c n 3 T(n) \leq cn^3 T(n)cn3

证明:
T ( n ) = 4   T ( n / 2 ) + 100 n ≤ 4 c ( n / 2 ) 3 + 100 n = ( c / 2 ) n 3 + 100 n = c n 3 − ( ( c / 2 ) n 3 − 100 n ) ≤ c n 3 \begin{aligned} \mathrm{T}(\mathrm{n}) &=4 \mathrm{~T}(\mathrm{n} / 2)+100 n \\ & \leq 4 \mathrm{c}(\mathrm{n} / 2)^{3}+100 n \\ &=(\mathrm{c} / 2) n^{3}+100 n \\ &=\mathrm{cn}^{3}-\left((\mathrm{c} / 2) n^{3}-100 n\right)\\ &\leq\mathrm{cn}^{3} \end{aligned} T(n)=4 T(n/2)+100n4c(n/2)3+100n=(c/2)n3+100n=cn3((c/2)n3100n)cn3
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uT0feEXC-1654484649510)(https://cdn.jsdelivr.net/gh/Holmes233666/blogImage@main/img/image-20220605163554811.png)]

最后确定c和n的值即可:

image-20220605163808829
Example2: T ( n ) = 2 T ( ⌊ n / 2 ⌋ ) + n T(n) = 2T(\lfloor n/2\rfloor) + n T(n)=2T(n/2)+n

要严格遵守证明的结果的模式,下面的证明是错误的:

image-20220605164632112
Example3:尝试变量替换
  • 考虑: T ( n ) = 2 T ( n ) + l g n T(n) = 2T(\sqrt{n}) + lgn T(n)=2T(n )+lgn

  • Rename: m = l g n ⇒ T ( 2 m ) = 2 T ( 2 m 2 ) + m m = lgn\Rightarrow T(2^m) = 2T(2^{\frac{m}{2}})+m m=lgnT(2m)=2T(22m)+m

  • S ( m ) = T ( 2 m ) S(m) = T(2^m) S(m)=T(2m),则有: S ( m ) = 2 S ( m / 2 ) + m S(m) = 2S(m/2) + m S(m)=2S(m/2)+m

    设当 m 0 ≤ m m_0\leq m m0m时有: S ( m 0 ) ≤ c m 0 l g m 0 S(m_0)\leq cm_0lgm_0 S(m0)cm0lgm0
    S ( m ) = 2 S ( m / 2 ) + m ≤ 2 c ( m / 2 ) l g ( m / 2 ) + m = c m l g ( m / 2 ) + m = c m l g m − c m + m = c m l g m − ( c − 1 ) m = O ( m l g m ) S(m) = 2S(m/2) + m\\ \leq 2c(m/2)lg(m/2) + m\\ =cmlg(m/2)+m\\=cmlgm-cm + m\\ =cmlgm-(c-1)m\\=O(mlgm) S(m)=2S(m/2)+m2c(m/2)lg(m/2)+m=cmlg(m/2)+m=cmlgmcm+m=cmlgm(c1)m=O(mlgm)

  • 转换回来

    T ( 2 m ) = S ( m ) = O ( m l g m ) T(2^m) = S(m) = O(mlgm) T(2m)=S(m)=O(mlgm)

    T ( m ) = O ( l g m l g m ) T(m) = O(lgmlgm) T(m)=O(lgmlgm)

    T ( n ) = O ( l g n l g l g n ) T(n) = O(lgnlglgn) T(n)=O(lgnlglgn)

image-20220605171949471

(3)猜测方法

使用代换法的一个重要技巧是要猜测

猜测的方式:

  • 递归树的方法帮助猜测

  • 与先前见过的相似

  • 先整较松的上届然后缩小区间

    降低上届,提高下界,缩小不确定区间

4.2 Recursion-tree Method

递归树是一个好的猜测的直接方法

递归树方法可能不可靠,就像任何使用省略号的方法一样

4.2.1 例子说明

T ( n ) = 3 T ( n / 4 ) + Θ ( n 2 ) T(n) = 3T(n/4) + \Theta(n^2) T(n)=3T(n/4)+Θ(n2)

(1)递归树猜测上界
image-20220605173026528

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Iw1tuwUO-1654484649511)(https://cdn.jsdelivr.net/gh/Holmes233666/blogImage@main/img/image-20220605175243692.png)]

  • 最后一层叶子数: 3 l o g 4 n = n l o g 4 3 3^{log_4^n} = n^{log_4^3} 3log4n=nlog43

  • 每层开销: ( ( 3 16 ) i c n 2 ) ((\frac{3}{16})^icn^2) ((163)icn2)

  • 总开销: c n 2 + ( 3 16 ) c n 2 + ( 3 16 ) 2 c n 2 + . . . . . . + ( 3 16 ) l o g 4 n − 1 c n 2 + O ( n l o g 4 3 ) = 1 × ( 1 − ( 3 16 ) l o g 4 n + 1 ) 1 − 3 16 + O ( n l o g 4 3 ) cn^2 + (\frac{3}{16})cn^2+(\frac{3}{16})^2cn^2+......+(\frac{3}{16})^{log_4^n-1}cn^2 + O(n^{log_4^3})=\frac{1\times (1-(\frac{3}{16})^{log_4^n+1})}{1-\frac{3}{16}}+O(n^{log_4^3}) cn2+(163)cn2+(163)2cn2+......+(163)log4n1cn2+O(nlog43)=11631×(1(163)log4n+1)+O(nlog43)

    使用等比数列的上界作为上限:
    c n 2 ∑ i = 0 l o g 4 n − 1 ( 3 16 ) i = c n 2 1 − 3 16 = 13 16 c n 2 cn^2\sum_{i=0}^{log_4^n-1}(\frac{3}{16})^i = \frac{cn^2}{1-\frac{3}{16}}=\frac{13}{16}cn^2 cn2i=0log4n1(163)i=1163cn2=1613cn2
    所以:
    T ( n ) = c n 2 + ( 3 16 ) c n 2 + ( 3 16 ) 2 c n 2 + . . . . . . + ( 3 16 ) l o g 4 n − 1 c n 2 + O ( n l o g 4 3 ) = 1 × ( 1 − ( 3 16 ) l o g 4 n + 1 ) 1 − 3 16 + O ( n l o g 4 3 ) ≤ 13 16 c n 2 + O ( n l o g 4 3 ) = O ( n 2 ) T(n) =cn^2 + (\frac{3}{16})cn^2+(\frac{3}{16})^2cn^2+......+(\frac{3}{16})^{log_4^n-1}cn^2 + O(n^{log_4^3})=\frac{1\times (1-(\frac{3}{16})^{log_4^n+1})}{1-\frac{3}{16}}+O(n^{log_4^3})\\ \leq \frac{13}{16}cn^2 +O(n^{log_4^3}) = O(n^2) T(n)=cn2+(163)cn2+(163)2cn2+......+(163)log4n1cn2+O(nlog43)=11631×(1(163)log4n+1)+O(nlog43)1613cn2+O(nlog43)=O(n2)

(2)迭代法证明

递归基础: T ( 1 ) = O ( 1 ) T(1) = O(1) T(1)=O(1)

归纳假设: T ( k ) ≤ c k 2 , 当 k < n 时 成 立 T(k) \leq ck^2,当k<n时成立 T(k)ck2k<n

证明: T ( n ) ≤ c n 2 T(n) \leq cn^2 T(n)cn2
T ( n ) = 3 T ( n / 4 ) + d ( n 2 ) ≤ 3 c ( n / 4 ) 2 + d ( n 2 ) = 3 16 c n 2 + d ( n 2 ) ≤ c n 2 T(n) = 3T(n/4) + d(n^2)\\ \leq 3c(n/4)^2 + d(n^2)\\ =\frac{3}{16}cn^2 + d(n^2)\\ \leq cn^2 T(n)=3T(n/4)+d(n2)3c(n/4)2+d(n2)=163cn2+d(n2)cn2
d ≥ 16 13 c d\geq \frac{16}{13}c d1316c时成立。

4.3 Master Method

“cook book” Method for solving recurrences of the form:
T ( n ) = a T ( n / b ) + f ( n ) 其 中 a ≥ 1 , b > 1 T(n) = aT(n/b) + f(n)\\ 其中a \geq 1 , b >1 T(n)=aT(n/b)+f(n)a1,b>1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dfxG75kX-1654484649512)(…/…/…/…/Users/%E5%AD%99%E8%95%B4%E7%90%A6/AppData/Roaming/Typora/typora-user-images/image-20220606103409477.png)]


叶子的个数: a h = a l o g b n = n l o g b a a^h = a^{log_b^n} = n^{log_b^a} ah=alogbn=nlogba

比较树根 f ( n ) f(n) f(n) n l o g b a n^{log_b^a} nlogba

三种情况:
由 根 到 叶 子 { 减 少 不 变 增 大 由根到叶子\begin{cases}减少\\不变\\增大\end{cases}


4.3.1 Compare f(n) with n l o g b a n^{log_b^a} nlogba

(1) f ( n ) = O ( n l o g b a − ϵ ) f(n) = O(n^{log_{b}^{a}-\epsilon}) f(n)=O(nlogbaϵ) 叶子开销严格大于树根

f ( n ) f(n) f(n)多项式增长慢于 n l o g b a ( b y   a n   n ϵ   f a c t o r ) n^{log_b^a}(by\ an\ n^{\epsilon}\ factor) nlogba(by an nϵ factor)

S o l u t i o n : T ( n ) = Θ ( n l o g b a ) Solution:T(n) = \Theta(n^{log_b^a}) Solution:T(n)=Θ(nlogba)

注意是 Θ \Theta Θ

(2) f ( n ) = O ( n l o g b a ( l g n ) k ) f(n) = O(n^{log_{b}^{a}}(lgn)^k) f(n)=O(nlogba(lgn)k) 树根开销为叶子开销的 l g n lgn lgn k k k次方倍

其中 k ≥ 0 k\geq 0 k0,整数

S o l u t i o n : T ( n ) = Θ ( n l o g b a l g n k + 1 ) Solution:T(n) = \Theta(n^{log_b^a}lgn^{k+1}) Solution:T(n)=Θ(nlogbalgnk+1)最终结果多乘以一个树高的k次方

(3) f ( n ) = O ( n l o g b a + ϵ ) f(n) = O(n^{log_{b}^{a}+\epsilon}) f(n)=O(nlogba+ϵ) 叶子开销小于树根开销

需要额外满足 a f ( n / b ) ≤ c f ( n ) af(n/b)\leq cf(n) af(n/b)cf(n)

T ( n ) = Θ ( f ( n ) ) T(n)=\Theta(f(n)) T(n)=Θ(f(n))树根量级

4.3.2 Conclusion

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-syc8impv-1654484649512)(CH4%EF%BC%9ARecurrences.assets/image-20220606103532574.png)]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Blanche117

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值