Answers:
即使对于,它仍然是完全的。给定一个子集总和的实例,我们可以通过拆分数字并添加一些额外的位,将其转换为此变体。
首先,对于的某个值,问题中所有数字的总和将小于。
现在,让我们从原始问题中取一个设置为位的数字。我们将在拆分此数目数字与正好2个比特设置为使得这些数字的总和为。我们可以通过找到数来累加地执行此操作,数字加起来等于第一个位加上和数字总计最后位加上。
除了该数字外,我们还将数字到问题中。解决方案必须包含该数字或以前构造的所有数字。如果原始目标值为则新目标值为。
如果原始问题有多个,我们可以对新值采用重复此过程。
只能通过两种方式设置位置的位:答案可以包含数字或所有数字的总和为。因此,我们已将子集总和减少为您的子集总和变体。
例如,以目标值。通过采用以下二进制数,可以将此问题编码为此处表示的子集和变量:
2被映射到和。(在这里严格地不需要使用额外的位。)
3映射到和
5映射到和。
新的目标值将变为。
如果原始问题用位表示,则转换后的问题最多具有位。原始问题最多具有数字,每个数字最多具有比特,因此它们的总和也为O(n)。变换后的问题将具有数字(因为每个位数字被拆分为位数字,它们的长度最多为因为我们将额外的位用于因此,转换后的问题的总大小为位。
这是Vor从问题中提取的信息。
对于,问题仍然是NP完全的。我发现从单调X-SAT快速还原(请参见此处的还原方案)。
即使,问题仍然是NP完全的,有关详细信息,请参见Tom的答案。以下是他从SUBSET SUM减少的一小部分表示: