动态规划 和 贪心 的区别 (费曼学习法)
你有两个碗,来了一个人跟你说五块钱收,你卖了;又来一个十块收,你又卖了,傻傻的逢人就卖,这是贪心。
但是来了第三个人,他说里面有一个是 “ 乾隆年间年制黄地珐琅彩龙纹瓷碗”,六百万收。但你手里没有碗了 —— 局部最优解没有达到整体最优解。
-----
所以:
动态规划不能只求局部最优解,因为会出现“弃卒保车”的情况,也就是当前的最优解不一定长远的最优解
贪心算法只能求局部最优解,通过局部最优解去达到整体最优解。而这要求局部子问题之间是相互独立的,互相不会影响。
贪心问题里,关键就是,不会出现“弃卒保车”的情况,也就是舍小保大。
如果出现了,贪心就不能处理了 —— 需要动态规划。
----
继续上个例子:
你明明可以挣六百万 零 五块 的,但只挣了十块。
所以为了避免“占小便宜吃大亏” 的情况,得记录一下,一直不卖。
记录卖给每一个人的钱, 汇总一下所有卖法的 利润,在里面挑利润最大的,择优录取,这就是动态规划。
而这个“记录”的纸,在算法代码里,就是创建一个数组(一种记录数据的数据结构),把不同情况的解存下来,在里面找最大值。
----
问题到这里已经结束了。最后打个官腔:
总结来说,
贪心算法适用于每一步的选择相互独立或只依赖于当前状态的情况,每一步都选择当前状态下的局部最优解,但不能保证得到全局最优解。
而动态规划适用于具有最优子结构且有重叠子问题且需要考虑历史信息的情况。
所以动态规划通常能得到全局最优解,而贪心算法可能只能得到局部最优解。
局部最优解汇总起来,是全局最优解的一种特殊情况。(两者作为答案重合时)
----
后记:
这是同学随便问了一句,我在微信上直接码的。过程很愉悦,很享受。
感觉自己真的是在探索知识,享受知识带来的乐趣,极大的满足了好奇心,和认识规律带来的愉悦感与价值感。
费曼学习法的实际应用。很爽。