Theoretische Informatik NP–Vollständigkeit NP–Vollständigkeit NP

Werbung
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
Herunterladen