0-1背包问题最优子结构及其证明
在网上搜了半天没有找到合适的证明,因此自己证明了下。不对的地方请各位多多赐教。
最优子结构:
设Z={z1,z2,…,zk}是Knap(1,k,MaxWeight)的最优解,且此时的价值是fk(MaxWeight)
1) 如果zk=1,那么fk-1(MaxWeight - wk) + vk > fk-1(MaxWeight),而且{z1,z2,…,zk-1}是Knap(1,k-1,MaxWeight- wk)的最优解。
2) 如果zk=0,那么fk-1(MaxWeight - wk) + vk <= fk-1(MaxWeight),而且{z1,z2,…,zk-1}是Knap(1,k-1,MaxWeight)的最优解。
证明:
1) 如果fk-1(MaxWeight - wk) + vk <= fk-1(MaxWeight),则有fk(MaxWeight)= fk-1(MaxWeight - wk) + vk <= fk-1(MaxWeight),从而得出Z={z1,z2,…,zk}不是最优解,与前提矛盾。因此fk-1(MaxWeight - wk) + vk > fk-1(MaxWeight)。假设{z1,z2,…,zk-1}不是Knap(1,k-1,MaxWeight- wk)的最优解,则存在一个Xk-1的解使得f2k-1(MaxWeight) > fk-1(MaxWeight),则f2k-1(MaxWeight)+ vk > fk-1(MaxWeight - wk) + vk = fk(MaxWeight),与假设矛盾,所以{z1,z2,…,zk-1}是Knap(1,k-1,MaxWeight- wk)的最优解。
2) 证明与1)类似。
另外有一个地方给出了证明,但是老实讲,我没有看懂。