动态规划算法举例解析(最大收益和最小损失选择)

本文介绍了动态规划与分治算法的区别,强调动态规划在解决子问题重叠情况下的优势。以钢条切割问题为例,展示了动态规划的最优子结构性质,解释了如何构建原问题的最优解。接着,讨论了矩阵链乘法问题,探讨了不同计算顺序对计算量的影响,并提出三种动态规划方法的应用。
摘要由CSDN通过智能技术生成

在说动态规划的例子之前,先说明一下动态规划和分治算法的区别

虽然两者都是通过组合子问题的解来求解原问题但是分治方法将问题划分为互不相交的子问题,递归的求解子问题再将它们的解组合起来求出原问题的解。

而动态规划算法应用于子问题重叠的情况,即不同的子问题具有公共的子子问题,在这种情况下,分治算法会做许多不必要的工作,它会重复的求解这些子问题,尽管这些子问题都曾经计算过。而动态规划算法就聪明了很多,它对每个子子问题都只求解一次。将其解保存在一个数据结构中,从而遇到曾经计算过的子子问题并不是再计算而是从这个数据结构直接取结果即可。

学习动态规划算法,首先要了解最优子结构这个概念

如果一个问题的最优解包含其子问题的最优解,我们就称此问题具有最优子结构性质,一个问题如果可以应用动态规划算法,那么它必然具有最优子结构。在使用动态规划方法时,我们要利用子问题的最优解来构造原问题的最优解。

下面举一个例子,其实也是书上的例子

例子1,如何切割钢条,长度为n的钢条,可以选择切割成多段也可以选择不切割。这完全要依靠收益来看。下面这个表示长度为i的钢条所对应的价格表

长度i       1         2        3         4          5           6          7           8         9      10

价格pi      1        5       8         9          10          17       17         20        24     30

比如一个长度为4的钢条,它的切割情况就有

方案                    收益

(1,3)---------- 9

(2,2)-----------10

(3,1)-----------9

(1,1,2)---------7

(1,2,1)---------7

(2,1,1)---------7

(1,1,1,1)-------4

(4,0)-----------9

这些方案中将长度为4的钢条切割成(2,2)的收益最大,于是企业就会切割了卖。。。。

首先看这个问题满足使用DP的最优子结构的性质。

我们第一次选择切割钢条的问题,剩下的钢条则是与原问题相似的子问题。

其实原问题的最优解就是由第一次切割得到的两段钢条的最优切割方案组成的,符合最优子结构。这里为了尽可能减少子问题空间的大小,切割后剩下的钢条构成一个子问题。剩下的钢条可能还会被切割,也可能不被切割,这里我们不管,我们只要求得在当前切割方案下这个子问题的最优解,与当前切割方案组合最优则能得到原问题的最优切割方案。

对于第一步的切割,你假定已经知道第一部应该如何切割得到最优解了,并且你

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值