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