一、动态规划是什么?
将问题分为子问题,并先着手解决这些小问题
二、背包问题
背包问题:现在有四件商品,分别为音响3000美元重四磅,笔记本电脑2000美元重三磅,吉他1500美元一磅,iphone2000美元一磅
现在假设你有一个可以装下四磅的物品,在上面提供的物品中如何是装下的物品价值最大,简单的算法就是尝试各种商品组合,并找出价值最高的组合。
但是这样的话时间复杂度为O(2^n),这样的算法是很慢的,那么如何去优化呢?
三、使用动态规划优化
一·优化过程
对于背包问题,根据动态规划的原理,先解决小背包的问题,在逐步解决原来的问题。
第一行:假设背包大小为一磅,应该如何装,这里很明显只有吉他,因为现在只有这两一个是一磅的这个时候就直接填入表格中对应的位置(物品是一件一件拿过来的,也就是第一行只有吉他,第二行的时候加入音响),然后当背包为两磅的时候,还是只能选择吉他然后多出一磅的空间,因为第一行只有吉他可选,所以后面也都是填入吉他和余下的空间
第二行:这个 时候就多了一个可选的物品,音响,同理可知,到背包为四磅时产生了两个选择,是选吉他余下三磅空间还是选择四磅的音响,因为选择价值最大的,所以填入音响,此时就更新了最大价值3000
第三行:加入了笔记本,笔记本为三磅,在背包为三磅的时候产生了两个选择,是选择三磅的笔记本还是一磅的吉他余下两磅的空间,笔记本两千,按照要求应填入笔记本,当背包为四磅时,比对现存最大价值相加出是都有超过3000美元的,有就更新,没有就不更新。可知有三磅的笔记本加一磅的吉他。
相加为四磅3500美元,更新最大价值。
第四行:加入iphone,当背包为一磅时,就产生了两个选择,iphone或者吉他,iPhone的价值更大,装入iPhone,当背包为两磅的时候装入吉他和iPhone
当背包为三磅的时候吉他加iphone还是比笔记本的价值大,所以继续更新背包为三磅时的最大值,当背包为四磅的时候,这个时候选择一磅的iPhone和三磅的笔记本,这个时候有最大价值4000,更新最大价值。
一·自我思考(个人想法)
核心思想为子问题解决最大问题,
到底是怎么实现查找这样的组合就是最大的呢,如果不恰当的查找,那么还是要花很多的时间,我觉得这个背包问题的思想和狄克斯特拉算法思想很像,就是不断的找这个情况下的最优情况,打个比方,就像把背包1234各种大小当作四个结点,在每个节点下,都有自己的最优路径,一旦找到最优就更新
最大问题是四磅,然后已经找到了一磅两磅三磅的最优解,也就是判断这些空间的最大价值,将他们组合起来就能查找到四磅的最优解也就是四个物品中选择搭配出最大价值的情况
总结
完美是优秀的敌人。