动态规划总结

动态规划是一种通过解决子问题来求解复杂问题的方法,它避免了分治法中的重复计算。文章介绍了动态规划的四个设计步骤:1)最优子结构的刻画;2)递归定义最优解;3)计算最优解;4)构造最优解。并以钢条切割问题为例,详细解释了动态规划的应用,展示了如何通过自底向上的方法优化时间复杂度。同时,文章还探讨了动态规划的两个关键要素:最优子结构和重叠子问题,并通过矩阵相乘的例子进一步加深理解。
摘要由CSDN通过智能技术生成

  动态规划(Dynamic Programming, DP)思想启发于分治算法的思想,也是将复杂问题化解若干子问题,先求解小问题,再根据小问题的解得到原问题的解。但是DP与分治算法不同的是,DP分解的若干子问题,往往是互相不独立的,这时如果用分治算法求解,那么会对重叠子问题重复进行求解,从而使得浪费大量的时间。那么如果我们保存已经计算过的子问题的解,这样当再次计算该子问题时,可以直接使用,这样可以节约大量的时间。

  DP正是利用一个表记录所有已经求解过的子问题的答案,只要一个子问题被求解过,就将其答案保存起来,无论以后的计算是否会用到,这就是DP的基本思想。

  设计动态规划的四个步骤:

  1、刻画一个最优解的结构特征。

  2、递归地定义最优解的值。

  3、计算最优解的值,通常采用自底向上的方法。

  4、利用计算出的信息构造一个最优解。

  动态规划的应具备两个要素:

  1、最优子结构性质。当问题的最优解包含了其子问题的最优解时,称该问题具有最有子结构性质;

  2、重叠子问题性质

  首先看一个算法导论中第一个例子,钢条切割问题

  问题:给定一根长度为n英寸的钢条和一个价格表,求钢条的最佳切割方案,使得销售收益最大。

  对于长度为n的钢条总共有种不同的切割方案。设距离钢条左端i(i = 1,2,....n-1)英寸处为可切割点,那么我们对每个切割点都可以选择切或者不切,则总共有

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值