- 21
- 0
- 约5.77千字
- 约 14页
- 2016-12-07 发布于贵州
- 举报
0_1背包题的多种解法
问题描述
0/1背包问题:
现有n种物品,对1=i=n,已知第i种物品的重量为正整数Wi,价值为正整数Vi,背包能承受的最大载重量为正整数W,现要求找出这n种物品的一个子集,使得子集中物品的总重量不超过W且总价值尽量大。(注意:这里对每种物品或者全取或者一点都不取,不允许只取一部分)
算法分析
根据问题描述,可以将其转化为如下的约束条件和目标函数:
于是,问题就归结为寻找一个满足约束条件(1),并使目标函数式(2)达到最大的解向量。
首先说明一下0-1背包问题拥有最优解。
假设是所给的问题的一个最优解,则是下面问题的一个最优解:。如果不是的话,设是这个问题的一个最优解,则,且。因此,,这说明是所给的0-1背包问题比更优的解,从而与假设矛盾。
穷举法:
用穷举法解决0-1背包问题,需要考虑给定n个物品集合的所有子集,找出所有可能的子集(总重量不超过背包重量的子集),计算每个子集的总重量,然后在他们中找到价值最大的子集。由于程序过于简单,在这里就不再给出,用实例说明求解过程。下面给出了4个物品和一个容量为10的背包,下图就是用穷举法求解0-1背包问题的过程。
四个物品和一个容量为10的背包
序号 子集 总重量 总价值 序号 子集 总重量 总价值 1 空集 0 0 9 {2,3} 7 52 2 {1} 7 42 10 {2,4} 8 37 3 {2} 3 12
原创力文档

文档评论(0)