Theoretische Informatik NP–Vollständigkeit Rainer Schrader Institut für Informatik 5. Mai 2009 2 / 65 1 / 65 NP–Vollständigkeit NP–Vollständigkeit • wie bei den berechenbaren Funktionen wollen wir die Struktur von NP näher zu untersuchen Gliederung • bisher wissen wir lediglich, dass P ⊆ NP • polynomielle Reduktionen • NP-Vollständigkeit von SAT • es ist nicht klar (und bis heute unbewiesen), ob P ( NP oder nicht • weitere NP-vollständige Probleme • polynomielle Lösbarkeit von 2-SAT doch P = NP • wir versuchen den Reduzierbarkeitsbegriff sinnvoll zu übertragen • NP-Vollständigkeit und coNP 3 / 65 4 / 65 NP–Vollständigkeit NP–Vollständigkeit Lemma Sei L p L0 . • seien L und L0 zwei Sprachen (i) L0 ∈ P =⇒ L ∈ P (ii) L0 ∈ NP =⇒ L ∈ NP • L heißt polynomiell reduzierbar auf L, falls gilt: 0 Beweis von (i): • L0 ist reduzierbar auf L mittels einer Funktion f • d.h. x ∈ L0 ⇐⇒ f (x ) ∈ L • sei L0 polynomiell reduzierbar auf L mittels der Funktion f • es gilt: x ∈ L ⇐⇒ f (x ) ∈ L0 • insbesondere ist f polynomiell berechenbar mittels einer DTM M • sei M 0 die DTM, die L0 polynomiell entscheidet • f ist in polynomieller Zeit berechenbar • Notation: L0 p L • dann wird L durch die Hintereinanderausführung von M und M 0 polynomiell entschieden (ii) folgt analog. 6 / 65 5 / 65 NP–Vollständigkeit NP–Vollständigkeit Lemma • wie „ ” ist auch „ p ” transitiv, denn: Sei • „ ” ist transitiv L NP-vollständig. (i) L ∈ P ⇐⇒ P = NP • das Produkt von zwei Polynomen ist ein Polynom (ii) L0 ∈ NP und L p L0 =⇒ L0 ist NP-vollständig (iii) L und L0 NP-vollständig =⇒ L ≡p L0 . • L und L0 heißen polynomiell äquivalent falls L p L0 und L0 p L • Notation: L ≡p L0 Beweis von (i): • sei L0 ∈ NP • da L NP-vollständig, gilt L0 p L • ist L ∈ P, so folgt nach Lemma von Folie 6 auch L0 ∈ P • und somit P = NP • L heißt • NP-schwer, falls für alle L0 ∈ NP gilt: L0 p L • NP-vollständig, falls L NP-schwer ist und L ∈ NP. • die Umkehrung gilt offensichtlich 7 / 65 8 / 65 NP–Vollständigkeit NP–Vollständigkeit Lemma Sei L NP-vollständig. • mit den NP-vollständigen Problemen haben wir den harten Kern der (i) L ∈ P ⇐⇒ P = NP Probleme in NP ausgezeichnet, denn (ii) L0 ∈ NP und L p L0 =⇒ L0 ist NP-vollständig (iii) L und L0 NP-vollständig =⇒ L ≡p L0 . • sie sind alle „gleich schwierig” Beweis von (ii) und (iii): • alle anderen in NP sind nicht „schwieriger” • und ist eines „einfach”, so sind alle Problem in NP „einfach” • (ii) sei L00 ∈ NP • es ist L00 p L p L0 • somit ist auch L0 NP-vollständig. • (iii) folgt aus der Definition • wir wissen aber noch nicht, ob diese Teilmenge nichtleer ist 2 10 / 65 9 / 65 NP–Vollständigkeit NP–Vollständigkeit • Sei B eine Boolesche Funktion in konjunktiver Normalform • d.h. Gliederung B= • polynomielle Reduktionen • NP-Vollständigkeit von SAT r ^ Ki , i =1 wobei Ki = yi1 ∨ · · · ∨ yis mit yij ∈ {x1 . . . xn , x 1 , . . . , x n } • weitere NP-vollständige Probleme • polynomielle Lösbarkeit von 2-SAT Beispiel: • NP-Vollständigkeit und coNP B = (x1 ∨ x 2 ∨ x3 ) ∧ (x 2 ∨ x 3 ) ∧ (x 1 ∨ x2 ∨ x3 ) Wir wollen wissen, ob es eine erfüllende Belegung der Variablen gibt. 11 / 65 12 / 65 NP–Vollständigkeit NP–Vollständigkeit Das Erfüllbarkeitsproblem (satisfiability problem) ist das Entscheidungsproblem der folgenden Sprache: • wir betrachten stets Sprachen aus {0, 1}∗ • wir müssen uns daher kurz Gedanken über eine Kodierung von SAT = {B : B ist eine erfüllbare KNF}. Booleschen Formeln machen • wir könnten z.B. setzen: Satz (Cook) SAT ist NP-vollständig. code(xi ) = bin(i ) code(x i ) = 02bin(i ) Beweis: code(y1 ∨ . . . ∨ yS ) = code(y1 )22 code(y2 )22 . . . 22 code(yS ) code( r ^ • (i) SAT ist in NP: • rate eine Belegung der Variablen • prüfe nach, ob B mit dieser Belegung den Wert 1 hat Ki ) = code(K1 )222 code(K2 )222 . . . 222 code(Kr ) i =1 • nach einem früheren Korollar ist damit SAT ∈ NP • wir kümmern uns im folgenden nicht um die Kodierung (ii) SAT ist NP-schwer, d.h. für jedes L ∈ NP gilt: L p SAT: 13 / 65 14 / 65 NP–Vollständigkeit NP–Vollständigkeit • wir wissen über L nur, dass es eine NDTM M gibt, die L akzeptiert • wir versuchen, die Arbeitsweise von M als KNF zu formulieren • (ii) SAT ist NP-schwer, d.h. für jedes L ∈ NP gilt L p SAT: • wir müssen dazu zu jedem L eine polynomiell berechenbare Funktion • sei dazu p(n) die Laufzeitschranke für M • sei x ein Input mit |x | = n f konstruieren, so dass x ∈ L ⇔ f (x ) ∈ SAT • sei T = p(n) • sei K = (w1 zw2 ) eine Konfiguration auf einem kürzesten akzeptierenden Pfad • d.h. zu gegebenen x müssen wir eine KNF BL (x ) konstruieren, so • da zu Beginn der Kopf über Feld 1 steht und M höchstens dass x ∈ L ⇔ BL (x ) ∈ SAT T Kopfbewegungen ausführt, gilt • dies aber für jedes L, und ohne L näher zu kennen |w1 w2 | ≤ 2T + 1 15 / 65 16 / 65 NP–Vollständigkeit NP–Vollständigkeit • sei t mit 1 ≤ t ≤ T ein Zeitpunkt der Berechnung • zu jedem t definieren wir die folgenden Variablen: • jeder Konfiguration K können wir eine Belegung der Variablen Vt = {di ,a,t , hi ,t , sz ,t } zuordnen • umgekehrt aber entspricht nicht jede Belegung der Variablen einer di ,a,t für −T ≤ i ≤ T + 1 a ∈ A = {0, 1, 2, 2} Konfiguration di ,a,t = 1 ⇐⇒ in Schritt t steht in Zelle i der Wert a • wir versuchen im folgenden, Bedingungen an eine Belegung zu formulieren, so dass: hi ,t sz ,t −T ≤ i ≤ T + 1 z ∈Z hi ,t = 1 ⇐⇒ in Schritt t steht der Kopf über Zelle i • sie einer Konfiguration entspricht, wenn sie die Bedingungen erfüllt • und die Bedingungen als KNF ausgedrückt werden können sz ,t = 1 ⇐⇒ in Schritt t ist M im Zustand z ∈ Z 17 / 65 18 / 65 NP–Vollständigkeit NP–Vollständigkeit Beobachtung: • sei • offensichtlich muss zu jedem Zeitpunkt t mit 1 ≤ t ≤ T gelten: • M ist in einem eindeutigen Zustand ^ u(y1 , . . . , ym ) = (y1 ∨ · · · ∨ ym ) ∧ (yi ∨ yj ) {z } i 6=j | A | {z } B • der Kopf steht an genau einer Position • A ist genau dann 1, wenn mindestens eine Variable 1 ist • in jeder Zelle steht ein eindeutiges Symbol • B ist genau dann 1, wenn höchstens eine Variable 1 ist • dazu müssen wir eine KNF formulieren, die genau dann 1 ist, wenn • damit ist u = 1 genau dann, wenn yi = 1 für genau ein i gilt genau eine Variable den Wert 1 hat • die Länge von u ist O(m 2 ) 19 / 65 20 / 65 NP–Vollständigkeit NP–Vollständigkeit • für festes t = 1, . . . , T sei Config(Vt ) eine Boolesche Funktion • Config(Vt ) soll an genau den Stellen 1 sein, die Konfigurationen • zum Zeitpunkt 1 gilt: • M im Zustand z0 entsprechen • der Kopf steht über Zelle 1 • Config(Vt ) kann durch eine KNF der Länge O(T ) dargestellt werden: 2 • x1 , . . . , xn steht in den Zellen 1 . . . n • alle anderen Zellen enthalten 2 Config(Vt ) = u(s1,t , . . . , s|Z |,t ) ∧ u(h−T ,t , . . . , hT +1,t ) ^ ∧ u(di ,0,t , di ,1,t , di ,2,t , di ,2,t ) • sei −T ≤i ≤T +1 Start(V1 ) = s0,1 ∧ h1,1 ∧ • Länge: O(|Z |2 )+O(T 2 )+O(T ) = O(T 2 ) n ^ di ,xi ,1 ∧ i =1 • damit haben wir zu jedem Zeitpunkt t genau einen Zustand, eine −T ^ i =0 di ,2,1 ∧ T^ +1 di ,2,1 i =n+1 • Länge(Start)=O(T ) Kopfposition und einen Inhalt pro Zelle. 22 / 65 21 / 65 NP–Vollständigkeit NP–Vollständigkeit • wenn zum Zeitpunkt t der Kopf nicht über Zelle i steht, so bleibt der Inhalt von Zelle i beim Übergang in den Zeitpunkt t + 1 erhalten. Nochange(Vt , Vt +1 ) = • wir wollen jetzt die Übergangsrelation δ modellieren T^ +1 ^ (di ,a,t ∨ hi ,t ∨ di ,a,t +1 ) i =−T a∈A • wir tun dies in zwei Schritten: • wenn zum Zeitpunkt t der Kopf nicht über Zelle i steht, so bleibt der Inhalt von Zelle i beim Übergang in den Zeitpunkt t + 1 erhalten eine Klausel in Nochange(Vt , Vt +1 ) ist wahr ⇐⇒ (hi ,t = 1) oder (hi ,t = 0 und (di ,a,t = 1 ⇒ di ,a,t +1 = 1)) ⇐⇒ Kopf steht über Zelle i oder Inhalt von Zelle i bleibt unverändert • die Länge von Nochange ist O(T ). 23 / 65 24 / 65 NP–Vollständigkeit NP–Vollständigkeit Delta(Vt , Vt +1 ) = • sei δ ⊆ (Z , A) × (Z , A, {N , L, R}) die Übergangsrelation ^ (z ,a),(z 0 ,a 0 ,k )∈δ 9 8 +1 “ < T^ ”= hi ,t · sz ,t · di ,a,t ⇒ hi +k ,t +1 · sz 0 ,t +1 · di ,a0 ,t +1 ; : i =−T • δ führt den Zustand (z , a) in mehrere mögliche Nachfolgezustände (z 0 , a 0 , {N , R, L}) über • setze k = 0 (für N), k = 1 (für R) oder k = −1 (für L) • setze Delta(Vt , Vt +1 ) = ^ (z ,a),(z 0 ,a 0 ,k )∈δ Delta = 1 ⇐⇒ 8 9 +1 “ < T^ ”= hi ,t · sz ,t · di ,a,t ⇒ hi +k ,t +1 · sz 0 ,t +1 · di ,a0 ,t +1 : ; i =−T für jeden Übergang von (z , a) zu einem Nachfolgezustand (z 0 , a 0 , k ) ist die Klammer {. . .} = 1 {. . .} = 1 ⇐⇒ ⇐⇒ (hi ,t = sz ,t = di ,a,t = 1 ⇒ hi +k ,t +1 = sz 0 ,t +1 = di ,a0 ,t +1 = 1) (zum Zeitpunkt t befindet sich die Maschine im Zustand z der Kopf steht über i und i enthält a =⇒ zum Zeitpunkt t + 1 befindet sich die Maschine im Zustand z 0 der Kopf steht über i + k in Zelle i steht a 0 ) • die Länge von Delta ist O(T ) 25 / 65 NP–Vollständigkeit Delta(Vt , Vt +1 ) = ^ (z ,a),(z 0 ,a 0 ,k )∈δ 26 / 65 NP–Vollständigkeit 8 9 +1 “ < T^ ”= hi ,t · sz ,t · di ,a,t ⇒ hi +k ,t +1 · sz 0 ,t +1 · di ,a0 ,t +1 : ; i =−T • wir können M so umbauen, dass • Delta ist noch nicht in konjunktiver Normalform • M nach Erreichen eines akzeptierenden Zustands za in diesem Zustand verbleibt • kann aber durch Umformung in eine solche überführt werden Delta(Vt , Vt +1 ) = ^ (z ,a),(z 0 ,a 0 ,k )∈δ 8 +1 < T^ : • und die bis zu T fehlenden Schritte durchläuft [h i ,t ∨ s z ,t ∨ d i ,a,t ∨ hi +k ,t +1 ] • mit dieser Modifikation gilt sza ,T = 1 i =−T ∧[h i ,t ∨ s z ,t ∨ d i ,a,t ∨ sz 0 ,t +1 ] ∧[h i ,t ∨ s z ,t ∨ d i ,a,t ∨ di ,a0 ,t +1 ] o • auch nach dieser Umformung gilt Länge(Delta) = O(T ) 27 / 65 28 / 65 NP–Vollständigkeit NP–Vollständigkeit Damit können wir eine KNF BL (V1 . . . VT ) angeben, die BL (V1 . . . VT ) • für Belegungen genau dann den Wert 1 annimmt, wenn ∧ Start(V1 ) ∧ sza ,T ∧ T ^ T^ −1 Config(Vt ) T^ −1 (Nochange(Vt , Vt +1 ) ∧ Delta(Vt , Vt +1 )) • eine Überprüfung der Länge von BL ergibt den Wert O(T 3 ) somit x ∈ L ⇐⇒ M akzeptiert x Config(Vt ) ⇐⇒ es existiert eine akzeptierende Rechnung K1 , . . . , KT i =1 ∧ T ^ t =1 • und sich M zum Zeitpunkt T im akzeptierenden Zustand za befindet = Start(V1 ) ∧ sza ,T ∧ i =1 • diese Belegung Konfigurationen K1 , . . . , KT der Maschine M mit Input x entsprechen BL (V1 . . . VT ) = mit K1 = (z0 , x ) ⇐⇒ es existiert eine Belegung V1 . . . VT (Nochange(Vt , Vt +1 ) ∧ Delta(Vt , Vt +1 )) t =1 mit f (x ) = BL (V1 . . . VT ) = 1 • also: x ∈ L ⇔ f (x ) erfüllbar und die Länge von f ist O(T 3 ). 29 / 65 30 / 65 NP–Vollständigkeit NP–Vollständigkeit Anwendungen des SAT-Problems • das SAT-Problem mutet sehr theoretisch an Gliederung • es hat jedoch viele, auch praktische Anwendungen • polynomielle Reduktionen • NP-Vollständigkeit von SAT • zur Überprüfung bei Autoherstellern, ob eine Kombination von Ausstattungsmerkmalen geliefert werden kann • zur Diagnose von Krankheitssymptomen • in Medikamentenstudien • weitere NP-vollständige Probleme • polynomielle Lösbarkeit von 2-SAT • zur Vorhersage von Kreditausfällen • NP-Vollständigkeit und coNP 31 / 65 32 / 65 NP–Vollständigkeit NP–Vollständigkeit • die Aussage des Satzes von Cook lässt sich noch etwas verschärfen • sei B eine Boolesche Formel in konjunktiver Normalform Satz 3-SAT ist NP-vollständig. • B heißt 3-KNF , falls in jeder Klausel höchstens drei Literale vorkommen Beweis: • sei K = y1 ∨ · · · ∨ ys eine Klausel mit yi ∈ {x1 . . . xn , x 1 , . . . , x n } und s ≥ 4. • sei z eine neue Variable • betrachte die Boolesche Funktion Beispiel: B = (x1 ∨ x2 ∨ x3 ) ∧ (x2 ∨ x3 ) ∧ (x1 ∨ x2 ∨ x3 ) K1 = (y1 ∨ · · · ∨ ys−2 ∨ z ) ∧ (ys−1 ∨ ys ∨ z ) Sei • offensichtlich gilt: 3-SAT = {B : B ist eine erfüllbare 3-KNF}. • K1 ist in konjunktiver Normalform • K hat eine erfüllende Belegung ⇐⇒ K1 hat eine erfüllende Belegung • K1 enthält nur Klauseln der Länge s − 1 Satz 3-SAT ist NP-vollständig. 33 / 65 34 / 65 NP–Vollständigkeit NP–Vollständigkeit • mit Hilfe von 3-SAT wollen wir eine graphentheoretische Fragestellung als • per Induktion folgt: • sei K eine Klausel der Länge s ≥ 4 • K kann durch eine Boolesche Formel K 0 ersetzt werden, so dass NP-vollständig nachweisen • sei G = (V , E ) ein Graph • eine Teilmenge U ⊆ V von Knoten heißt unabhängig oder stabil , falls keine • K 0 ist eine 3-KNF • K 0 hat s − 3 neue Variablen • K 0 besteht aus s − 2 Klauseln zwei Knoten aus U durch eine Kante in E verbunden sind • K hat eine erfüllende Belegung ⇐⇒ K 0 hat eine erfüllende Belegung • wir führen diese Reduktion für jede Klausel mit mehr als drei Variablen durch • dadurch entsteht eine polynomiell beschränkte Menge von Klauseln und polynomiell viele neue Variablen • dies liefert eine polynomiell berechenbare Abbildung f mit B ∈ SAT ⇐⇒ f (B) ∈ 3-SAT. 2 • sei UM = {(G, k ) : G enthält eine stabile Menge der Größe mindestens k } 35 / 65 36 / 65 NP–Vollständigkeit NP–Vollständigkeit Beispiel: • Sei Satz UM ist NP-vollständig. B = (x1 ∨ x2 ∨ x3 ) ∧ (x1 ∨ x2 ∨ x3 ) ∧ (x1 ∨ x2 ∨ x3 ) • der zu B gehörige Graph G ist: x3 Beweis: x3 x1 x1 • wir reduzieren 3-SAT auf UM x2 • sei B eine Boolesche Formel in 3-KNF mit Klauseln C1 , C2 , . . . , Cm • zu B konstruieren wir einen Graphen G = (V , E ) wie folgt: x2 x2 • für jede Klausel Ci enthält G ein Dreieck, wobei die Knoten dieses Dreiecks mit den Literalen in Ci bezeichnet werden x1 x3 • zwei Knoten werden durch eine Kante verbunden, wenn sie • sei k = m (Anzahl der Klauseln) • höchstens ein Knoten eines Dreiecks liegt in einer unabhängigen Menge komplementären Literale entsprechen • daher ist die Kardinalität einer unabhängigen Menge in G höchstens m. 38 / 65 37 / 65 NP–Vollständigkeit NP–Vollständigkeit • sei G = (V , E ) ein Graph • wir behaupten: G enthält eine unabhängige Menge der Größe • eine Teilmenge C ⊆ V von Knoten heißt Clique, falls je zwei Knoten m genau dann, wenn B erfüllbar ist aus C durch eine Kante in E verbunden sind • sei • sei dazu U eine unabhängige Menge der Größe m • U enthält genau einen Knoten von jedem Dreieck und keine zwei CLIQUE = {(G, k ) : G enthält eine Clique der Größe mindestens k } Knoten, die komplementären Literalen entsprechen • setzen wir die Literale, die den Knoten in U entsprechen, auf „wahr”, so erhalten wir eine Belegung, die B erfüllt • ist umgekehrt x eine Wahrheitsbelegung, die B erfüllt • dann hat mindestens eine Variable in jedem Dreieck den Wert „wahr” • und keine zwei komplementären Literale sind „wahr” • ist U eine Teilmenge von Knoten, die in jedem Dreieck genau eine wahre Variable hat, so ist U unabhängig. 39 / 65 40 / 65 NP–Vollständigkeit NP–Vollständigkeit • sei G = (V , E ) ein Graph • ein Hamilton-Kreis in G ist eine „Rundreise“ durch alle Knoten, • zu einem Graphen G = (V , E ) betrachte den komplementären 0 0 0 Graphen G = (V , E ), wobei e ∈ E ⇔ e ∈ /E • dann entspricht jede Clique in G einer unabhängigen Menge in G 0 • d.h. er entspricht einer Permutation vi1 , . . . , vin , so dass (vi1 , vi2 ), . . . , (vin −1 , vin ), (vin , vi1 ) ∈ E • offensichtlich hat nicht jeder Graph einen Hamilton-Kreis, wie die Bäume zeigen • sei HC = {G : G enthält einen Hamilton-Kreis} • mit etwas Aufwand lässt sich (etwa durch Reduktion von 3-SAT) zeigen: • damit folgt: Satz Korollar CLIQUE ist NP-vollständig. HC ist NP-vollständig. 2 2 41 / 65 42 / 65 NP–Vollständigkeit NP–Vollständigkeit Korollar • wir erlauben zusätzlich Gewichte auf den Kanten • dann können wir nach einem Hamilton-Kreis fragen, TSP ist NP-vollständig. Beweis: • dessen Gesamtlänge als Summe der Gewichte der benutzten Kanten minimal ist • raten einer geeigneten Tour zeigt, dass TSP in NP liegt • wir reduzieren HC auf TSP • dies ist das Travelling-Salesman-Problem • sei • sei G = (V , E ) ein Graph mit |V | = n • bilde den Graphen G 0 = (V , E 0 ) durch Hinzufügen aller fehlenden TSP = {(G, k ) : G enthält eine Hamilton-Tour der Länge höchstens k } Kanten • setze ce = Korollar 1, t ≥ 2, falls e ∈ E falls e ∈ E 0 r E • dann hat G genau dann einen Hamilton-Kreis, wenn G 0 eine Tour der Länge kleiner gleich n hat TSP ist NP-vollständig. 43 / 65 2 44 / 65 NP–Vollständigkeit NP–Vollständigkeit Satz PARTITION ist NP-vollständig. • bisher haben wir überwiegend graphentheoretische Probleme betrachtet Beweis: • wir untersuchen jetzt ein durch Zahlen definiertes Problem: • wir reduzieren 3-SAT auf PARTITION • sei f (x ) = • PARTITION: Gegeben a1 , . . . , an ∈PN und ein R ∈ N, gibt es eine Teilmenge I ⊆ {1, . . . , n}, so dass i ∈I Vm i =1 Ci mit Ci = zi1 ∨ zi2 ∨ zi3 , wobei zij ∈ {x1 , x 1 , . . . , xn , x n } ai = R? • wir konstruieren dazu eine Eingabe von PARTITION wie folgt: • Sei R die Dezimalzahl, die aus m Vieren gefolgt von n Einsen Satz besteht: PARTITION ist NP-vollständig. R = 44 . . . 4} 11 . . . 1} | {z | {z m n • diese Zahl ist sehr groß, aber in polynomieller Zeit konstruierbar 46 / 65 45 / 65 NP–Vollständigkeit NP–Vollständigkeit • es ist im Weiteren hilfreich, m + n-stellige Zahlen mit Vektoren im Rm+n zu identifizieren • also 0 B B B B B B R=B B B B B @ 4 4 .. . 4 1 .. . 1 • die Größe ai bezieht sich auf die Variable xi 1 • im ersten Teil steht an Position j (1 ≤ j ≤ m), wie oft xi in der Klausel C C C C C C C C C C C A Cj vorkommt • der zweite Teil ist der i-te Einheitsvektor ei im Rn • bi ist analog aufgebaut und bezieht sich auf xi • weiter ist: ci = • zur Darstellung von R verwenden wir 2n + 2m Objekte der Größe „ ei 0 « ∈ Rm+n und di = „ 2ei 0 « ∈ Rm+n ai , bi , cj , dj für 1 ≤ i ≤ n, 1 ≤ j ≤ m • jede dieser Zahlen hat wiederum m + n Dezimalstellen 47 / 65 48 / 65 NP–Vollständigkeit NP–Vollständigkeit Beispiel: sei f = (x1 ∨ x2 ∨ x3 ) ∧ (x1 ∨ x2 ∨ x3 ) ∧ (x1 ∨ x2 ∨ x3 ) es ist m = n = 3 und a1 1 0 1 1 0 0 a2 0 1 1 0 1 0 a3 1 1 1 0 0 1 b1 0 1 0 1 0 0 b2 1 0 0 0 1 0 b3 0 0 0 0 0 1 c1 1 0 0 0 0 0 c2 0 1 0 0 0 0 c3 0 0 1 0 0 0 d1 2 0 0 0 0 0 d2 0 2 0 0 0 0 d3 0 0 2 0 0 0 R 4 4 4 1 1 1 a1 1 0 1 1 0 0 a2 0 1 1 0 1 0 a3 1 1 1 0 0 1 b1 0 1 0 1 0 0 b2 1 0 0 0 1 0 b3 0 0 0 0 0 1 c1 1 0 0 0 0 0 c2 0 1 0 0 0 0 c3 0 0 1 0 0 0 d1 2 0 0 0 0 0 d2 0 2 0 0 0 0 d3 0 0 2 0 0 0 • angenommen wir können entscheiden, ob sich R aus den Zahlen ai , bi , cj , dj zusammensetzen lässt • im zweiten Block enthält R nur Einsen • es gibt genau zwei Objekte, die an der i-ten Position eine Eins haben • um R kombinieren zu können, müssen wir uns also zwischen ai und bi (d.h. zwischen xi und x i ) entscheiden zu zeigen: f erfüllbar ⇐⇒ R kombinierbar aus a, b, c, d 50 / 65 49 / 65 NP–Vollständigkeit a1 1 0 1 1 0 0 a2 0 1 1 0 1 0 a3 1 1 1 0 0 1 b1 0 1 0 1 0 0 b2 1 0 0 0 1 0 b3 0 0 0 0 0 1 c1 1 0 0 0 0 0 c2 0 1 0 0 0 0 c3 0 0 1 0 0 0 d1 2 0 0 0 0 0 R 4 4 4 1 1 1 d2 0 2 0 0 0 0 d3 0 0 2 0 0 0 NP–Vollständigkeit R 4 4 4 1 1 1 Bemerkung: • die Zahl R ist in der Größenordnung von 10n+m , d.h. exponentiell in der Anzahl der Variablen und Klauseln • die Anzahl der Bits ist aber polynomiell in n und m Zur Konstruktion des ersten Blocks der 4en: • aus den a’s und b’s können wir an jeder Position höchstens eine 3 konstruieren • wir müssen erreichen, dass an jeder Position j die Summe der ausgewählten • es gibt einen Algorithmus zur Lösung des Partitions-Problems mit einer Laufzeit von O(nR) gibt a’s und b’s mindestens Eins ergibt • daher muss R auch so groß gewählt werden (oder P = NP). • dann und nur dann können wir diese Position durch die cj bzw. dj zu 4 ergänzen • damit wird jede Klausel erfüllt • und jede Lösung für PARTITION liefert eine erfüllende Wahrheitsbelegung für f • umgekehrt wählen wir zu einer erfüllenden Belegung die entsprechenden a’s und b’s und füllen auf. 51 / 65 52 / 65 NP–Vollständigkeit NP–Vollständigkeit • wir wollen abschließend zeigen, dass 3-SAT im folgenden Sinne minimal ist: Gliederung • eine Boolesche Formeln in KNF, die höchstens zwei Literale pro Klausel hat, heißt 2-KNF • polynomielle Reduktionen • NP-Vollständigkeit von SAT • sei 2-SAT die Menge aller erfüllbaren Formeln in 2-KNF: • weitere NP-vollständige Probleme • polynomielle Lösbarkeit von 2-SAT 2-SAT = {B : B ist eine erfüllbare 2-KNF}. • NP-Vollständigkeit und coNP Satz 2-SAT ist in P. 54 / 65 53 / 65 NP–Vollständigkeit NP–Vollständigkeit Beweis: • sei f eine Boolesche Formel in 2-KNF Beweisidee: • wir konstruieren einen gerichteten Graphen G = (V , A) zu B wie folgt: • sei K = (a ∨ b) eine Klausel der 2-KNF • V besteht aus allen Variablen und ihren Komplementen • um K zu erfüllen, muss offensichtlich gelten: • es existiert eine gerichtete Kante (a, b) ∈ A, falls B eine Klausel (a ∨ b) oder (b ∨ a) enthält • ist a falsch, so muss b wahr sein, und umgekehrt • die Kanten entsprechen damit den logischen Implikationen a ⇒ b • ist b falsch, so muss a wahr sein • dies liefert ein System von notwendigen Bedingungen • weiter enthält G per Konstruktion mit jeder Kante (a, b) auch die • wir zeigen, dass diese Bedingungen auch hinreichend sind, wenn sie • wir behaupten: Kante (b, a) widerspruchsfrei sind B ist erfüllbar 55 / 65 ⇐⇒ in G existiert kein gerichteter Kreis, der eine Variable und ihr Komplement enthält 56 / 65 NP–Vollständigkeit NP–Vollständigkeit • habe umgekehrt G keine solchen Wege • wähle einen Knoten x , für den kein gerichteter Weg nach x führt B ist erfüllbar ⇐⇒ in G existiert kein gerichteter Kreis, der eine Variable und ihr Komplement enthält • setze ihn und alle Knoten, die von ihm aus über gerichtete Wege erreichbar sind, auf wahr und die Komplemente auf falsch • dies sind alle Knoten, von denen aus x erreichbar ist • seien x und x zwei solche Knoten, die durch gerichtete Pfade • sei B 0 die KNF, die wir aus B erhalten, in dem wir alle auf falsch verbunden sind gesetzten Literale und alle Klauseln entfernen, die ein wahres Literal enthalten • angenommen B ist erfüllbar • o.B.d.A. sei x wahr (andernfalls argumentiere mit x ) • sei G 0 der Graph, den wir aus G erhalten, indem wir alle gesetzten Knoten entfernen und alle Kanten löschen, von denen mindestens ein Endpunkt entfernt worden ist • da x wahr und x falsch, gibt es auf dem Weg von x nach x zwei benachbarte Knoten a und b, so dass a wahr und b falsch ist • G 0 hat wiederum keine zwei komplentären Variablen, die durch zwei • da (a, b) eine Kante ist, folgt, dass die Klausel a ∨ b nicht erfüllt ist. Wege in beiden Richtungen verbunden sind • dann ist G 0 der Graph, der zu B 0 konstruiert werden würde • per Induktion ist B 0 erfüllbar und damit auch B. 57 / 65 58 / 65 NP–Vollständigkeit NP–Vollständigkeit • Beispiel: B = (x1 ∨ x2 ) ∧ (x1 ∨ x3 ) ∧ (x1 ∨ x2 ) ∧ (x2 ∨ x3 ) • der zu B gehörige Graph G ist: x3 Gliederung x 1 x 3 • polynomielle Reduktionen • NP-Vollständigkeit von SAT x1 x 2 • weitere NP-vollständige Probleme • polynomielle Lösbarkeit von 2-SAT • NP-Vollständigkeit und coNP x2 • G hat keinen Kreis, der ein Literal und sein Komplement enthält • setze x1 auf wahr • dann sind x2 wahr und x1 , x2 falsch • das Löschen führt zu einer leeren 2-KNF und einem leeren Graphen 59 / 65 60 / 65 NP–Vollständigkeit NP–Vollständigkeit • zur Erinnerung: • ist es bisher nicht gelungen, eine NP-vollständige Sprache L zu finden • coNP ist die Menge aller Sprachen, deren Komplement in NP liegt mit L ∈ NP • die folgende Aussage beschreibt, wann so eine Sprache nur existieren kann Beispiel • sei Satz UNSAT = {B : B ist eine nicht erfüllbare KNF}. Es gibt eine NP-vollständige Sprache L mit L ∈ NP ⇐⇒ NP = coNP. • UNSAT ist in coNP: Beweis: • das Komplement von UNSAT enthält: • sei NP = coNP (1) SAT und ∗ (2) alle Wörter aus {0, 1} , die keine KNF kodieren • SAT ist NP-vollständig und damit insbesondere in NP • (2) lässt sich mit Hilfe einer DTM polynomiell prüfen • per Definition ist SAT ∈ coNP • SAT ist in NP • wegen NP = coNP folgt dann SAT ∈ NP • daraus folgt die Behauptung 62 / 65 61 / 65 NP–Vollständigkeit NP–Vollständigkeit • sei umgekehrt L eine NP-vollständige Sprache mit L ∈ NP • coNP ⊆ NP : (analog) • wir zeigen NP ⊆ coNP und coNP ⊆ NP • sei L0 ∈ coNP beliebig • NP ⊆ coNP : • dann ist L0 ∈ NP • sei L0 ∈ NP beliebig • dann lässt sich L0 auf L mittels einer Funktion f reduzieren • f liefert dann auch eine Reduktion von L0 auf L • da L ∈ NP, folgt dann auch L0 • dann lässt sich L0 auf L mittels einer Funktion f reduzieren • f liefert dann auch eine Reduktion von L0 auf L • da L ∈ NP, folgt dann auch L0 ∈ NP ∈ NP • und somit coNP ⊆ NP. • d.h. L0 ∈ coNP • und somit NP ⊆ coNP. 63 / 65 64 / 65 NP–Vollständigkeit Satz L ist NP-vollständig ⇐⇒ L ist coNP-vollständig. Beweis: • sei L NP-vollständig • dann ist L ∈ NP und somit L ∈ coNP • für jedes L0 ∈ NP existiert eine Funktion f mit x ∈ L0 ⇔ f (x ) ∈ L • damit folgt auch x ∈ L0 ⇔ f (x ) ∈ L • d.h. L ist coNP-vollständig • die Umkehrung folgt analog. 65 / 65