动态规划学习

基本概念
动态规划对于子问题重叠的情况特别有效,因为它将子问题的解保存在表格中,当需要某个子问题的解时,直接取值即可,从而避免重复运算。
动态规划是一种灵活的方法,不存在一种万能的动态规划算法解决给类最优化问题。所以除了要对基本概念和方法正确理解外,还要具体问题具体分析处理,用灵活的方法创建数学模型,用创造性的方法求解。

基本思想和策略
基本思想与分治类似,也是将待求解问题分成若干个子问题,按顺序求解子问题的解,为后一子问题的求解提供有用信息。在求任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题的解就是初始问题的解。
动态规划的子问题往往不是独立的,即子问题重叠。在求解的过程中,子问题的解被反复利用。为了避免重复计算,动态规划算法采用了填表来保存子问题解的方法。

适用情况
两个必备要素:
1. 最优子结构:问题的最优解由相关子问题的最优解组合而成,并且可以独立求解子问题。
2. 子问题重叠:递归问题在反复的求解相同的子问题。

三个性质:
1. 最优化原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。
2. 无后效性:即某阶段状态一旦确定,就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响以前的状态,只与其以前的状态有关。
3. 有重叠子问题:子问题之间是不独立的,一个子问题在下一决策中,可能会被多次使用到。该性质并不是动态规划适用的必要条件,但是如果没有这条性质,动态规划算法同其他算法相比就不具备优势。

求解的基本步骤
1. 分解最优解的性质,并刻画其结构特征,这一步的开始时一定要从子问题入手。
2. 定义最优解变量,定义递归最优解公式。
3. 以自低向上计算出最优解,或自顶向下的记忆化方式,即备忘录法。
4. 根据计算最优值时得到的信息,构造问题的最优解。

例题分析
例一,钢条切割
问题描述:给定一段长度为n的钢条和一个价格表Pi(i=1,2,3…n),求切割方案,使得销售收益最大。例如:
长度i 1 2 3 4 5 6 7 8 9 10
价格Pi 1 5 8 9 10 17 17 20 24 30
分析

描述最优解结构:
设子问题:规模为n时的最优切割利润为r[n],n的值从0到10。显然R[0] = 0。
然后我们选取一种在求解子问题时能囊括所有切割方案的切割方法:我们总是在距离钢条左端j(j可以从0到i-1,到i是没有必要的)处切下,此时我们将钢条切割成了j和n-j两段钢条。
最优子结构描述如下:假设对于子问题Rn我们在其距离钢条左边j的地方切成两段,那么该子问题的最优值必然是两个子问题最优值之和。

递归定义最优解的值
根据上面的分析,显然子问题Rn的最优值为表达式 Rn=max(Rj+Rn-j),1<=j<=n且R0=0
因此,在计算r[n]时,所求值即为r[0]+r[n],r[1]+ r[n- 1],r[2]+ r[n- 2],…,r[n- 1] +r[1]之间的最大值。

按自底而上的方式计算最优解的值
在计算过程中,先计算r[0]到r[i-1]的值,在计算r[i]时,因为已经保存好其该子问题的值了,所以计算r[n]时直接取子问题的值即可,从而减少计算量。

代码编写中。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值