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