分支限界法解0/1背包问题的思想方法和求解过程

1. 算法的思想

首先,要对输入数据进行预处理,将各物品依其单位重量价值从大到小进行排列。
在下面描述的优先队列分支限界法中,节点的优先级由已装袋的物品价值加上剩下的最大单位重量价值的物品装满剩余容量的价值和。

算法首先检查当前扩展结点的左儿子结点的可行性。如果该左儿子结点是可行结点,则将它加入到子集树和活结点优先队列中。当前扩展结点的右儿子结点一定是可行结点,仅当右儿子结点满足上界约束时才将它加入子集树和活结点优先队列。当扩展到叶节点时为问题的最优值。

分支限界法解0/1背包问题的思想方法和求解过程_第1张图片
分支限界法解0/1背包问题的思想方法和求解过程_第2张图片
分支限界法解0/1背包问题的思想方法和求解过程_第3张图片

例 有5个物体,重量分别为8,16,21,17,12,价值分别为8,14,16,11,7,背包载重量为37,求装入背包的物体及其价值。
假定,物体序号分别为0,1,2,3,4。最后得到的解是S1={1,2},最大价值是30。

求解过程
分支限界法解0/1背包问题的思想方法和求解过程_第4张图片

你可能感兴趣的:(数据结构与算法)