SUBSET-SUM,解决方案数量的上限

时间:2010-01-03 04:59:05

标签: theory subset-sum

您可能知道,SUBSET-SUM问题被定义为确定一组整数的子集是否与指定的整数相加。 (还有另一个子集求和的定义,其中一组整数总和为零,但现在让我们使用这个定义)

例如((1,2,4,5),6)true,因为(2,4)总和为6。我们说(2,4)"solution"

此外,((1,5,10),7)false,因为参数中的任何内容均不计入7

我的问题是,给定SUBSET-SUM的一组参数数,可能解的数量有多项式上界。在第一个示例中,有(2,4)(1,5)

我们知道,由于SUBSET-SUM是NP-complete,决定多重邮件时间可能是不可能的。但是我的问题与决策时间无关,我严格要求解决方案列表的大小。

显然,参数数字的幂集的大小可以是解决方案列表大小的上限,但是这具有指数增长。我的直觉是应该有一个多项式约束,但我无法证明这一点。

nb 我知道这听起来像是一个家庭作业问题,但请相信我不是。我正在努力教自己CS理论的某些方面,这就是我的想法带给我的地方。

2 个答案:

答案 0 :(得分:2)

没有;拿数字:

(1,2,1 + 2,4,8,4 + 8,16,32,16 + 32,...,2 2n ,2 2n + 1 < / sup>,2 2n +2 2n + 1

并询问形成和1 + 2 + 4 + ... + 2 2n + 2 2n + 1 。 (例如:n = 3时取集(1,2,3,4,8,12,16,32,48)并询问子集总和为63.)

您可以使用1和2或使用1 + 2形成1 + 2。

您可以使用4和8或使用4 + 8形成4 + 8。

...

您可以使用2 2n 和2 2n + 1 形成2 2n + 2 2n + 1 或2 2n +2 2n + 1

选择是独立的,因此至少有3个 n = 3 m / 3 ,其中m是你的集合的大小。我敢打赌,这可以大大加强,但这证明没有多项式限制。

答案 1 :(得分:1)

Sperner's Theorem提供了一个很好的(尽管是非多项式的)上限,至少在集合中的数字严格大于零的情况下(如您所遇到的问题)。

具有给定总和的所有子集的族组成一个 Sperner族,这是子集的集合,其中该族中的任何子集本身都不是该族中任何其他子集的子集。在此使用元素严格大于零的假设。 Sperner定理指出,此类Sperner族的最大大小由二项式系数gulp.task('do-nothing', function (done) { setTimeout(function () { done() }, 3 * 1000) }) gulp.task("default", gulp.parallel("do-nothing", function (done) { console.log(`\n\n\nWHY AM I NOT BEING RUN`) })) 给出。

如果您放弃n Choose floor(n/2)个数字是不同的假设,很容易看出这个上限无法提高(只需取所有数字= 1并将目标总和设为{{1} }。我不知道在数字不同的假设下是否可以改进它。