算法导论 15章 动态规划

动态规划与分治法区别:

动态规划应用于子问题重叠的情况(子问题是递归求解的),分治法会反复求解公共子问题,动态规划将子问题的解保存到表格中,无需重新计算。

动态规划应用领域:

 动态规划方法通常用来求解最优化问题。这类问题可以有很多可行解,每个解都有一个值,我们希望寻找具有最优值(最小值或最大值)的解。我们称呼这样的解为问题的一个最优解,而不是最优解,因为可能有多个解都达到最优值。

动态规划的步骤:

  1. 刻画一个最优解的结构特征。
  2. 递归地定义最优解的值。
  3. 计算最优解的值,通常采用自底向上的方法。
  4. 利用计算出的信息构造一个最优解

钢条切割

自顶向下递归实现

运行时间为指数

动态规划是付出额外的内存空间来节省时间空间,是典型的时空权衡

动态规划有两种等价的时间算法

  1. 带备忘的自顶向下法

    仍按自然地递归形式编写过程,但过程会保存每个子问题的解(通常为数组或散列表)。求子问题解释,先检查是否保存过此解。

  2. 自底向上法

    当求解某个子问题时,所以来的更小的子问题已求解。

子问题图

重构解
扩展动态规划算法,使其还能保存切割方案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值