Praktische Grenzen der Berechenbarkeit - Informatik
Praktische Grenzen der Berechenbarkeit - Informatik
Praktische Grenzen der Berechenbarkeit - Informatik
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
folgt aus:<br />
⎛<br />
⎜<br />
M = ⎜<br />
⎝<br />
0 1 0 1 0 0 0 1<br />
1 0 1 0 1 0 1 0<br />
0 1 0 1 0 0 0 0<br />
1 0 1 0 0 0 0 0<br />
0 1 0 0 0 1 0 1<br />
0 0 0 0 1 0 1 0<br />
0 1 0 0 0 1 0 1<br />
1 0 0 0 1 0 1 0<br />
Die Matrix ist symmetrisch zur Hauptdiagonalen, weil G ungerichtet ist. Es muss<br />
nun also nur für alle mi,j mit mi,j = 1 und i > j überprüft werden, ob sich i o<strong>der</strong><br />
j unter den k ausgewählten Knoten befindet. Dies ist sicherlich mit polynomialem<br />
Aufwand in Abhängigkeit von n möglich, so dass VCP in NP liegt.<br />
Wir reduzieren nun SAT polynomial auf VCP, indem wir ein Verfahren angeben,<br />
durch das jedem booleschen Ausdruck B, <strong>der</strong> auf Erfüllbarkeit getestet<br />
wird, eine Eingabe für VCP (ein Graph G und ein k ∈ N) zugeordnet wird, für<br />
die gilt: B ist genau dann erfüllbar, wenn G eine Überdeckung mit k Knoten<br />
enthält.<br />
Sei also B ein boolescher Ausdruck mit n Variablen. Zur Veranschaulichung<br />
verfolgen wir die Konstruktionsschritte am Beispiel des Ausdruckes<br />
(a ∨ b ∨ ¬c) ∧ (a ∨ ¬b ∨ c ∨ ¬d) .<br />
Für jede <strong>der</strong> Variablen enthält G zwei Knoten, die später das Vorkommen <strong>der</strong><br />
Variablen in den Klauseln (negiert o<strong>der</strong> nicht negiert) repräsentieren. Sie werden<br />
paarweise durch eine Kante verbunden (vgl. Abbildung 16).<br />
⎞<br />
⎟<br />
⎠<br />
aw af bw bf cw cf dw df<br />
Abbildung 16: Konstruktion eines Graphen zum Beweis von Satz 31, Schritt 1<br />
Für jede Klausel enthält G einen vollständigen Teilgraphen, dessen Knotenanzahl<br />
durch die Anzahl <strong>der</strong> Literale in <strong>der</strong> jeweiligen Klausel bestimmt ist (vgl.<br />
Abbildung 17).<br />
Die Kanten zwischen den oberen und unteren Teilgraphen werden so festgelegt,<br />
dass je<strong>der</strong> Knoten aus einem unteren Teilgraphen mit genau einem Knoten<br />
aus einem oberen Teilgraphen verbunden ist, und zwar so, dass jede Kante ein<br />
Literal <strong>der</strong> entsprechenden Klausel repräsentiert (vgl. Abbildung 18).<br />
Nun ergänzen wir die Eingabedaten für VCP noch durch die Angabe einer<br />
natürlichen Zahl k, die sich wie folgt berechnet: Man addiert die Anzahl <strong>der</strong><br />
Variablen zur Anzahl <strong>der</strong> Literale in B und subtrahiert die Anzahl <strong>der</strong> Klauseln.<br />
30