算法之动态规划初步认识(一)

来源:互联网 发布:建立少数民族数据库 编辑:程序博客网 时间:2024/06/05 10:52

        前一阶段接触了算法,对其中的一个算法我比较感兴趣,也是理解了一段时间,看网上的教程,大多数都是贴一段代码几乎就完事了,其实个人觉得很少有人愿意直接去阅读代码,就算有讲解的,也都是干巴巴的文字,可能我这种笨蛋是看不懂了。自己整理了一下目前理解的。防止以后忘了回来还可以在温习一下,虽然我经常写代码,但我尽量不贴代码,都是图片和图片来讲解,专门给不爱看代码的同学们准备的,其实我也不怎么爱看代码,尤其别人写的还没有注释活着少量注释的代码,浪费时间就是慢性自杀。
       这个动态规划我比较感兴趣是我觉得这个方法解决问题的时候很神奇,而且还可以解决比较复杂的问题。
        那么我们先从入门开始,让我具体解释什么是动态规划,其实我只能照着定义说一遍,我表达也不是很好,所以我们从实际的例子来理解这个算法吧。
       
        有这么一个问题,我就不用背包系列问题了,来点新颖的。
         问题描述:有这么一个箱子,现在用箱子装物品(目前可以装无限质量的物品),每个物品的体积相同,质量相同,但是价格不同,现在问,用这个箱子装物品,怎么装能使得装进去的东西价格总和最大。箱子的体积是10,有10个物品,每个物品的体积是2,质量是2。(其实我们发现质量和体积并没有什么用哈,之后就慢慢有用了)。

这个就是箱子和物品,那么现在我们开始解决问题,先观察,物品体积,质量一样,但是价格不同,那么,我们就谁的价格大就把谁先放到箱子里,那么就给物品按照价格排序,排序结果如下。
 45,37,30,23,22,20,15,14,10,6

根据这个排序,我们从第一个物品开始往箱子里面装,那么,直到把箱子装满,这个最后的结果就是最大值,也就是45+37+30+23+22,这5个物品。什么原理呢。就是先找到这10个物品中价格最大的,是45,然后放到箱子里,再从剩下的物品中选出价值最大的,是37,放到箱子里,以此类推,把箱子装满。

      这个问题以及这个解决方案,是贪心算法,还不是动态规划,我在这里讲是因为要由此引出动态规划,贪心算法就是每次都取最优情况,对于上述问题,每次的最优情况都很好找出。
      那么看下面这个问题,还是这个箱子,体积是10(可以装的质量是无限),有7个物品,每个物品的价格不同,体积也不同,(条件变了),质量相同(目前质量没用可以不用管),请问,如何往箱子里放物品,最终能使得箱子里的物品的总价值最大呢?这时候找出最优解是不是和之前的一样那么容易呢?请看下一期讲解。如果你是大神,不喜勿喷,小白的话就一起学习吧。
0 0
原创粉丝点击