Institut für Informatik der Universität München Prof. Dr. M. Hofmann Dr. M. Lange SS 05 6.7.05 Übungen zur Vorlesung Informatik IV Musterlösungen Aufgabe 60: a) Φ1 ist erfüllbar. Eine erfüllende Belegung ist z.B. b(X1 ) = b(X2 ) = b(X3 ) = 1. b) Φ2 ist unerfüllbar. Die Klausel (¬X1 ∨¬X2 ∨¬X3 ) verlangt, dass mindestens eine der Variablen auf 0 gesetzt wird. Zusammen mit dem Teil (X1 ∨ X2 ) ∧ (X2 ∨ X3 ) ∧ (X1 ∨ X3 ) der verlangt, dass mindestens zwei Variablen auf 1 gesetzt werden, muss eine erfüllende Belegung also genau zwei der Variablen auf 1 setzen. Allerdings bedeutet der Teil (X1 ∨ ¬X2 ∨ ¬X3 ) ∧ (¬X1 ∨ X2 ) ∧ (¬X1 ∨ X3 ) nichts anderes als X1 ↔ X2 ∧ X3 , was nicht durch solch eine Belegung erfüllt werden kann. Aufgabe 61: Sei Φ eine Formel in konjunktiver Normalform, in der jede Klausel höchstens zwei Literale enthält. Zuerst transformieren wir Φ, so dass jede Klausel genau zwei Literale enthält. 1) Ersetze jede Variable, die nur positiv oder nur negativ vorkommt, durch die Konstante 1. Vereinfache Klauseln nach der Regel X ∨ 1 ≡ X. 2) Wenn es eine Variable X gibt, so dass sowohl die Klausel (X) als auch die Klausel (¬X) vorkommt, dann breche ab mit Ausgabe “unerfüllbar”. 3) Lösche alle Klauseln, die weniger als zwei Literale enthalten. Die Formel Φ0 , die man auf diese Weise erhält, ist erfüllbar gdw. Φ erfüllbar ist. Es ist sogar so, dass eine erfüllende Belegung für Φ auch eine erfüllende Belegung für Φ0 ist. Umgekehrt lässt sich eine erfüllende Belegung für Φ0 sehr leicht zu einer erfüllenden Belegung für Φ erweitern. Seien X1 , . . . , Xk die in Φ0 vorkommenden Variablen. 4) Konstruiere den gerichteten Graphen G = (V, E) mit V = {Xi | 1 ≤ i ≤ k} ∪ {Xi | 1 ≤ i ≤ k} E = {(Xi , Xj ) | 1 ≤ i, j ≤ k, (Xi ∨ Xj ) in Φ0 } ∪{(Xi , Xj ) | 1 ≤ i, j ≤ k, (¬Xi ∨ Xj ) in Φ0 } ∪{(Xi , Xj ) | 1 ≤ i, j ≤ k, (Xi ∨ ¬Xj ) in Φ0 } ∪{(Xi , Xj ) | 1 ≤ i, j ≤ k, (¬Xi ∨ ¬Xj ) in Φ0 } Die Bedeutung einer Kante (x, y) ist dabei: Wenn das Literal x auf 1 gesetzt wird, dann muss das Literal y auch auf 1 gesetzt werden. 5) Teste, ob es ein i gibt, so dass die Knoten Xi und Xi jeweils voneinander aus erreichbar sind. Wenn ja, dann gib “unerfüllbar” aus, ansonsten gib “erfüllbar” aus. Angenommen, der Algorithmus liefert “unerfüllbar” wegen einem i. Sei andererseits b eine erfüllende Belegung. Dann gilt entweder b(Xi ) = 0 oder b(Xi ) = 1. Sei ersteres der Fall. Da aber der Knoten Xi von Xi aus erreichbar ist, gibt es eine Klausel, die nicht von b erfüllt wird. Dasselbe gilt, falls b(Xi ) = 1. Angenommen, der Algorithmus liefert “erfüllbar”, weil kein solches i gefunden wurde. Dann lässt sich aus dem Graphen eine erfüllende Belegung für Φ0 ablesen. Beginnend mit einem Knoten x, von dem aus x nicht erreichbar ist, setze das Literal X auf 1. Setze alle vom Knoten x aus erreichbaren Literale ebenfalls auf 1, etc. Dieser Algorithmus läuft in Polynomialzeit. Aufgabe 62: Wir zeigen zuerst, dass das Teilgraphisomorphismenproblem in NP ist. Gegeben G1 = (V1 , E1 ) und G2 = (V2 , E2 ). O.B.d.A. sei V2 = {1, . . . , n}. 1) Für jeden Knoten v ∈ V1 rate nichtdeterministisch eine Zahl a(v) ∈ {0, . . . , n}. 2) Verwerfe, falls es zwei Knoten v, w ∈ V1 gibt mit a(v) = a(w) > 0. 3) Für alle v ∈ V1 mit a(v) > 0 teste das folgende: Wenn es ein w ∈ V1 gibt mit (v, w) ∈ E1 aber (a(v), a(w)) 6∈ E2 , dann verwerfe. Wenn es ein y ∈ V2 gibt mit (a(v), y) ∈ E2 aber kein w ∈ V1 mit a(w) = y, dann verwerfe. 4) Akzeptiere. Dieser Algorithmus errät einen Teilgraphen von G1 und eine partielle Abbildung a : V1 → V2 und testet, ob a ein partieller Isomorphismus ist. Als nächstes Zeigen wir, dass das Teilgraphisomorphismenproblem NP-hart ist. Dies geschieht durch Reduktion vom CLIQUE-Problem. Gegeben ein ungerichteter graph G = (V, E) und eine Zahl k ∈ N, konstruiere zwei Graphen G1 und G2 wie folgt. Setze G1 := G und G2 := ({1, . . . , k}, {{i, j} | 1 ≤ i < j ≤ k}). G2 ist also die vollständige Clique der Größe k. Jetzt gilt: G hat eine Clique der Größe k gdw. G1 einen Teilgraphen hat, der isomorph zu G2 ist. Die Reduktion ist in polynomieller — genauer gesagt quadratischer — Zeit berechenbar, wenn k in unärer Kodierung gegeben ist. Ist k binär kodiert, dann kann man folgenden Trick anwenden: Ist k > |G|, dann wähle G1 als leeren Graph, G2 als Graph mit nur einem Knoten. In diesem Fall ist kein Teilgraph von G1 isomorph zu G2 , aber G kann auch keine Clique der Größe k haben. Ist k ≤ |G|, dann braucht obige Reduktion zwar Zeit, die exponentiell in log k ist, aber deswegen polynomiell in |G|. Und da die Größe der Eingabe |G| + log k ist, ist somit die Reduktion immer noch polynomiell. Aufgabe 63: Wir geben Reduktionen vom und auf das Independent-Set-Problem an. In der Tat zeigen diese Reduktionen, dass das Partyveranstaltungsproblem dasselbe ist wie das Independent-Set-Problem. (Partyveranstaltungsproblem ≤p Independent Set) Seien n Bekannte mit einer symmetrischen, zweistelligen Nicht-Leiden-Können-Relation sowie eine Mindestzahl an Gästen k gegeben. Erstere bilden einen ungerichteten Graphen. Jetzt gilt: Die Party kann man k wohlwollenden Gästen starten gdw. der entsprechende Graph ein Independent Set der Grösse mindestens k hat. Da Independent Set ∈ NP, ist auch das Partyveranstaltungsproblem in NP. (Independent Set ≤p Partyveranstaltungsproblem) Sei G = (V, E) ein Graph. Fasse jeden Knoten als einen Bekannten und jede Kante als Indiz dafür auf, dass sich die beiden entsprechenden Bekannten nicht leiden können. Jetzt gilt: Der Graph hat ein Independent Set der Größe k gdw. es unter den Bekannten mindestens k gibt, die nichts aneinander auszusetzen haben und deswegen als Partygäste in Frage kommen. Da Independent Set NP-hart ist, ist auch das Partyveranstaltungsproblem NP-hart.