动态规划算法

动态规划是什么玩意

先来举个栗子。

有对兄弟,哥哥学编程,弟弟什么也不会,有一天,他们去买东西,每个东西都有价值和重量,他们只能拿一定的重量,比如15kg,而有一个游戏机,重量是12,价值是13,一个手机,重量是5,价值8,一个遥控车,重量4,价值6,还有一个遥控飞机,重量8,价值8,那么你会选哪几个物品使得总价值最大?弟弟说:"这不简单嘛,选价值最大的呗",于是,他选了游戏机,总价值13,哥哥笑了:"考我对算法的运用来着,这不简单嘛。"于是他选了手机,遥控飞机,总价值16,弟弟蒙了:"什么?我明明选择了最大价值的游戏机,怎么价值反比他小?"

你猜猜,擅长编程的哥哥为什么这么选嘛?他用了什么算法呢?

弟弟所使用的贪心算法大家应该都了解,这讲将会讲诉哥哥用的算法:动态规划

动态规划,也就是DP,他的思想就是将这个问题变成规模较小的问题,比如上面所说的问题,就可以这么想:我本来是限重为15,有四个物品,可以把它变成限重为14,有三个物品等等,能这么分的问题就叫重叠子问题,也是要用DP求解的问题所具备的条件之一,而且要通过小问题推出大问题的解,也就是这道题有最优子结构,而且,当前的子问题只会通过前面的子问题推导而来,跟后面的更大的子问题乃至原问题没半毛钱关系,这就叫无后效性。

一个问题只要具备重叠子问题、最优子结构、无后效性,他就可以用DP求解。

动态规划咋用呢

还是以上面的例子来说明,首先把它分成一个个子问题,从最小的子问题开始求解,就是容量为一的时候如何求解?那这个时候四个东西都放不进去,再看看容量为2的时候,还是放不下任何东西,价值为0,再一直到重量为4的时候,当前仅可放下遥控车,价值为6,到了重量为5的时候,不但能放下玩具车,还可以放下手机,也就比较一下,把价值更新为8,到重量为8的时候,如果价值相等的话选重量小的那个,还是8,到了重量为9的时候那么就可以选车车加手机,价值更新为14,到了12kg的时候选游戏机价值为13,没14大,价值不变,到了14kg的时候玩具飞机比车价值更大换掉车,所以最后价值为16。

讲完了,是不是真简单?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值