动态规划算法(这个算法重点在于如何拆分问题,也就是找到你解决问题的有效子问题)

一.什么是动态规划?

动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,创立了解决这类过程优化问题的新方法——动态规划。

二.动态规划的核心是什么?

最优化原理”是动态规划的核心,所有动态规划问题的递推关系都是根据这个原理建立起来的,并且根据递推关系依次计算,最终可求得动态规划问题的解。

用例子说明说明如何用动态规划解决0.1背包问题:

有3个物品,背包容量为10,物品体积与如下:

先说划分子问题的方式:

(1)把第n-1块物品放入包后求背包的最大值问题当做把第n-1块物品放入包后求背包的最大值问题的子问题。(错误的)

(2)把n-1背包容量问题当成是n背包容量的子问题(正确的

那么可以发现第二种划分子问题的方式才是有效的划分了子问题方式。

 

现在我们就可以用第二种划分子问题的方式来求背包的最大值:

(1)第一步,求背包容量为1时,找出放入物品价值最大方案。

(2)第二步,求背包容量为2是找出放入物品价值最大方案。(我们拿背包容量为1的时候价值背包容量为1再放入物品后的价值比较,那个价值大,那个就是背包容量为2的放入物品价值最大方案)

(3)第三步,求背包容量为3是找出放入物品价值最大方案。(我们拿背包容量为2的时候价值背包容量为2再放入物品后的价值比较,那个价值大,那个就是背包容量为3的放入物品价值最大方案)

           ....

(4)第十步,求背包容量为10是找出放入物品价值最大方案。(我们拿背包容量为9的时候价值背包容量为9再放入物品后的价值比较,那个价值大,那个就是背包容量为9的放入物品价值最大方案)

 

此时我们的第十步就求出了背包容量为10,放入物品价值最大的方案,(下面具体用代码实现就很简单了,不列出)

 

三.动态规划数学模型:(一般使用动态规划不需要建立动态规划数学模型,感兴趣可以看看。动态规划数学模型转载:http://dec3.jlu.edu.cn/webcourse/t000048/yun/ch5_03.htm):

一般来说,利用动态规划求解实际问题需先建立问题的动态模型,具体步骤如下:

⒈将问题按时间或空间次序划分成若干阶段。有些问题不具有时空次序,也可以人为地引进时空次序ÿ
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值