Genaue Exponentialzeitalgorithmen für die 0-1-Programmierung


10

Gibt es bekannte Algorithmen für das folgende Problem, die den naiven Algorithmus übertreffen?

Eingabe: Ein System von m linearen Ungleichungen.Ax≤bm

Output: eine realisierbare Lösung , falls vorhanden.x∗∈{0,1}n

Angenommen, und b haben ganzzahlige Einträge. Ich interessiere mich für Worst-Case-Grenzen.Ab

Antworten:


14

Wenn superlinear ist, würde ein solcher Algorithmus die Hypothese der starken Exponentialzeit widerlegen, da Formeln in konjunktiver Normalform ein Sonderfall der 0-1-Programmierung sind und das Sparsification Lemma es uns ermöglicht, k -SAT in linear vielen Klauseln auf CNF-SAT zu reduzieren .mk

Es gibt jedoch einen Algorithmus von Impagliazzo, Paturi und mir , der ein solches Ungleichungssystem lösen kann, wenn die Anzahl der Drähte, dh die Anzahl der Koeffizienten ungleich Null in linear ist. Insbesondere wenn die Anzahl der Drähte c n ist , läuft der Algorithmus in der Zeit 2 ( 1 - s ) n , wobei s = 1 istAcn2(1−s)n .s=1cO(c2)


1

Wenn klein genug ist, können Sie es besser machen als der naive Algorithmus, dh besser als 2 n Mal. Hier bedeutet "klein genug", dass m kleiner ist als etwas wie n / lg n . Die Laufzeit ist immer noch exponentiell - z. B. 2 n / 2 -, aber schneller als der naive Algorithmus.m2nmn/lg⁡n2n/2

Übrigens sieht es so aus, als könnten wir das Problem in einigen Fällen, in denen die Matrix A eine superlineare Anzahl von Einträgen aufweist, schneller als lösen . Ich weiß nicht, wie ich das mit der anderen Antwort hier in Einklang bringen soll. Daher sollten Sie meine Antwort sorgfältig prüfen: Dies könnte darauf hinweisen, dass ich irgendwo einen schwerwiegenden Fehler gemacht habe.2nA


Der grundlegende Ansatz: schreibe , wobei x 0 die ersten n / 2 Komponenten von x und x 1 die letzten n / 2 Komponenten enthält; und ähnlich A = ( A 0 , A 1 ) , wobei A 0 die linken n / 2 Spalten von A und A 1 die rechten n hatx=(x0,x1)x0n/2xx1n/2A=(A0,A1)A0n/2AA1 Spalten. Jetzt kann A x ≤ b in der Form neu geschrieben werdenn/2Ax≤b

A0x0+A1x1≤b,

oder gleichwertig,

A0x0≤b−A1x1.

Zählen Sie alle Möglichkeiten für A 0 x 0 auf und lassen Sie S die Menge möglicher Werte bezeichnen, dh2n/2A0x0S

S={A0x0:x0∈{0,1}n/2}.

T2n/2b−A1x1

T={b−A1x1:x1∈{0,1}n/2}.

Jetzt wird das Problem

S,T⊆Zm2n/2s∈St∈Ts≤t

≤si≤tii

O(2n/2(n/2)m−1)mn/lg⁡n2n


m=1m=1xi=1A1,i≤0xi=0x


1
Der Algorithmus aus meiner Antwort reduziert sich mit der gleichen Methode auch auf das in Ihrer Antwort beschriebene Vektorproblem, dh teilt die Variablen auf und listet alle ihre Zuordnungen auf.
— Stefan Schneider

2
2O(m)
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.