细解-动态规划(一)

栏目: 编程工具 · 发布时间: 7年前

内容简介:动态规划我们在工作中会经常用到,有时候你会有这个意识,而且我相信你在项目中肯定使用过,只是你不了解这种方式是“动态规划”而已。它最大的特点就是“空间换时间“。如果你想大致了解下,你可以直接略过细节,直接看“使用动态规划方法求解最优钢条切割问题”这一部分。细节部分,只是使用案例和数学公式教大家怎么去思考问题。举例

动态规划我们在工作中会经常用到,有时候你会有这个意识,而且我相信你在项目中肯定使用过,只是你不了解这种方式是“动态规划”而已。它最大的特点就是“空间换时间“。

如果你想大致了解下,你可以直接略过细节,直接看“使用动态规划方法求解最优钢条切割问题”这一部分。细节部分,只是使用案例和数学公式教大家怎么去思考问题。

举例

A公司购买长钢条,将其切割为短钢条出售(切割工序本身没有成本支出),A公司想知道最佳的切割方案。

假定:给定一段长度为n米的钢条。长度与价格的关系为:i米的钢铁价格为p i (i=1, 2, ...)元。

求:切割钢条方案,使得销售收益γ n 最大。

价格表的样例如下:

细解-动态规划(一)

问题分析

思路:通过假设法,寻找数据间的关系,进行建模。

寻找数据间的关系1:

假设n=4,穷举所有的切割方式,找到最佳的切割方案。

不切(0刀):最高9元

细解-动态规划(一)

1刀:最高10元

细解-动态规划(一)

2刀:最高7元

细解-动态规划(一)

3刀:最高4元

细解-动态规划(一)

从上面的图分析得出

1) n米的钢条共有2 n-1 种切割方案。

2)最优策略方案为:将钢条切割为两段长度均为2米的钢条,总价值为10。

用数学符号开始演练:(我们用加法符号表示切割,如  7 = 2 + 2 + 3,表示为长度7米的钢条切割段数为3段,每段分别为:2米、2米、3米。)

k为最优切割钢条方案中的段数,p i 为i米钢条的价格,钢条切割的最大收益为γ n

细解-动态规划(一)

寻找数据间的关系2:

根据价格表样例,寻找到所有最优收益值及对应的最优切个方案:

总长n 段数k 最优收益值γ 切割方案
1 1 1 1
2 1 5 2
3 1 8 3
4 2 10 2+2
5 2 13 2+3
6 1 17 6
7 2或3 18 1+6或2+2+3
8 2 22 2+6
9 2 25 3+6
10 1 30 10

观察数据:(总长为5米的钢材最优收益是:2米刚才最优收益+3米钢材最优收益加和。)

细解-动态规划(一)

从上述表,我们可以得出:对于γ n (n>= 1),我们可以用更短的钢条的最优切割收益来描述它:

细解-动态规划(一)

对于每个i=1、2、...、n-1,方案步骤如下:

1)将钢条切割为长度为i和n-i的两段;

2)求解这两段的最优切割收益γ i 和γ n-i 。——每种方案的最优收益为两段的最优收益之和。

由于无法预知那种方案会获得最优收益,我们必须考察所有可能的i,选取其中收益最大者。

最优子结构 :为了求解规模为n的原问题,我们先求解形式完全一样,规模更小的子问题。通过组合两个相关子问题的最优解,并在所有可能的两段切割方案中选取组合收益最大者,构成原问题的最优解。

我们称钢条切割问题满足 最优子结构 性质:问题的最优解由相关子问题的最优解组合而成,而这些子问题可以独立求解。

求解简化版本

原有方式:

细解-动态规划(一)

简化版本:钢条从左边切割下长度为i的一段,对左边的一段i不再进行切割,只对右边剩下的长度为n-i的一段继续进行切割(采用了一种自顶向下的递归方式)

细解-动态规划(一)

递归方法CUT-ROD如下:

细解-动态规划(一)

分析CUT-ROD:实际运行中,你会发现CUT-ROD的效率很差。因为CUT-ROD反复地用相同的参数值对自身进行递归调用,即它反复求解相同的子问题,如下图所示:

细解-动态规划(一)

CUT-ROD的运行时间为n的指数,时间复杂度如下:

细解-动态规划(一)

使用 动态规划方法 求解最优钢条切割问题

动态规划方法的核心思想是:对每个子问题只求解一次,并将结果保存下来。如果随后再次需要此子问题的解,只需查找保存的结果,而不必重新计算。因此,动态规划方法是付出额外的 内存空间来节省计算时间 ,是典型的时空权衡的例子。

方法1: 带备忘的自顶向下法 。此方法扔按自然的递归形式编写,但过程会保存每个子问题的解(通常保存在数组或散列中)。当需要一个子问题解时,过程首先检查是否已保存过此解,无则计算,有则返回。

细解-动态规划(一)

方法2: 自底向上法 。将子问题按规模排序,按由小至大顺序求解。当求解某个子问题时,它所依赖的那些更小的子问题都已求解完毕,结果已保存。每个子问题只需求解一次,当我们求解它时,它的所有前提子问题都已经求解完成。

细解-动态规划(一)

子问题图

当思考一个动态规划问题时,我们应该弄清所涉及的子问题及子问题之间的依赖关系。

上面举得n=4时,钢条切割问题的子问题图如下:这是递归调用树的简化版,树中标号相同的节点收缩为图中的单一顶点,所有边均从父节点指向子节点。

细解-动态规划(一)

上面的图中,我们可以把每个顶点向量化,标记为(x,y)。这个表示求解x的问题时候,我们需要子问题y的解。


以上所述就是小编给大家介绍的《细解-动态规划(一)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web 2.0界面设计模式

Web 2.0界面设计模式

黄玮 / 电子工业出版社 / 2013-9-1 / 59

本书集Web 2.0的发展及特点、Web 2.0界面设计模式基本理论、实际模式实践及代码实现等诸多内容于一身,具有很强的实用性。这些内容不是简单的顺序堆砌,而是以Web 2.0界面设计模式和应用为主线,其中完美地穿插了各种与之相关的Web 2.0设计理念、用户行为模式、用户体验及基于Dojo的实现方式等相关知识,真正做到将Web 2.0界面设计模式所需要的方方面面的知识有机地融为一个整体。实现不需......一起来看看 《Web 2.0界面设计模式》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

随机密码生成器
随机密码生成器

多种字符组合密码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具