NP-Vollständigkeit 2 1 Einleitung 2 Definitionen 3 3SAT

Werbung
Proseminar Theoretische Informatik
7.1.2014
NP-Vollständigkeit 2
Melanie Skodzik
1
Helmut Alt
Einleitung
NP-Vollständigkeit ist ein zentrales Thema der Komplexitätstheorie. Es ist der Grund,
weshalb theoretische Informatiker glauben, dass P6=NP gilt. Wenn ein NP-vollständiges
Problem in polynomieller Zeit entschieden werden kann, dann können alle Probleme in NP
in polynomieller Zeit gelöst werden, d.h. P=NP. Doch bis jetzt wurde noch kein Algorithmus
mit polynomieller Laufzeit für ein NP-vollständiges Problem gefunden.
2
Definitionen
Eine Sprache L liegt in NP
L ∈ NP <=> ∃ Verifikationsalgorithmus polynomieller Laufzeit für L
Polynomialzeit-Reduktion
L ≤p L‘ <=> ∃ Fkt. f, die in poly. Zeit berechenbar ist, sodass w ∈ L <=> f(w) ∈ L‘
NP-schwer
Eine Sprache L heißt NP-schwer <=> L‘ ≤p L für alle L‘ ∈ NP
NP-Vollständigkeit
L heißt NP-vollständig <=> L∈ NP und L ist NP-schwer
3
3SAT
gegeben: Boolesche Formel ϕ in KNF mit genau 3 Literalen in jeder Klausel
Frage: Ist ϕ erfüllbar?
Behauptung: 3SAT ist NP-vollständig
3SAT ∈ NP
Sei ϕ eine boolesche Formel in 3KNF. Der von uns gewählte Zeuge ist eine erfüllende
Belegung. Offensichtlich kann man in polynomieller Zeit prüfen, ob die Belegung akzeptiert
wird.
3SAT ist NP-schwer
Beweis durch SAT ≤p 3SAT
Gesucht ist eine poly-Zeit-berechenbare Funktion f, sodass für KNF-Formel ϕ, f(ϕ) eine
3KNF-Formel ist mit ϕ ist erfüllbar <=> f(ϕ) ist erfüllbar.
Jede Klausel (a1 ∨ a2 ∨ . . . ∨ a` ) aus ϕ wird wie folgt in ϕ‘ übernommen:
- falls ` = 1 (a1 )
dann nehme in ϕ’ die Klausel (a1 ∨ a1 ∨ a1 ) auf
- falls ` = 2: (a1 ∨ a2 )
dann nehme in ϕ’ die Klausel (a1 ∨ a1 ∨ a2 ) auf
- falls ` = 3 (a1 ∨ a2 ∨ a3 )
1
übernehme die Klausel so wie sie ist
- falls ` > 3 (a1 ∨ a2 ∨ . . . ∨ a` )
teile die Klausel wie folgt auf und führe neue Variablen ein:
(a1 ∨ a2 ∨ z1 ) ∧ (z̄ 1 ∨ a3 ∨ z2 ) ∧ (z̄ 2 ∨ a4 ∨ z3 ) ∧ . . . ∧ (z̄ `−3 ∨ a`−1 ∨ a` )
Diese Reduktion ist offensichtlich in polynomieller Zeit durchführbar.
Beh.: ϕ ist erfüllbar <=> ϕ‘ ist erfüllbar
„=>“: für 1≤ ` ≤ 3 offensichtlich.
für ` > 3:
Sei b eine erfüllende Belegung für ϕ. b weist also mindestens einem Literal aus jeder Klausel
den Wert 1 zu. Wir unterscheiden drei Fälle:
1. Fall: a1 oder a2 haben den Wert 1, so setze alle zj auf 0
2. Fall: Ein ai mit 3≤ i ≤ `-2 hat den Wert 1, so setze alle zj mit j≥i-2 auf 0, den Rest auf 1
3. Fall: a`−1 oder a` haben den Wert 1, so setze alle aj auf 1
Damit ist ϕ‘ erfüllt.
„<=“: Sei b nun eine erfüllende Belegung für ϕ‘.
für 1≤ ` ≤ 3 wieder offensichtlich.
Falls b der Variablen a1 den Wert 0 zuweist, so ist z1 =1 oder z2 =1, also ist die Klausel aus
ϕ erfüllbar.
Falls b der Variablen a1 den Wert 1 zuweist, so muss z3 oder a2 den Wert 1 haben. Wenn z3
den Wert 1 hat, dann ist ϕ erfüllbar, wenn aber a2 den Wert 1 hat, so muss z4 oder a3 den
Wert 1 haben usw. falls also alle ai den Wert 1 haben, dann muss in der letzten Klausel
z`−1 oder z` den Wert 1 haben. Somit ϕ‘ erfüllbar => ϕ erfüllbar.
=> 3SAT ist NP-vollständig
4
VERTEX COVER (Knotenüberdeckung)
gegeben: Ungerichteter Graph G=(V,E) sowie ein k ∈ N
Frage: Gibt es eine Teilmenge V‘ der Knotenmenge V mit |V‘| ≤ k, so dass für alle Kanten
(u,v) ∈ E gilt: u ∈ V‘ oder v ∈ V‘?
Behauptung: VERTEX COVER ist NP-vollständig
VERTEX COVER ∈ NP
Angenommen wir bekommen einen Graphen G = (V,E) und eine natürliche Zahl k, Der
von uns gewählte Zeuge ist ein VC V‘ ⊆ V. Der Verifikationsalgorithmus bestätigt, dass
|V‘| = k gilt, und überprüft anschließend für jede Kante (u,v), ob u ∈ V‘ oder v ∈ V‘ gilt.
Dieser Algorithmus kann in polynomieller Zeit ausgeführt werden.
VERTEX COVER ist NP-schwer
Beweis durch 3SAT ≤p VERTEX COVER
Gesucht ist eine poly-Zeit-berechenbare Funktion f, so dass für 3KNF-Formel ϕ, f(ϕ) ein
Tupel (Gϕ , k) ist mit ϕ ist erfüllbar <=> in Gϕ existiert ein VERTEX COVER der Größe
k.
1. Für jede Variable xi in ϕ, erzeuge zwei Knoten xi und x̄i , die mit einer Kante verbunden
sind.
2. Erstelle für jede Klausel in ϕ drei Knoten und benenne sie nach den drei Literalen der
Klausel. Verbinde alle drei Knoten miteinander. Erzeuge Kanten von den erzeugten Knoten
aus 1. mit den identischen Knoten aus den Klauseln.
3. Setze k auf m+2`, wobei m die Anzahl der Variablen und ` die Anzahl der Klauseln sind.
2
Schritt 1 bis 3 kann man in polynomieller Zeit ausführen.
x1
x2
x1
x1
x1
x2
x1
x2
x2
x1
x2
x2
x2
Abbildung 1: Graph, der von der Reduktion erzeugt wurde mit der Formel
ϕ = (x1 ∨ x1 ∨ x2 ) ∧ (x̄1 ∨ x̄2 ∨ x̄2 ) ∧ (x̄1 ∨ x2 ∨ x2 )
Beh. ϕ ist erfüllbar <=> Gϕ besitzt einen VERTEX COVER der Größe k.
„=>“: Angenommen ϕ ist erfüllbar, d.h. es existiert eine erfüllende Belegung. Wähle die
Knoten aus, die in 1. erzeugt wurden und de erfüllenden Belegung entsprechen. Da in
jeder Klausel mind. ein Literal wahr ist, wähle aus den erzeugten Knoten in 2. die anderen
zwei Literale aus. Entsprechende Knotenmenge bildet einen k-VERTEX COVER in Gϕ,
denn sie überdecken alle Kanten die in 1. erstellt wurden. Die Kanten, die die Literale der
Klauseln verbinden, werden mit zwei Knoten davon auch überdeckt. Die Kanten zwischen
den aus 1. und 2. erstellten Kanten werden mit den erfüllenden Variablen oder mit den
nicht erfüllenden Literalen der Klauseln überdeckt.
„<=“: Angenommen G ϕ hat einen VERTEX COVER der Größe k. Der VERTEX COVER
überdeckt also alle Kanten insbesondere die Kanten, die in 1. erzeugt wurden. Also muss für
jede Variable xi entweder xi oder x̄i gewählt werden, diese Belegung nehmen wir für ϕ. Bei
den „Klausel-Knoten“ müssen zwei von den drei Knoten gewählt werden, damit die miteinander verbunden Kanten überdeckt werden. Da nur zwei Kanten von den „Klausel-Knoten“
zu den „Variablen-Knoten“ überdeckt sind, muss die dritte Kante von dem erfüllenden
„Variable-Knoten“ überdeckt sind, damit ist die Klausel war.
=> VERTEX COVER ist NP-vollständig
5
SUBSET SUM
gegeben: Folge von nat. Zahlen S=(s1 ,s2 ,...,sn ) und eine Zahl t.
Frage: Gibt es eine Teilfolge, die sich zu t addiert?
Beh.: SUBSET SUM ist NP-vollständig
SUBSET SUM ∈ NP
P
Angenommen es ist S=(s1 ,s2 ,. . . ,sn ) gegeben. Der Zeuge sei S‘ ⊆ S. Der Test, ob t = s∈S s
gilt, kann durch einen Verifikationsalgorithmus in polynomieller Zeit durchgeführt werden.
SUBSET SUM ist NP-schwer
Beweis durch 3SAT ≤p SUBSET SUM
Sei ϕ eine boolesche Formel mit den Variablen x1 ,x2 ,. . . ,x` und den Klauseln c1 ,c2 ,. . . ,ck .
Konstruiere die Menge S wie folgt: Erstelle eine Tabelle, wobei die Zeilen die Zahlen aus
S und die Zahl t im Dezimalsystem darstellen. Benenne die Zeilen mit y1 ,z1 ,y2 ,z2 ,...,y` ,z` ,
3
g1 ,h1 ,g2 ,h2 ,. . . ,gk ,hk , t und die Spalten mit 1,2,. . . ,`,c1 ,. . . ,ck Setze die ersten ` Stellen von
yi und zi an Stelle i auf 1, sonst 0. Setze die letzten k Stellen von yi in der Spalte cj auf 1,
wenn die Klausel cj das Literal xi beinhaltet, sonst 0. Bei den letzten k Stellen von zi setze
in der Spalte cj eine 1, wenn die Klausel cj das Literal x̄i beinhaltet, sonst 0. Platziere bei gj
und hj eine 1 an der Stelle `+j, sonst 0. Wähle t als (`+k)-stellige Dezimalzahl, bestehend
aus ` 1en gefolgt von k 3en. Die Reduktion kann in polynomieller Zeit ausgeführt werden,
denn die Tabelle hat ungefähr (k+`)2 Einträge und jeder Eintrag benötigt polynomielle
Zeit.
y1
z1
y2
z2
h1
g1
h2
g2
h3
g3
t
1
1
1
0
0
2
0
0
1
1
c1
1
0
1
0
1
1
c2
0
1
0
1
0
0
1
1
1
1
3
3
c3
0
1
1
0
0
0
0
0
1
1
3
Tabelle 1: Tabelle, die von der Reduktion erzeugt wird mit der Formel
ϕ = (x1 ∨ x1 ∨ x2 ) ∧ (x̄1 ∨ x̄2 ∨ x̄2 ) ∧ (x̄1 ∨ x2 ∨ x2 )
Beh. ϕ ist erfüllbar <=> Es existiert eine Teilfolge von S, die sich zu t addiert
„=>“: Angenommen ϕ ist erfüllbar, dann wählen wir für i =1,2,. . . ,n yi , wenn xi =1, oder
zi aus, wenn xi = 0. Jetzt sieht man schon, wenn man diese Zahlen aufaddiert, dass die
ersten l Stellen eine 1 haben, da wir entweder xi oder x̄i aufgenommen haben. Da jede
Klausel erfüllt ist, besitzt jede Klausel in ihrer Spalte cj mindestens eine 1 und höchsten
drei 1en aus yi oder zi . Um genau auf 3 zu kommen, werden hj und gj ergänzt, wenn sie
benötigt werden.
„<=“: Angenommen eine Teilmenge von S addiert sich zu t. Wenn yi in der Teilmenge
enthalten ist, dann setzen wir xi = 1, andernfalls muss zi in der Teilmenge enthalten sein,
dann ist xi = 0. Diese Belegung muss erfüllt sein, da die letzten k Spalten immer 3 ergeben,
wobei nur 2 aus gi und hi sein können, d.h. mind. eine 1 kommt von yi oder zi , welche die
Klausel erfüllbar macht.
=> SUBSET SUM ist NP-vollständig
Literatur
[1] M. Sipser Introduction to the Theory of Computation, 2nd Edition Thomson Course
Technologie, 2006
[2] Th.H.Cormen, Ch.E.Leiserson, R.Rivest, C.Stein, Algorithmen - Eine Einführung,
2.Auflage, Oldenbourg, 2007
4
Herunterladen