Inhalt Empfehlenswerte Referenzen 5 Probleme

Transcrição

Inhalt Empfehlenswerte Referenzen 5 Probleme
Tutorium zur theoretischen Informatik
Übungsblatt 5 Zusatzblatt (2007-01-18)
"Die Grinsekatze weiss alles. Aber sie sagt nicht alles."
(Die Grinsekatze in "Kingdom Hearts 1")
Inhalt
1.
2.
3.
4.
5.
6.
7.
Empfehlenswerte Referenzen
5 Probleme
Reduktion SAT ≤p 3-SAT
Reduktion 3-SAT ≤p Independent Set
Reduktion 3-SAT ≤p Vertex Cover
Reduktion Independent Set ≤p Vertex Cover
Algorithmus für HORNSAT
Empfehlenswerte Referenzen
●
●
●
●
●
http://en.wikipedia.org/wiki/Boolean_satisfiability_problem - "SAT" und "3-SAT"
http://en.wikipedia.org/wiki/Vertex_cover_problem – "Vertex Cover"
http://en.wikipedia.org/wiki/Independent_Set_problem – "Independent Set"
http://de.wikipedia.org/wiki/Horn-Formel – "HORNSAT"
Uwe Schöning "Theoretische Informatik – kurzgefasst" - ab Seite 163 werden 10
gängige NP-Probleme samt Reduktionen aufgeführt
5 Probleme
●
●
●
●
"SAT"
○
Gegeben: eine beliebige aussagenlogische Formel
○
Gefragt: gibt es zu dieser Formel eine erfüllende Belegung?
"3-SAT"
○
Gegeben: eine aussagenlogische Formel in konjunktiver Normalform ("KNF")
mit je 3 disjunktiv verknüpften Literalen per Disjunktionsglied. Eine solche
Formel wäre z. B. ((¬ a ∨ b ∨ ¬d) ∧ (b ∨ ¬ c ∨ d) ∧ (a ∨ e ∨ 0) ∧ (¬ e ∨ c ∨ d)).
○
Gefragt: gibt es zu einer solchen Formel eine erfüllende Belegung?
"Independent Set"
○
Gegeben: ein ungerichteter Graph G = (V, E) und ein Wert k ∈ ℕ
○
Gefragt: gibt es eine Knotenmenge V' von mindestens k Knoten aus V, so dass
immer jeweils 2 dieser Knoten zusammen betrachtet, keine verbindende Kante
in E besitzen?
"Vertex Cover" – minimale Knotenüberdeckung
○
Gegeben: ein ungerichteter Graph G = (V, E)
○
Gefragt: welches ist die minimale Teilmenge V' von Knoten aus V, so dass von
den beiden Endpunkten jeder Kante mindestens 1 Knoten in dieser Teilmenge
Seite 1 / 7
Tutorium zur theoretischen Informatik
Übungsblatt 5 Zusatzblatt (2007-01-18)
V' enthalten ist?
●
"HORNSAT"
○
Gegeben: eine Hornformel
○
Gefragt: gibt es für diese Hornformel eine erfüllende Belegung?
Reduktion SAT ≤p 3-SAT
Eigentlich müsste es 3-KNF-SAT heissen. Im Skript befindet sich eine knappe
Beweisskizze. Im Schöning (s. o.) ist ein ausführlicherer Beweis.
Reduktion 3-SAT ≤p Independent Set
Beispielgraph für (¬ x2 ∨ x1 ∨ ¬ x3) ∧ ( x1 ∨ x2 ∨ x4)
http://en.wikipedia.org/wiki/Image:CNF-SAT-independent-set-reduction.svg
Gegeben ist hier eine Instanz des 3-SAT-Problems: eine aussagenlogische Formel, bei
der alle Klauseln konjunkiv verknüpft sind (Und-Verknüpfungen) und innerhalb der Klausel
alle Literale disjunktiv (Oder-Verknüpfungen). Diese Formel ist durch einen Graph
darzustellen, für den genau dann ein Independent Set existiert, wenn die Formel erfüllbar
ist.
Sei der zu konstruierende Graph also zunächst mal leer.
Um die Klauseln im Graph abzubilden, fügen wir dem Graph pro Klausel eine 3er-Gruppe
von miteinander verbundenen Knoten hinzu: jeder der Knoten steht für eines der Literale
dieser Klausel und zwar entweder für die positive oder negierte Form – so halt, wie das
Literal in dieser Klausel enthalten ist.
Danach gibt es im Graph pro Klausel eine solche 3er-Gruppe, und alle 3er-Gruppen sind
noch untereinander unverbunden. In diesem (noch nicht der Lösung entsprechenden)
Graph gibt es ein Independent Set, wenn man aus jeder 3er-Gruppe je einen beliebigen
Knoten auswählt. Die Größe dieses Sets ist genau die Anzahl der Klauseln.
Die Knoten, die ins Independent Set aufgenommen werden, sollen für das Vorkommen
derjenigen Literale stehen, die eine erfüllende Belegung der Formel ergeben. Damit das
aber funktioniert, muss noch verhindert werden, dass in der einen 3er-Gruppe z. B. der
Knoten ins Independent Set aufgenommen wird, der für das positive Vorkommen des
Literals a steht und in einer anderen Formel ein Knoten, der für das negative Vorkommen
Seite 2 / 7
Tutorium zur theoretischen Informatik
Übungsblatt 5 Zusatzblatt (2007-01-18)
des Literals a. Dies wird einfach gemacht, indem bei allen Knoten, die für dasselbe Literal
stehen (evtl. gibt es ja, wie oben dargestellt mehrere davon), diejenigen verbunden
werden, die für gegensätzliche Vorkommen stehen. Beispiel: es gibt 3 Knoten – jeder in
einer anderen 3er-Gruppe – die alle für das Literal a stehen. Einer davon steht für das
positive Vorkommen und die anderen 2 für das negative Vorkommen. Dann muss der
Knoten für das positive Vorkommen von a jeweils mit den beiden für das negative
Vorkommen verbunden werden, zwischen den beiden für das negative Vorkommen von a
stehende Knoten darf keine Verbindung sein.
Das wär´s schon ;-)
In diesem Graph kann es nur dann ein Independent Set von der Größe k geben (wobei k
≔ Anzahl der Klauseln in der Formel, von der wir ausgingen), wenn es für die
Ausgangsformel eine erfüllende Belegung gibt. Ausserdem geben die Literale, für welche
die Knoten stehen, die ins Independent Set aufgenommen wurden, eine erfüllende
Belegung der Ausgangsformel an.
(Man kann sich auch leicht davon überzeugen, dass jeder der o. g. Schritte nicht mehr als
polynomiellen Aufwand verlangt.)
Damit ist gezeigt, dass es für 3-SAT nur dann eine polynomiell gefundene Lösung geben
kann, wenn es auch für Independent Set eine polynomiell gefundene Lösung gibt – die
Reduktion ist also komplett.
Reduktion 3-SAT ≤p Vertex Cover
Gegeben ist also wieder eine Instanz des 3-SAT Problems (s. o.). Gesucht ist eine
Abbildung, die aus dieser Formel einen Graph erstellt, so dass sich aus der minimalen
Knotenüberdeckung für den Graph wiederum eine erfüllende Belegung für die Formel
ableiten lässt.
Die Fragen lauten nun: Wie viele Knoten brauchen wir? Was bedeuten diese Knoten?
Und: wie müssen die Knoten verbunden werden? Was bedeuten die Verbindungen
(Kanten)?
Per Definition hat jede Klausel 3 Literale 1), die in der Klausel jeweils positiv oder negativ
vorkommen können. Damit die Klausel als wahr gewertet wird, muss mindestens 1 Literal
in ihr wahr sein. Daher stellen wir die Literale in den jeweiligen Klauseln durch jeweils
einen Knoten im noch leeren Graph dar und verbinden diese 3 neuen Knoten jeweils
miteinander. Es entstehen 3er-Gruppen von miteinander verbundenen Knoten – eine pro
Klausel der Ausgangsformel. Damit eine Knotenüberdeckung des (jetzt noch nicht der
Lösung entsprechenden) Graph existiert, müssen demnach mindestens 2 der Knoten
einer 3er-Gruppe in der Überdeckung enthalten sein. Der eine Knoten einer 3er-Gruppe,
der nicht in der Überdeckung enthalten sein muss, steht für das Literal der Klausel, das
diese wahr macht.
Beispiel: (¬a ∨ b ∨ ¬c) ist die Klausel. Dann gibt es eine Gruppe von 3 Knoten, die jeweils
paarweise miteinander verbunden sind. Einer steht für "¬a", einer für "b" und der letzte für
"¬c". Es reicht, dass z. B. das Literal a auf falsch gesetzt wird, damit die Klausel als wahr
gewertet wird – die Belegung von b und c ist in dieser Klausel egal. In einer Überdeckung
des Graphen müssten dann die Knoten enthalten sein, die für "b" und "¬c" stehen.
Seite 3 / 7
Tutorium zur theoretischen Informatik
Übungsblatt 5 Zusatzblatt (2007-01-18)
Aber wie kann man sicherstellen, dass alle Literale zwischen den Klauseln immer mit den
gleichen Werten belegt werden (sofern es für die gegebene Formel überhaupt eine gültige
Belegung gibt)?
Für eine erfüllende Belegung muss jedes Literal der Formel entweder falsch oder wahr
belegt werden, aber nicht mit beidem. Es darf also nicht sein, dass ein der einen Klausel
ein Literal in seinem positiven Vorkommen diese Klausel wahr macht und in einer anderen
Klausel eben dieses Literal sein negatives Vorkommen diese andere Klausel wahr macht
– sonst wäre ja die Formel unerfüllbar.
Eine mögliche Instanz von 3-SAT dargestellt durch den Graph der Reduktion.
http://en.wikipedia.org/wiki/Image:3SAT_reduced_too_VC.png
Daher fügen wir dem Graph für jedes in der Formel vorkommende Literal 1 x je 2 Knoten
hinzu: ein Knoten steht für das Vorkommen des Literals in der positiven Form und der
andere für sein Vorkommen in negativer Form. Ausserdem verbinden wir diese zwei
Knoten, die jeweils für dasselbe Literal stehen, miteinander. Somit kommt zum Graph für
jedes Literal eine 2er-Gruppe hinzu, von der mindestens 1 Knoten in einer
Knotenüberdeckung des Graphen enthalten sein muss.
Die 3er- und 2er-Gruppen sind in diesem Zustand noch nicht miteinander verbunden. Von
jedem Knoten einer 3er-Gruppe wird nun eine Kante gezogen hin zum Knoten der 2erGruppe, die für dasselbe Literal und dasselbe Vorkommen (positiv oder negativ) steht.
Damit ist die gegebene Formel durch einen Graph dargestellt. (Jeder oben dargestellte
Schritt kann in polynomialer Zeit durchgeführt werden.)
Was bedeutet es nun, wenn für diesen Graph eine minimale Überdeckung gefunden wird?
Von jeder 2er-Gruppe muss jeweils 1 Knoten gewählt worden sein, wegen der Kante in
der 2er-Gruppe. Das heisst, dass der Knoten einer 3er-Gruppe, der mit einem gewählten
Knoten einer 2er-Gruppe verbunden ist, nicht für eine Überdeckung gewählt werden muss
(aber kann!). Für die zugehörige 3er-Gruppe heisst das: die anderen beiden Knoten
müssen für die Überdeckung gewählt werden, sonst wird mindestens 1 Kante innerhalb
der 3er-Gruppe nicht in die Überdeckung miteinbezogen, was ja nicht sein darf.
Die in der Überdeckung enthaltenen 2er-Gruppen-Knoten stellen damit eine erfüllende
Belegung dar, wenn die Literale, für die sie stehen, in der Weise belegt werden, für die
diese Knoten stehen (also positiv oder negativ).
Es gibt keine erfüllende Belegung offensichtlich genau dann, wenn entweder beide Knoten
einer 2er-Gruppe oder alle 3 einer 3er-Gruppe zur minimalen Überdeckung gehören.
Seite 4 / 7
Tutorium zur theoretischen Informatik
Übungsblatt 5 Zusatzblatt (2007-01-18)
(Wenn eine Überdeckung gefunden wird, kann das in O(n) geprüft werden, indem alle 2erund 3er-Gruppen durchlaufen werden.)
Somit existiert eine polynomielle Lösung für 3SAT genau dann, wenn eine solche auch für
Vertex Cover gefunden werden kann – womit die Reduktion komplett ist.
1
) Es ist möglich, dass eine Klausel weniger als 3 Literale enthält. Sie kann dann künstlich auf 3 Literale aufgebläht werden, in dem ein
Literal mittels einer weiteren Disjunktion "verdoppelt" wird. Z. B. enthält die Klausel (b ∨ c) nur 2 Literale, kann aber auch durch 3
Literale dargestellt werden mittels: (b ∨ c ∨ c). Genau dasselbe Spiel, wenn eine Klausel nur 1 Literal enthält.
Reduktion Independent Set ≤p Vertex Cover
Gegeben ist also eine Instanz des Independent Set, also ein Graph G.
Gezeigt werden soll, dass man diese Instanz (unter Verwendung einer polynomiellen
Umwandlungsfunktion) so darstellen kann, dass sie eine Instanz für das Vertex Cover
Problem darstellt. Wenn das gelingt, ist gezeigt, dass es für das Independent Set Problem
eine Lösung gibt, genau dann, wenn es (für eine beliebige Instanz des Independent Set
Problems) auch eine Lösung für das Vertex Cover Problem gibt.
(Genau genommen muss man auch noch zeigen, dass man aus der evtl. resultierenden
Lösung für das Vertex Cover Problem auch mit polynomiellen Aufwand eine
"Lösungsinstanz" für Independent Set generieren kann. Aber meist ist das durch
Umkehren der ersten Umwandlungsfunktion gegeben (die ja bereits polynomiell sein
muss) – also trivial.)
Es muss also keine Lösung gefunden werden, sondern lediglich das eine Problem in das
andere überführt werden!
Gegeben: eine Instanz I des Independent Set Problems, also G=(V,E) und eine Zahl k,
welches die Größe des gesuchten Independent Sets ist.
f(I) ≔ {
Der Graph wird also unverändert in das Vertex Cover Problem eingegeben. Die Zahl k
wird auf k' ≔ |V| - k geändert. Die Fragestellung an das Vertex Cover Problem ist also: gibt
es eine Knotenüberdeckung von mindestens k' Knoten?
}
Seite 5 / 7
Tutorium zur theoretischen Informatik
Übungsblatt 5 Zusatzblatt (2007-01-18)
Falls eine Lösung für Vertex Cover gefunden wird, kann daraus eine Lösung S für das
Independent Set generiert werden mittels der Funktion h.
Es gibt k' Knoten, so dass bei jeder Kante des Graphen mindestens ein Endknoten in
dieser Knotenmenge enthalten ist. Alle anderen Knoten besitzen offensichtlich paarweise
keine verbindende Kante – denn sonst müsste ja jeweils einer von ihnen in der
Knotenüberdeckung enthalten sein. Damit stellt die Knotenmenge V' eine Lösung für das
Independent Set Problem dar, wobei:
h(S) ≔ { V' ≔ V – {v | v ∈ {Knoten der Lösungsüberdeckung S}} }
f und h sind in P-Zeit durchführbar. Daher ist die Reduktion polynomiell.
Damit ist klar, dass es für Independent Set nur einen polynomiellen Lösungalgorithmus
geben kann, wenn es auch einen für Vertex Cover gibt – womit die Reduktion komplett ist.
Algorithmus für HORNSAT
HORNSAT ist kein NP-vollständiges Problem, sondern eines, für das es einen
polynomiellen Algorithmus gibt! Es ist also ein P-Problem. Daraus folgt...
1. ...dass es keinen Sinn macht, eine Reduktion von HORNSAT auf ein NP-Problem
anzugeben: damit würde man lediglich zeigen, dass es einen polynomiellen
Lösungsalgorithmus für HORNSAT gibt, wenn es auch einen solchen polynomiellen
Algorithmus für das jeweilige NP-Problem gibt. Na toll! Es ist aber bereits ein PAlgorithmus für HORNSAT bekannt – s. u. Nur für die NP-vollständigen Probleme
ist bislang keiner bekannt.
2. ... dass es bislang niemandem gelungen ist, eine Reduktion von einem NP-Problem
auf HORNSAT anzugeben. Denn das wäre ja der Beweis, dass NP = P. Vermutlich
ein wenig zu anspruchsvoll für die "Theoretische Informatik"-Prüfung in unserem
Rahmen. Daher hier weg gelassen :-P.
Da HORNSAT ein P-Problem ist, ist es damit auch zwar ∈ NP (da P Teilmenge von NP
ist), aber nicht NP-vollständig. Zur Erinnerung: "Sei Problem A NP-vollständig. Dann gilt:
(A ∈ P) ⇔ (P = NP)." Aber HORNSAT ist ja in jedem Fall ∈ P – unabhängig davon, ob (P
= NP) gilt.
Eine Hornformel ist eine aussagenlogische Formel in konjunktiver Normalform, was
heisst, dass alle Klauseln durch Konjunktionen (Und-Verknüpfungen) verbunden sind und
in den Klauseln nur Disjunktionen (Oder-Verknüpfungen) vorkommen. Die Klauseln
werden daher auch als Disjunktionsglieder bezeichnet. Desweiteren darf pro
Disjunktionsglied höchstens 1 Literal positiv (d. h. nicht-verneint) sein. Das
Disjunktionsglied wird dann Hornklausel genannt. Beispiel einer Hornformel:
((a → b) ∧ (b → ¬ c) ∧ (e) ∧ (e → c))
≡ ((a → b) ∧ (b → ¬ c) ∧ (1 → e) ∧ (e → c))
≡ ((¬ a ∨ b) ∧ (¬ b ∨ ¬ c) ∧ (¬ 1 ∨ e) ∧ (¬ e ∨ c)
Anmerkungen:
●
(a → b) ≡ (¬ a ∨ b), das kann man z. B. mit der Wahrheitstabelle verifizieren.
Seite 6 / 7
Tutorium zur theoretischen Informatik
Übungsblatt 5 Zusatzblatt (2007-01-18)
●
Für die Implikation → gilt bekanntlich: (1 → a) ist nur dann wahr, wenn a wahr ist.
Daher kann man in einer Hornformel ein einzelnes Literal, oben z. B. e, immer
durch 1 → e ersetzen. Die äquivalente Ersetzung (¬ 1 ∨ e) wiederum wird auch nur
dann wahr, wenn e wahr ist.
Algorithmus fürs Finden einer erfüllenden Belegung
●
Wenn in der Formel ein alleinstehendes Literal vorkommt (oben wäre das "e"), dann
kann die "Single Literal Rule" verwendet werden. man streicht alle Klauseln, in
denen "e" positiv vorkommt, sowie alle Vorkommen von "¬e" aus den anderen
Klauseln und erhält dann eine Formel, die bezüglich der Lösung äquivalent zur
Ausgangsformel ist. Das gestrichene "e" muss für eine Lösung mit 1 belegt werden.
●
Wenn es kein alleinstehendes Literal (wie oben "e") gibt, dann greift man sich aus
einer beliebigen Klausel das dortige positive Literal und setzt es zu 1. Daraus folgt,
dass man die aktuell betrachtete Klausel (und alle anderen Klauseln, in denen
dieses Literal positiv vorkommt), sowie in allen Klauseln, in denen das Literal
negativ auftaucht, sein Vorkommen streichen darf. Führt das zu keiner erfüllenden
Belegung, muss man auch noch die Belegung dieses Literals mit 0 ausprobieren,
was heisst: positive Vorkommen des Literals werden gestrichen und alle Klauseln,
in denen das Literal negativ vorkommt werden komplett gestrichen.
●
So fährt man rekursiv fort, bis entweder in keiner Klausel mehr irgendein positives
Literal vorkommt (dann gibt es in jedem Fall eine erfüllende Belegung: man füllt
einfach der Reihe nach die Literale mit 0, bis bei jeder Klausel mindestens 1 Literal
belegt ist) oder 2 Disjunktionsglieder mit widersprüchlicher Aussage nebeneinander
stehen, z. B.: "(a) ∧ (¬a)", was auf jeden Fall unerfüllbar ist.
Ich wünsche jedem viel Glück bei der Prüfung!
Seite 7 / 7