动态规划 0-1背包问题最优子结构的证明(包你看懂!!!)

背景

刚刚考完《数据结构与算法分析》这门课的期末考试,其中有一道证明题——0-1背包问题最优子结构的证明。因为当时上课的时候便比较“懵懂”,复习时候也没有认真看(个人对于ppt的证明过程抱有疑惑,现在回过头来看只是省略了一些介绍而已……太过于遗憾),果然拉垮了。但是本着至少要做到考后100分,便百度搜了搜,结果发现很少有人能够简单明了地证明这个正确性,自己思考了一番,有了自己的答案。

证明过程

0-1背包问题: 给定n中物品和一个背包,物品i的重量是wi,其价值为vi,xi代表是否选择这个物品(xi=1或0),背包的容量为C。如何选择装入背包的物品,使得装入背包中物品的总价值最大?

0-1背包问题等价于一个整数规划问题:

max ⁡ ∑ i = 1 n v i x i \max \sum\limits_{{\rm{i = 1}}}^n {{v_i}{x_i}} maxi=1nvixi
s . t . { ∑ i = 1 n w i x i ≤ C x i ∈ { 0 , 1 } , 1 ≤ i ≤ n ( ∗ ) s.t.\left\{ \begin{array}{l} \sum\limits_{i = 1}^n {{w_i}{x_i} \le C} \\ {x_i} \in \{ 0,1\} ,1 \le i \le n \end{array} \right.(*) s.t.i=1nwixiCxi{0,1},1in()

最优子结构:原问题的最优解包含子问题的最优解。

画重点了!!!!下边是证明:

———————————————————————————————————————————————————————

设(y1,y2,⋯,yn)是(∗)的一个最优解,则(y2,y3,⋯,yn)是下面子问题的最优解:
max ⁡ ∑ i = 2 n v i x i \max \sum\limits_{i = 2}^n {{v_i}{x_i}} maxi=2nvixi
s . t . { ∑ i = 2 n w i x i ≤ C − w 1 y 1 x i ∈ { 0 , 1 } , 2 ≤ i ≤ n s.t.\left\{ \begin{array}{l} \sum\limits_{i = 2}^n {{w_i}{x_i} \le C - {w_1}{y_1}} \\ {x_i} \in \{ 0,1\} ,2 \le i \le n \end{array} \right. s.t.i=2nwixiCw1y1xi{0,1},2in

证明:(反证法)假设(z2,z3,⋯,zn)是上述子问题的最优解,即(y2,y3,⋯,yn)不是子问题的最优解——不存在最优子结构则:

∑ i = 2 n v i y i ≤ ∑ i = 2 n v i z i w 1 y 1 + ∑ i = 2 n w i z i ≤ C \begin{array}{l} \sum\limits_{i = 2}^n {{v_i}{y_i} \le } \sum\limits_{i = 2}^n {{v_i}{z_i}} \\ {w_1}{y_1} + \sum\limits_{i = 2}^n {{w_i}{z_i}} \le C \end{array} i=2nviyii=2nviziw1y1+i=2nwiziC
则有
∑ i = 1 n v i y i ≤ ∑ i = 2 n v i z i + v 1 y 1 \sum\limits_{i = 1}^n {{v_i}{y_i} \le } \sum\limits_{i = 2}^n {{v_i}{z_i}} + {v_1}{y_1} i=1nviyii=2nvizi+v1y1
说明(y1,z2,z3,⋯,zn)是比(y1,y2,y3,⋯,yn)更优的一个解,与原假设矛盾!

解决你的疑惑

有的人会这么认为(我最开始也是这个疑惑):

假如面对第n个物品时候,背包剩余空间为5,此时第n个物品为占据空间6,价值为10的物品,可以将原来背包里面占据空间为1的,价值为2的物品换出来啊!并把第n个物品加进去,这样总价值多了10-2=8,这不就说明没有最优子结构了么?

而实际上,当你不考虑第n个物品时候(即在子问题中),你的背包容量也是将第n个物品所占体积减去后的容量(记住这句话,看完后面后可以回来再体会一下)

再看这个公式
s . t . { ∑ i = 2 n w i x i ≤ C − w 1 y 1 x i ∈ { 0 , 1 } , 2 ≤ i ≤ n s.t.\left\{ \begin{array}{l} \sum\limits_{i = 2}^n {{w_i}{x_i} \le C - {w_1}{y_1}} \\ {x_i} \in \{ 0,1\} ,2 \le i \le n \end{array} \right. s.t.i=2nwixiCw1y1xi{0,1},2in

应该这样理解:
当你面对所有n个物品时,选择了一号物品即y1=1时,他的子问题便是背包总空间减去w1y1时候,选择后n-1个物品的最优解。就像上面疑惑中举出的例子,说明总体最优解包含第n个物品,说明在选择前n-1个物品的最优解时(子问题),此时背包容量仅为最初容量减去6,并考虑此时的最优解,此时的最优解也一定不会包括那个被“替换”出去的占据空间为1的,价值为2的物品,因为选择这件物品的话,面对第n个物品最后的空间会为5,而非要求的6(总体最优解中面对第n个物品时候需要的剩余容量)。

  • 29
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值