动态规划分析和代码实现(Java版)

本文介绍了动态规划的概念,通过金矿模型解释了动态规划的原理,包括子问题重叠、无后效性和最优子结构。文章详细阐述了解决动态规划问题的四个关键点,并以0-1背包问题为例,展示了状态转移方程`V[i][w]=Max{ V[i-1][w] , V[i-1][w-w[i]]+p[i]}`。最后,讨论了动态规划问题在编程实现时的正推方法,并强调了分析问题时的倒推思路和解决问题时的正推策略。" 102957370,1779265,iOS网络面试:TCP特性、三次握手与四次挥手解析,"['iOS开发', '网络协议', 'TCP/IP']
摘要由CSDN通过智能技术生成

动态规划
动态规划问题可以通过通过金矿模型介绍动态规划很好的解释其中的原理,在理论上,动态规划问题的关键点用通俗的语言来说就是,现在有一个大问题,不好解决,为什么呢?因为这个大问题有很多小问题组成,这些小问题之间不是相互独立的,而且是一个是另一个的解决的基础,这就是所谓的子问题重叠,子问题重叠,我们就不能简简单单的通过分治算法来解决问题了,必须得分析其中的相关联因素。
目前的情况是这样的,我们已经知道这个大问题,由很多小问题组成,小问题之间又有相互的关联,就比如说,我们制订了一种方案,这种方案恰好可以通过如图所示的次序
这里写图片描述

来完成我们的开采,使得人力资源不至于浪费,使用到最大程度的同时,挖到最多的金矿,我们在没有制定方案的时候就已经知道了整个过程的最初和结束状态,而整个行动的过程,就是我们制定决策的过程,在这个过程之中,我们要对问题按照时空特性进行划分阶段,划分后的每个阶段是有序的或者可排序的,即某阶段状态一旦确定,就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关,这叫做无后效性
现在,我们将问题进了分解,将大问题分解成了小问题,而且对问题划分了阶段,那么我们如何保证我们这样做得到的答案是最优的呢?这就是最优子结构,就是说,如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理,很明显,就拿挖矿模型来说,一座金矿,我们认定的是,要么挖,要么不挖,我们所做的假设只有一种会被国王所采纳,这就满足了子问题独立,一个人的决定对另一个人的决定是没有影响的,所以,我们要么得到在小于总人力的情况下的金矿的最大价值,只能当前第10座金矿的情形下,比较如果不挖掘的(以前挖掘的9座金矿(总人力的情况下))价值和(挖掘第10座金矿+以前挖掘的9座金矿(总人力的情况下-第10座金矿需要消耗的人力))的价值谁更大,我们就采取那种方式,很显然,自信的国王相信,只要他的两个大臣能够回答出正确的答案(对于考虑能够开采出的金子数,最多的也就是最优的同时也就是正确的),再加上他的聪明的判断就一定能得到最终的正确答案。我们把这种子问题最优时母问题通过优化选择后一定最优的情况叫做最优子结构。所以这也是符合最优子结构的,如此而言,动态规划的三个要点,子问题重叠,无后效性,最优子结构就展现在了我们面前。
我们在具体解决问题的时候需要注意的有4点:1.划分阶段:按照问题的时间或空间特征&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值