【发布时间】:2017-05-24 20:24:42
【问题描述】:
我知道如何将子集总和减少到 0,1 背包。但是有可能将背包减少到子集总和吗?怎么样?
【问题讨论】:
标签: knapsack-problem reduction np-complete subset-sum
我知道如何将子集总和减少到 0,1 背包。但是有可能将背包减少到子集总和吗?怎么样?
【问题讨论】:
标签: knapsack-problem reduction np-complete subset-sum
论文"Reducing a Target Interval to a Few Exact Queries" 的定理 2 中描述了从 0,1 背包到子集和的减少。它分三个步骤进行。首先,将背包简化为一个决策问题,该问题测试是否存在一个权重最多为 b 且值至少为 t 的子集。这可以通过对阈值的二分搜索来完成。其次,将此决策问题简化为一小组精确查询,形式为“是否有一个子集的权重恰好为 b,值恰好为 t?”这是一个巧妙的简化,不需要枚举所有可能的 b 和 t。第三,通过将每个 (weight,value) 对映射到足够大的 C 的整数 (weight*C + value) 来将此精确查询简化为子集和。
【讨论】:
我可以提供一个简化,我相信它相当容易理解。由于 StackOverflow 显然不支持 LaTeX,因此您可以找到 PDF here。它基于您在线性规划建模中也发现的想法,即松弛变量和缩放。
【讨论】: