4分治

  • 2.3.1中介绍了归排
    • 他用分治
  • 分治策略中:
    • 递归求解一个问题
    • 每层递归中用如下三个步骤:
  • Divide分解步骤将问题划分为一些子问题
    • 子问题形式与原问题一样,只是规模更小
  • conqure
    • 解决步骤递归地求解出子问题。
    • 如果子问题足够小,则停止递归,直接求解
  • 合并
    • 将 子问题的解组合成原问题的解

  • 子问题大时,需递归求解,称为递归情况。
    • 当子问题变小,不需递归时,说递归已触底,进入基本情况。
    • 有时,除了与原问题形式一样的更小的子问题外
    • 还需求解与原问题不完全一样的子问题
      • 将这些子问题看作合并步骤的一部分

  • 本章更多分治策略
  • 最大子数组问题
  • 两个 n × n n\times n n×n矩阵乘法的分治算法
    • 一个运时 Θ ( n 3 ) \Theta(n^3) Θ(n3),不优于平凡算法
    • 另一Strassen算法 运时 Θ ( n 2.81 ) \Theta(n^{2.81}) Θ(n2.81)
      • 渐进时间复杂性击败平凡算法

递归式

  • 递归式与分治方法是紧密相关的
  • 使用递归式可以很自然地刻画分治算法的运行时间
  • 如2.3.2节,用下面描述MERGE-SORT过程的最坏运行时间为 T ( n ) T(n) T(n)
    T ( n ) = { Θ ( 1 ) 若 n = 1 2 T ( n / 2 ) + Θ ( n ) 若 n ≥ 2 (4.1) T(n)=\left\{ \begin{aligned} \Theta(1) & 若n=1\\ 2T(n/2)+\Theta(n)& 若n\ge 2 \\ \end{aligned} \right. \tag{4.1} T(n)={Θ(1)2T(n/2)+Θ(n)n=1n2(4.1)
    求 得 T ( n ) = Θ ( n l o g n ) 求得T(n)=\Theta(nlogn) T(n)=Θ(nlogn)
  • 递归式可以有很多形式
    • 如可将问题划分为2/3和 1/3
    • 如果分解和合并步骤都线性时间
    • 则有 T ( n ) = T ( 2 n / 3 ) + T ( n / 3 ) + Θ ( n ) T(n)=T(2n/3)+T(n/3)+\Theta(n) T(n)=T(2n/3)+T(n/3)+Θ(n)
  • 子问题不必是原问题的一个固定比例。
    • 如线性查找的递归版本(练习2. 1-3)仅生成一个子问题,
    • 仅比原问题的规模少1
    • 每次递归调用将花费常量时间
      • 再加上下一层递归调用的时间,
    • 递归式为 T ( n ) = T ( n − 1 ) + Θ ( 1 ) T(n)= T(n -1)+\Theta(1) T(n)=T(n1)+Θ(1)

三种求解递归式的方法

  • 介绍三种求解递归式方法,即得出算法的“ Θ \Theta Θ”或“ O O O”渐近界的方法:

  • 代入法: 猜一个界,然后用数学归纳法证明这个界正确。

  • 递归树法: 将递归式转为棵树,

    • 结点表示不同层次的递归调用产生的代价。
    • 然后用边界和技术来求解递归式。
  • .主方法: 求下面公式的递归式的界:
    T ( n ) = a T ( n / b ) + f ( n ) (4.2) T(n) = aT(n/b) + f(n)\tag{4.2} T(n)=aT(n/b)+f(n)(4.2)

    • 它刻画了一个分治算法生成 a a a个子问题,
      • 子问题都是原问题的 1 / b 1/b 1/b,
      • 分解和合并总共花费时间为f(n)
    • 为用主方法,要熟记三情况
      • 掌握此法, 确定很多简单递归式的渐近界就很easy。
    • 本章用主方法确定
      • 最大子数组和矩阵相乘的分治算法的运时
      • 书中其他用分治策略也用主方法分析
    • 有时也会遇到不等式的递推哦

递归式技术的细节

  • 会略取向下取整,边界条件等

4.1 最大子数组问题

获得投化学公司

暴力求解方法

4.2 矩阵乘法的Strassen算法

4.3 用代入法求解递归式

4.4 用递归树方法求解递归式

4.5 用主方法求解递归式

4.6 证明主定理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

fgh431

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

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

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

打赏作者

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

抵扣说明:

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

余额充值