集训日志(三) 动态规划
来源:互联网 发布:淘宝送一个月优酷会员 编辑:程序博客网 时间:2024/05/31 06:24
一、基本概念
动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。
二、基本思想与策略
基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。
由于动态规划解决的问题多数有重叠子问题这个特点,为减少重复计算,对每一个子问题只解一次,将其不同阶段的不同状态保存在一个二维数组中。
与分治法最大的差别是:适合于用动态规划法求解的问题,经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)。
三:解题的一般思路
1、将原问题分解为子问题
把原问题分解为若干个子问题,子问题和原问题形式相同或类似,只不过规模变小了。子问题都解决,原问题即解决。且子问题的解一旦求出就会被保存,所以每个子问题只需求一次。
2、确定状态。
在用动态规划解题时,我们往往将和子问题相关的各个变量的一组取值,称之为一个“状态”。一个状态对应于一个或者多个子问题,所谓某个状态下的值,就是这个状态对应的子问题的解。所有状态的集合,构成问题的状态空间。状态空间的大小,与动态规划解决问题的时间复杂度直接相关。整个问题的时间复杂度就算状态乘以计算每个状态所需要的时间。状态的选择要满足最优子结构和无后效性。
3、确定一些初始状态的值。
定义出什么是状态,以及在该状态下的值后,就要找出不同的状态之间如何迁移――即如何从一个或多个值已知的状态,求出另一个状态的值(“人人为我”递推型)。状态的迁移可以用递推公式表示,此递推公式也可被称作“状态转移方程”。
4、确定状态转移方程,给出边界条件。
给出的状态转移方程是一个递推式,需要一个递推的终止条件或边界条件。
能用动态规划解决的问题特点:
1) 问题具有最优子结构性质。如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质。
2) 无后效性。当前的若干个状态值一旦确定,则此后过程的演变就只和这若干个状态的值有关,和之前是采取哪种手段或经过哪条路径演变到当前的这若干个状态,没有关系。
- 集训日志(三) 动态规划
- 【集训Day4 动态规划】蛙人
- 动态规划若干优化 & 集训部分总结
- 暑假集训-训练6 动态规划初步
- 【集训Day4 动态规划】轮船问题
- 动态规划示例三
- 动态规划三
- 动态规划入门<三>
- 动态规划(三.LCS)
- 动态规划之三
- 寒假集训作业(6)——动态规划初步
- 暑假集训第四周 周三赛A - 命运 动态规划
- 7.19 暑期集训——动态规划篇(一)
- 7.21 暑假集训——动态规划篇(二)
- 【集训Day 4 动态规划】质数和分解
- 【三】离散化动态规划
- 动态规划问题详解(三)
- leetcode之动态规划(三)
- Android开发————Android ListView使用BaseAdapter与ListView的优化
- Codeforces Round #235 (Div. 2) D. Roman and Numbers (数位dp、状态压缩)
- Leetcode 4Sum 性能瓶颈之容器析构
- 大理:夫妻客栈内杀死女儿后投洱海自尽
- sqlserver中删除数据表中重复的数据或是某一列中重复的字段,紧保留一条数据
- 集训日志(三) 动态规划
- OC中的instancetype和id区别
- android面试准备2
- Oracle建表主键策略
- 欧拉回路的典型应用
- POJ 2299-Ultra-QuickSort (树状数组+离散化)
- poj 2942 求点双联通+二分图判断奇偶环+交叉染色法判断二分图
- J2EE之初识JSP
- [亲测] 解决在 ubuntu14.04 安装完 vmware 后,启动出现下列问题的解决方案