Komplexität einer Teilmengen-Summenvariante


9

Ist diese Variante des Teilmengen-Summenproblems einfach / bekannt?

Bei einer gegebenen ganzen Zahl und einer Menge positiver ganzer Zahlen so dass für jedes höchstens Bits auf ( ); Gibt es eine Teilmenge so dass die Summe ihrer Elemente gleich ?A = { x 1 , x 2 , . . . , x n } x i k = 2 1 x i = 2 b i 1 + 2 b i 2 ,mA={x1,x2,...,xn}xik=21A 'A mxi=2bi1+2bi2,bi1,bi20AAm

Ist es in ? Ist es noch -vollendet?N P.PNP

Und wenn für jedes höchstens Bits auf ? Für das Problem trivial. k = 3 1 k = 1xik=31k=1

Antworten:


8

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 + mkk2 k + m - 1kk2 k + m - 1nkkn+2k+mkk2k+m1kk2k+m1

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 10000 1

3 wird und0000 00 011000 00 1,0100 00 10000 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)


Sind Sie sicher, dass die Codierung nicht zu einer exponentiellen Größe des Arbeitsbands führt?
Vor dem

Nein, ich denke, das transformierte Problem ist vierteljährlich. Wenn der Eingang n Bits hat, gibt es höchstens n Zahlen mit jeweils n gesetzten Bits. Es gibt also O (n ^ 2) Zahlen im transformierten Problem (da eine k-Bit-Zahl in k + 1 Zahlen aufgeteilt wird). Jede Zahl ist (2n) Bits lang, um die maximale Summe plus n Bits für jede der n Zahlen im ursprünglichen Problem aufzunehmen. Jede Zahl hat also O (2n + n ^ 2) Bits für insgesamt O (n ^ 4) Bits.
Tom van der Zanden

@ TomvaderZanden: Ich habe ein Bild von Ihrer Reduzierung der Frage hinzugefügt. Sehen Sie, ob ich es richtig interpretiert habe
Vor dem

@ TomvaderZanden: Heute schaue ich noch einmal auf Ihre Reduktion, aber es ist unklar, wie Sie aus einer beliebigen Zahl mit gesetzten Bits diese in 2-Bit-Zahlen aufteilen können, wobei der "höchste" Teil . Angenommen, Sie haben eine Zahl mit Bit gesetzt; Sie benötigen 13 2-Bit-Zahlen, aber 13 ist 1101 und Sie können es nicht mit einer 2-Bit-Zahl "abdecken" (Ihr Beispiel funktioniert, weil für 3 und 5 k = 2). Ich denke, dass dies leicht behoben werden kann, wenn Sie für jede der 2-Bit-Zahlen ein anderes hohes Bit verwenden ; Sie summieren sich zu 01111 ... 1, dann fügen Sie einen Dummy 0000 ... 1 hinzu, der es ermöglicht, dass die Summe beträgt . k k 2 k n k = 13 k 2 knkk2knk=13k2k
Vor dem

Es ist ein bisschen vage, aber es ist sicherlich möglich, ein "induktives" Verfahren zu verwenden. Sie brauchen eigentlich keine Bits, Sie brauchen nur . Wenn Sie 13 1-Bit-Zahlen finden möchten, die sich zu summieren , müssen Sie 6 Zahlen finden, die sich zu summieren, und 7, die sich ebenfalls zu summieren . Wir können was tatsächlich . c e i l ( log k ) 2 4 2 3 2 3 10 2 0 + 3 2 1 2 4kceil(logk)2423231020+32124
Tom van der Zanden

0

Dies sind Informationen, die Vor aus der Frage extrahiert hat.

Für bleibt das Problem NP-vollständig. Ich habe eine schnelle Reduktion von monotonem X-SAT gefunden ( siehe das Schema der Reduktion hier ).k3

Das Problem bleibt NP-vollständig, auch wenn , siehe Toms Antwort für Details. Hier ist eine kleine Darstellung seiner Reduktion von SUBSET SUM:k=2

Geben Sie hier die Bildbeschreibung ein

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.