将0,1背包减少到子集和

时间:2017-05-24 20:24:42

标签: knapsack-problem reduction np-complete subset-sum

我知道如何将子集总和减少到0,1背包。但是有可能减少背包到子集和?怎么样?

2 个答案:

答案 0 :(得分:0)

文章"Reducing a Target Interval to a Few Exact Queries"的定理2中描述了从0,1背包减少到子集和。它分三步进行。首先,将背包减少到一个决策问题,该问题测试是否存在权重最大为b且值至少为t的子集。这可以通过二进制搜索超过阈值来完成。其次,将这个决策问题简化为一小组形式的精确查询"是否存在权重正好为b且值正好为t的子集?"这是一个聪明的减少,不需要枚举所有可能的b和t。第三,通过将每个(权重,值)对映射到足够大的C的整数(权重* C +值),将精确查询减少到subset-sum。

答案 1 :(得分:0)

我认为我可以提供一个相当容易理解的简化。由于显然StackOverflow不支持LaTeX,因此可以将其作为PDF here找到。它基于您在线性程序建模中也能找到的想法,即松弛变量和缩放比例。