1.动态规划的定义
动态规划,dynamic Programming,是一种高效解决问题的方法,使用与具有重复子问题和最优子结构的问题。
2.动态规划的核心简单解释
一句话:Those who cannot remember the past are condemnde to repeat it.
一段对话:
A * "1+1+1+1+1+1+1+1 =?" *
A : "上面等式的值是多少"
B : *计算* "8!"
A *在上面等式的左边写上 "1+" *
A : "此时等式的值为多少"
B : *quickly* "9!"
A : "你怎么这么快就知道答案了"
A : "只要在8的基础上加1就行了"
A : "所以你不用重新计算因为你记住了第一个等式的值为8!"
动态规划算法也可以说是 '记住求过的解来节省时间'
3.动态规划最重要的工具
表格,对于动态规划而言,最重要的是记录之前的运算结果。而表格恰好可以做到这一点,表格之间的位置关系可以很好的记录计算结果之间的关系,从而达到存储的目的。
以背包问题为例(出自算法图解)
假如有一个小偷,现在他来到了一家商店准备年底冲业绩,店里有三件商品可以偷,分别是吉他(1磅)1500元 笔记本电脑(3磅)2000元
音响(4磅)3000元 小偷的只有一个背包(容量4磅),该如何拿才能获得最高业绩。注意,这里的商品都是不可分割的,所以贪心算法行不通。
下图可以很好的解释动态规划的原理
4.何时使用动态规划
a.问题要求最优解;
b.问题可以拆分若干小问题;
c.问题之间存在重叠的子问题。
还没有系统的学习过dp,所以只能借鉴CSDN大佬们的文章先了解一下。