子集和变量的复杂度


9

子集和问题的这种变体是否容易/已知?

给定一个整数,以及一组正整数这样每个最多将位设置为(); 是否有子集使得其元素之和等于?mA={x1,x2,...,xn}xik=21xi=2bi1+2bi2,bi1,bi20AAm

是吗?还是完成?PNP

并且如果每个最多将位设置为?对于这个问题微不足道。xik=31k=1

Answers:


8

即使对于,它仍然是完全的。给定一个子集总和的实例,我们可以通过拆分数字并添加一些额外的位,将其转换为此变体。NPk=2

首先,对于的某个值,问题中所有数字的总和将小于。2mm

现在,让我们从原始问题中取一个设置为位的数字。我们将在拆分此数目数字与正好2个比特设置为使得这些数字的总和为。我们可以通过找到数来累加地执行此操作,数字加起来等于第一个位加上和数字总计最后位加上。nkkn+2k+mkk2k+m1kk2k+m1

除了该数字外,我们还将数字到问题中。解决方案必须包含该数字或以前构造的所有数字。如果原始目标值为则新目标值为。2k+mktt+2k+m

如果原始问题有多个,我们可以对新值采用重复此过程。k+m+1m

只能通过两种方式设置位置的位:答案可以包含数字或所有数字的总和为。因此,我们已将子集总和减少为您的子集总和变体。k+m2k+mkn+2k+m

例如,以目标值。通过采用以下二进制数,可以将此问题编码为此处表示的子集和变量:{2,3,5}7

2被映射到和。(在这里严格地不需要使用额外的位。)0100 10000 1

3映射到和1000 00 1,0100 00 10000 00 01

5映射到和。1000 00 000 1,0010 00 000 10000 00 000 01

新的目标值将变为。1110 10 010 01

如果原始问题用位表示,则转换后的问题最多具有位。原始问题最多具有数字,每个数字最多具有比特,因此它们的总和也为O(n)。变换后的问题将具有数字(因为每个位数字被拆分为位数字,它们的长度最多为因为我们将额外的位用于因此,转换后的问题的总大小为位。nO(n4)O(n)O(n)O(n2)nn+1 2O(n2)nO(n4)


您确定编码不会导致工作磁带呈指数大小吗?
2013年

不,我认为转变后的问题在规模上是四次的。如果输入有n位,则最多有n个数字,每个数字都设置了n位。因此,在变换后的问题中将存在O(n ^ 2)个数字(因为k位数字被拆分为k + 1个数字)。每个数字的长度为(2n)位,以容纳原始问题中n个数字中每个数字的最大和加n位。因此,每个数字将具有O(2n + n ^ 2)位,总共O(n ^ 4)位。
汤姆·范德赞丹

@TomvaderZanden:我添加了一张您在问题中减少的图片;看看我是否正确
理解了

@TomvaderZanden:今天,我再次看一下您的减法,但是尚不清楚如何从设置了位的任意数中将其拆分为 2位数字,其中“最高”部分的总和为。假设您有一个设置了位的数字;您需要13个2位数字,但是13是1101,并且不能用两位数字“覆盖”它(您的示例有效,因为3和5 k = 2)。我认为,如果对 2位数字中的每一个使用不同的高位,则可以轻松解决此问题;它们的总和为01111 ... 1,然后添加一个虚拟的0000 ... 1,该总和为。k k 2 k n k = 13 k 2 knkk2knk=13k2k
2013年

这有点含糊,但是使用“归纳”过程当然是可能的。您实际上不需要位,只需要。如果要查找13个1位数相加为,则需要查找6个相加之整数为和7个也相加为。我们可以取,这实际上总计为。c e i l log k 2 4 2 3 2 3 10 2 0 + 3 2 1 2 4kceil(logk)2423231020+32124
汤姆·范德赞丹

0

这是Vor从问题中提取的信息。

对于,问题仍然是NP完全的。我发现从单调X-SAT快速还原(请参见此处的还原方案)。k3

即使,问题仍然是NP完全的,有关详细信息,请参见Tom的答案。以下是他从SUBSET SUM减少的一小部分表示:k=2

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.