动态规划初识
来源:互联网 发布:九寨沟 几月 知乎 编辑:程序博客网 时间:2024/04/24 07:48
首先,这是大学生涯第一篇博文。
想要学习动态规划的同学,推荐一篇入门级且极具趣味的一篇博客
【通过金矿模型介绍动态规划】,该文略长,但是通俗易懂,终于解决了之前我在看书中的几个疑虑:
(1)如果全递归,那么它的效率体现在哪?
(2)什么情况下使用动态递归?
先帖上地址:【通过金矿模型介绍动态规划】
建议先看完这篇不错的博客再看着两个问题以及思考。
对于第一个问题,由于动态规划是由母问题衍生子问题,体现了分治思想,但同时在子问题中事实上包含了大量的重复解,那么突破效率的关键点就在于,将先遍历过的解尝试放在一个空间内(比如数组),然后在探索过程中先行检查所要的答案是不是已经在这个空间了?如果是,则直接取出避免重复递归;若不是,则继续我们的递归。
对于第二个问题,作者给出了六个维度,如果遇到的问题满足下面所写的其中四点以上,那么可以用动态规划来解决:
① 最优子结构
通过子问题的优化可以达到母问题的优化,达到这样效果的子结构我们称为最优子结构。
② 子问题重叠
事实上,每个子问题都在面临同样的问题,而每个问题其实都包含了一些共同的问题和选择,那么这些选择就称为子问题重叠。
③ 边界
既然使用了递归,熟悉递归的同学都知道一定要有边界,否则就是无限循环,所以定义边界是问题的终止点。
④ 子问题独立
母问题在面对子问题选择时,当前被选择的两个或N个子问题不被互相干扰时候,我们称之为子问题独立。
⑤ 做备忘录
每个子问题求解出来的结果被保存在备忘录(在上述所说的数组中),以便下一个递归时优先查找该备忘录。若没有这项,动态规划的时间效率没有丝毫提高!
⑥ 时间分析
这块算法知识还需要提高,目前还有一个疑问就是,动态规划针对每个节点超过2个的情况同样适用么?它和树结构有什么区别?算法入门中,等到想清楚了再来更新。欢迎大家讨论~
- 初识动态规划算法
- 动态规划初识
- 初识动态规划
- 动态规划初识
- 动态规划初识
- 动态规划初识
- 初识动态规划
- [Dynamic Programming] 初识动态规划
- 动态规划学习系列——数位DP(初识)
- 初识动态规划-最长不上升子序列
- 动态规划!!!动态规划!!!
- 动态规划初识(从dfs到dfs优化到动态规划顺推和逆推)
- 分数规划初识
- 初识分治法,动态规划——中位数,Gray码与零钱问题
- 初识动态规划算法,求解最长非递增子序列【DP算法】
- 动态规划
- 动态规划
- 动态规划
- windows下命令行模式中cd命令无效…
- python+ctypes枚举windows设备为XML树
- JVM源码下载
- MyEclipse8.0多款插件安装方法
- linux安装配置jdk1.5、tomcat5.5、eclipse3.2详解
- 动态规划初识
- 手机键盘
- ORA-01157报错"cannot identify/lock data file" ORA-01219:database not open:queries allowed on fixed
- 深入剖析JVM工作原理和特点 .
- 通过nfs共享目录
- Bloom Filter概念和原理
- JavaScript定义对象的几种方法
- 数据结构——约瑟夫生者死者问题
- 利用ListView进行分页