动态规划—0-1背包问题(最易理解的讲解)

断了今生、忘了曾经 提交于 2019-12-08 11:29:59

         0-1背包问题是最广为人知的动态规划问题之一,拥有很多变形。尽管在理解之后并不难写出程序,但初学者往往需要较多的时间才能掌握它。小编写这篇文章力争做到用通俗易懂的语言,最少的公式把0-1背包问题讲解透彻。

         喜欢的小朋友,请与我多多交流哦~~~~

    

         请允许我从一则故事说起…………

         话说Lucy带着她的亲友团去沙漠寻求宝藏,经过几天几夜的长途跋涉,终于在沙漠的那一边发现了一堆个大无比、闪闪发光的钻石,一共有n个。可惜的是他们身上只有一个能装钻石的背包,背包的容量为WLucy兴奋之余,在一堆钻石中挑出突出的钻石编号排列:0,1,2,3……,n-1。第i个宝石对应的体积和价值分别为w[i]v[i]。排好后Lucy开始思考,和向他的亲友团求助:背包总共只能装下体积为W的东西,那我要装下哪些钻石才能使我们获得最大的利益呢?

          “很简单,用动态规划呀,那样我们就能获得最大的利益了”Bill斩钉截铁的回答,他边说着边用木棍在沙漠上笔画着。

PS以上故事情节纯属虚构,若有模仿者,小编概不负责哦!请读者细细听下文讲解。

               

                说时迟那时快,Bill将挑出的5个钻石编号钻石,假设背包的容量范围在[0,17],问题示例物品的价值和重量如下表


               

          现在Bill考考读者,通过可放和不可放表,是不是就能罗列出在背包容量值固定,放入哪个编号的钻石,使获得价值量最大呢?


        

     “我知道,我知道,这个智商大于0的人都知道”,聪明伶俐的Lucy抢先回答。看看我是如何计算的吧。


                       

                       讲解:当w=3时,我只能放v<=3的钻石,对应着钻石的价值和重量表,很容易发现价值量为4w=4同理;当w=7时,把体积v=3的钻石放入背包(然后背包剩下4的容量,可以装下第二个钻石,那还等什么麻利的装进背包呀!)此时背包放入的是编号为12钻石,价值量c=9。我想智商等于0的也知道,当我放入编号3钻石时,价值量c=10比上一步装法所获得的价值更大,于是乎接下来你知道怎么做了!

                      通过详细的列表求最优价值量,Lucy惊喜的发现一个规律,迫不及待的想分享给大家计算公式


                       聪明的你和Lucy一样能发现:

  • 判断条件一:假设背包的容量值w=0或没有钻石i=0,那么最优价值量c=0;
  • 判断条件二:假设第i个钻石wi不能放入背包中(wi>w时),那存在第i-1个钻石能放入背包中,可直接求解c[i-1,w]子问题的最优解。
  • 判断条件三:假设第i个钻石的wi能放入背包中(wi<=w时),那么在

c[i-1,w-wi]+vi 和c[i-1,w]中比较,求得较大值作为最优解。


番外:通过上文分析,Lucy 和她的亲友团背着钻石走出了沙漠,成为富有的人,过上幸福快乐的生活。




易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!