多目标子集和的伪多项式或快速解

时间:2012-07-13 20:24:33

标签: algorithm dynamic-programming knapsack-problem subset-sum

我正在为多个/多目标subset-sum problem寻找快速解决方案。

由于附加限制(使得IMO更容易计算)我们可以假设总和中包含的所有值都是正数并且都绑定到已知的限制值。

我知道有一个针对单目标子集求和问题的O(NK)伪多项式解决方案,我已经实现了一个基于维基百科和this堆栈交换答案的解决方案。

以其他方式解释这个问题,我有两组正数限制已知。对于第一组中的每个值A,在第二组中存在总和为A的值的组合。先验地知道第一组中的所有值具有在第二组中关联的值的对应且不冲突的组合,是有一种已知的快速方法来计算第二组中的哪些元素与每个第一组值相关联?

1 个答案:

答案 0 :(得分:1)

我认为你的问题是我在硕士论文中研究过的多重约束问题的变体。

在这个项目中,我设计了一个算法,在DP表中搜索以找到解决方案。它不是伪多项式,但我认为它在一般情况下足够快。

我还实现了一个Python工具来解决这些问题。 也许你想尝试一下!

此工具名为 msat ,并在github上维护。

您可以参考msat

或者只是使用pip来安装它(它是一个Python3工具):

$ pip install msat

还有一些介绍幻灯片:slides

如果您想了解详情,请参阅thesis