对动态规划的简单理解(19.3.23~19.3.29)

一.动态规划概念

动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
由于刚刚学完贪心算法,所以在刚开始学动态规划时我就有些懵,有这么一个疑惑,就是这个动态规划和贪心算法有什么不同么?在看了一些例题之后,我逐渐理解这二者的区别,接下来举个例子。

二.动态规划与贪心算法区别

动态规划算法中,每步所作的选择往往依赖于相关子问题的解。因而只有在解出相关子问题后,才能作出选择。
而在贪心算法中,仅在当前状态下作出最优选择,即局部最优选择。然后再根据局部最优选择作出这个选择后产生的相应的子问题。
可能只有文字叙述不太直观,我画了个草图,一起来分析一下(字丑别介意哈,想着横向放置,不知道怎么就纵向放置了,不太会调,先将就一下吧)
题目要求:从1到8,找到相加之和最小的路径,例如1—2—6—8,总和为14.
在这里插入图片描述
如果根据贪心算法来做,那就要找局部最优解,从1开始分析,三条路径,值最小的一条路径为5,那么就是从1—4,之后再分析4的路径,发现4—6的路径值最小,值为10,最后6—8,值为4。那么我们可以得到总的路径为1—4—6—8,总和为19,显然答案是不对的。
那么我们用动态规划来做,1—2的路径值为7,1—3的路径值为6,1—4的路径值为5,保存这些数据,再往下下继续分析2—6,2—7,3—5…的值,再与前一段的值相加,保存数据,以此类推,最后发现1—2—7—8的路径值最小,值为12,就是正确答案。
从上述推演过程中可以得知动态规划的算法每次都保留所有可能的最优解,那总体最优肯定包含着局部最优。而构成整体最优不一定是由当前最优解构成的。因此需要对全部解决方案进行标记。这就是动态规划与贪心算法的本质区别

三.举例

由于对动态规划题做得还是不多(就是菜啊),这里就放几个大佬对几类经典例题的题解(链接在下方)具体的一些动归题分析将会在(下周)进行详解
1.递归
https://blog.csdn.net/SongBai1997/article/details/83690866
2.背包问题
http://love-oriented.com/pack/
3.区间
http://blog.csdn.net/woshi250hua/article/details/7969225

四.心得体会

经过这一周对动态规划的了解,我结合题目总结了几个特点
1.动态规划是用来求一个问题的最优解(但不同于贪心算法)
2.动态规划的整体问题最优解依赖于各个子问题的最优解
3.动态规划把大问题分解成许多小问题,这些小问题中可能还夹杂着复杂的重叠关系,这就需要我们去分析判断。
4.为了避免重复求解子问题,我们可以从上往下分析问题,从下往上解决问题,从小问题开始,先解决复杂的小问题并存储数据,然后再拓展到大问题当中。
(由于我还没真正理解透彻这个动态规划,对一些经典例题还有一些不太明白的地方,因此此次并未与之前一样举例验证上述几个特点,下周我会继续研究一下这个动态规划,将思考总结,应会有所收获)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值