Es ist immer noch -vollständig, selbst für . Wenn eine Instanz der Teilmengen-Summe gegeben ist, können wir sie in diese Variante umwandeln, indem wir die Zahlen aufteilen und einige zusätzliche Bits hinzufügen. k = 2NPk=2
Erstens ist die Summe aller Zahlen in dem Problem für einen Wert von kleiner als . m2mm
Nehmen wir nun eine Zahl aus dem ursprünglichen Problem, für das Bits gesetzt sind. Wir werden diese Zahl in Zahlen aufteilen, wobei genau 2 Bits so gesetzt sind, dass die Summe dieser Zahlen . Wir können dies rekursiv tun, indem wir Zahlen finden, die sich zu den ersten Bits plus und Zahlen Summiere die letzten Bits plus .k k n + 2 k + m ⌈ k ⌉ ⌈ k ⌉ 2 k + m - 1 ⌊ k ⌋ ⌊ k ⌋ 2 k + m - 1nkkn+2k + m⌈ k⌉⌈ k ⌉2k + m - 1⌊ k ⌋⌊ k ⌋2k + m - 1
Zusätzlich zu dieser Nummer werden wir dem Problem auch die Nummer hinzufügen . Eine Lösung muss entweder diese Zahl oder alle zuvor konstruierten Zahlen enthalten. Wenn der ursprüngliche Zielwert der neue Zielwert . k t t + 2 k + m2k + mktt + 2k + m
Wenn das ursprüngliche Problem mehr als eine Zahl hatte, können wir diesen Vorgang wiederholen, indem wir für den neuen Wert von .mk + m + 1m
Es gibt nur zwei Möglichkeiten, wie das Bit an Position kann: Die Antwort kann die Zahl oder alle Zahlen enthalten, die sich zu summieren . Daher haben wir die Teilmengen-Summe auf Ihre Teilmengen-Summenvariante reduziert.2 k + m k n + 2 k + mk + m2k + mkn + 2k + m
Nehmen wir als Beispiel mit dem Zielwert . Dieses Problem könnte als die hier vorgestellte Teilmengen-Summenvariante codiert werden, indem die folgenden Binärzahlen verwendet werden: 7{ 2 , 3 , 5 }7
2 wird auf und abgebildet . (Die Verwendung des zusätzlichen Bits ist hier nicht unbedingt erforderlich.)0000 10100 1 0000 1
3 wird und0000 00 011000 00 1 , 0100 00 1 0000 00 01
5 wird und .0000 00 000 011000 00 000 1,0010 00 000 10000 00 000 01
Der neue Zielwert würde .1110 10 010 01
Wenn das ursprüngliche Problem mit Bits dargestellt wird, hat das transformierte Problem höchstens Bits. Das ursprüngliche Problem wird höchstens Zahlen mit jeweils höchstens Bits haben, so dass die Summe von allen auch O (n) ist. Das transformierte Problem wird -Nummern haben (da jede Bit-Zahl in Bit-Zahlen aufgeteilt ist, wobei ihre Länge höchstens beträgt, da wir zusätzliche Bits für verwenden jede Zahl. Die Gesamtgröße des transformierten Problems beträgt also Bits.O ( n 4 ) O ( n ) O ( n ) O ( n 2 ) n n + 1 2 O ( n 2 ) n O ( n 4 )nO(n4)O(n)O(n)O(n2)nn+1 2O(n2)nO(n4)