@ TECHNISCHE UNIVERSITÄT CAROLO-WILHELMINA ZU BRAUNSCHWEIG Institut für Theoretische Informatik Prof. J. Adámek, Dr. J. Koslowski Braunschweig, 2008-05-28 Theoretische Informatik 2, Blatt 6 Abgabetermin: 2008-06-04 Aufgabe 25 (Übung) Lösen Sie das Post’sche Korrespondenzproblem P = h{a, b, d, e, n, o, s}, 6, α, βi mit α = (a, ana, anna, na, ne, sban) sowie β = (a, an, bodo, an, nane, asb) Lösungsvorschlag: Eine sehr einfache Lösung ist durch die Indexfolge h1i gegeben. Es gibt aber noch weitere Lösungen. Offenbar kann der Index 3 in keiner Lösung auftreten. Mittels Trial and Error findet man z.B. schnell die Folge h2, 4, 6, 1, 5i mit dem Wort “ananasbanane”. Die beliebige endliche Konkatenation von Lösungsfolgen ist wieder eine Lösungsfolge. Beim Suchen einer Lösung ist es sinnvoll, nur den derzeit aktuellen “Überhang” aufzulisten, zusammen mit dem Tupel, welches das bisher kürzere Wort liefert (und welches somit den nächsten Index bestimmt, falls einer existiert). Diese Informationen können z.B. als Knoten in einem gerichteten Graphen dargestellt werden, dessen Pfeile Indexnummern tragen: aana :β ? 2 na : β_? ana : β ??1,4 ? ? 2 an O : β 5 6 a :O β s 2 :− 1,4 Aufgabe 26 (Übung) Das E-Problem uZSH fragt, ob ein gegebener ungerichteter Graph G = hV, Ei zusammenhängend ist. Entwerfen Sie einen deterministischen Polynomialzeitalgorithmus, der (Codierungen von) Graphen auf Zusammenhang testet, und schätzen Sie die Laufzeit ab. Lösungsvorschlag: Für einen Graphen mit n Knoten nummerieren wir diese von 0 bis n − 1 . Idee: Wir markieren alle von 0 erreichbaren Knoten. G ist genau dann zusammenhängend, wenn alle Knoten von 0 aus erreichbar sind. 0. Markiere nur den Knoten 0 . 1. Initialisiere die Liste L der noch zu bearbeitenden Knoten als (0) . 2. Initialisiere den Zählindex m zu n − 1 . 3. Bis L leer ist: 3.0 Entferne das erste Element, den aktuellen Knoten, aus L . 3.1 Zu jeder Kante, die den aktuellen Knoten als Endpunkt hat: 3.1.0 Sofern der andere Endpunkt, der nächste Knoten, noch nicht in markiert ist: 3.1.0.0 Markiere den nächsen Knoten. 3.1.0.1 Hänge den nächsten Knoten rechts an die Liste L an. 3.1.0.2 Verringere den Zählindex um 1 . 4. Akzeptiere G falls m = 0 . Laufzeitanalyse: • Schritt 0 benötigt O(|V |) Zeit. • Schritte 1 und 2 benötigen konstante Zeit. • Die äußere Schleife in Schritt 3 kann maximal |V | - mal durchlaufen werden, da kein Knoten mehr als einmal zu L hinzugefügt wird. – Schritt 3.0 benötigt konstante Zeit. – Die innere Schleife in Schritt 3.1 kann höchstens |E| - mal durchlaufen werden. ∗ Der Markierungstest in Schritt 3.1.0 erfordert höchstens O(|V |) Schritte. · die Schritte 3.1.0.0 bis 3.1.0.2 erfordern konstante Zeit.. • Schritt 4 erfordert konstante Zeit.. Insgesamt ist die Laufzeit durch O(|V |) + |V | · O(|E|) · O(|V |) = O(|V |2 · |E|) beschränkt, wegen |E| ≤ 4 (|V |)2 sogar durch O(|V | ) . Aufgabe 27 (Hausaufgabe) Geben Sie jeweils 10 Lösungen des folgenden Post’schen Korrespondezproblems an: (a) [4 punkte] ({a, b}, 3, (a, abaaa, ab), (aaa, ab, b)) (b) [9 sonderpunkte] (Nur wenn Sie zuviel Zeit haben.) ({a, b}, 3, (aba, aa, a), (a, ab, aaab)) Lösungsvorschlag: Wir können den Versuch eine Lösung zu finden als Spiel auffassen: Die aktuelle Spielsituation ist durch die Differenz des α -Wortes gegenüber dem β -Wort bestimmt. Ist das α -Wort länger, so ist β am Zug und muß einen Index spielen (woraufhin α denselben Index spielen muß), ist das β -Wort länger, so ist α mit einem neuen Index am Zug (der von β zu wiederholen ist). Ein neuer Index muß so gewählt werden, daß das entsprechende eigene Wort zu dem vorhandenen Überhang paßt. Es handelt sich um ein kooperatives Spiel: α und β gewinnen, wenn die Differenz erreicht wird. Die möglichen Zugfolgen lassen sich mittels eines Graphen beschreiben. Die Knoten zeigen den aktuellen Überhang und den Spieler, der den nächsten Zug bestimmt. Die Züge selbst sind als Label an den Pfeilen aufgeführt. (a) aaa ? :α 1 a? : α 1 aaaa _?: α a:β ?? ? ?? 1 1 ? aa : _?α aaa : β ?? ? ?? 3 2 1 q : α, β Aus dem Graphen ließt man ab, daß die Indexfolgen (2113)k , k ∈ IN , alle Lösung des PCP sind. (b) Ein geringfügig größerer Graph liefert die Lösungen (331312113331313121211121)k , k ∈ IN . Wir geben nur den relevanten Zyklus des Graphen an: aabaaaba ? ?? :3α 1 ?? ? abaaabaaab : α abaaabaaaab ? ?? 1 : α 3 ?? ? aabaaab :α aabaaaaba ? ?? 3: α 3 ?? ? aaab abaaaaabaaaab ? :α ?? 1 : α 3 ?? ? a? : α aaabaaaaba ?? 2: α 1 ?? ? aba : α abaaaabaab ? ?? 1: α 1 ?? ? abaab _?: α aaabaaba : α ?? ? 2 ? 2 aaaba _?: α abaabaab : α ?? ?? 1 1 abaaaab_? : α abaaba : α ?? ?? 3 1 aaba :_?α abaa : α ?? ?? 1 1 aa : α abaaab_?: α ?? ?? 3 2 aab : _?α ab : α ?? ?? 3 1 :− Aufgabe 28 (Hausaufgabe) Das E-Problem uEULER-KREIS fragt, ob ein ungerichteter Graph G = hV, Ei einen Eulerschen Kreis hat, d.h., ob es einen Rundweg gibt, der alle Knoten berührt und jede Kante genau einmal verwendet. (a) [5 punkte] Zeigen Sie, daß G genau dann einen Eulerschen Kreis hat, wenn G zusammenhängend ist und von jedem Knoten eine gerade Anzahl von Kanten ausgeht. (b) [8 punkte] Entwerfen Sie einen deterministischen Polynomialzeitalgorithmus, der (Codierungen von) Graphen darauf testet, ob sie Eulersche Kreise haben, und schätzen Sie dessen Laufzeit ab. Lösungsvorschlag: Vorbemerkung: Der Begriff Graph wird in verschiedenen Bereichen der Mathematik unterschiedlich interpretiert. In der klassischen Graphentheorie betrachtet man zumeist nur (gerichtete oder ungerichtete) Graphen ohne Loops und Mehrfachkanten. Sind diese besonderen Features in Ausnahmefällen von Relevanz, so spricht man von Multi-Graphen. Die Vorlesung folgt dieser Konvention. In anderen Bereichen der Mathematik bezeichnet der Begriff dagegen gerichtete Graphen, in denen sowohl Loops als auch Mehrfachkanten á priori erlaubt sind. Alles andere sind Spezialfälle. Trick: Wir beweisen den Satz für Multi-Graphen (Loops und Mehrfachkanten erlaubt). Daraus folgt sofort der Satz für klassische Graphen (ohne Loops und Mehrfachkanten). Die Adjazenzmatrix für einen Multigraphen hat natürliche Zahlen als Einträge. Diese geben die Anzahl der Verbindungskanten zwischen den Knoten an. Der Kantengrad von u ∈ V gibt an, wie oft u als Endpunkt einer Kante auftritt. Achtung: der Endpunkt eines Loops zählt doppelt! (a) ( =⇒ ) Aus der Existenz eines Rundwegs, der alle Knoten berührt, folgt sofort der Zusammenhang des Graphen. Wir starten den Eulerschen Kreis bei u ∈ V . Jedesmal, wenn u im Verlauf des Eulerschen Kreises wieder erreicht wird, entfernen wir den bisher durchlaufenen Teilkreis. Dadurch verringert sich der Kantengrad von u um den Wert 2. Nach Beendigung des Eulerschen Kreises sind alle Kanten entfernt, folglich muß der ursprüngliche Kantengrad von u gerade gewesen sein. ( ⇐= ) Induktion über die Knotenzahl n . Für n ∈ {0, 1} ist die Behauptung klar. Wir nehmen an, daß jeder zusammenhängende Multigraph mit < n Knoten einen Eulerschen Kreis besitzt, sofern alle Knoten geraden Kantengrad haben. Der zusammenhängende Graph G = hV, Ei habe n Knoten, alle mit geradem Kantengrad. Wähle u ∈ V betrachte die Menge e v 6= u } Eu := { e ∈ E : u aller Kanten mit Endpunkt u , die einen von u verschiedenen zweiten Endpunkt haben. Nach Voraussetzung enthält Eu eine gerade Anzahl von Kanten, denn jeder Loop am Knoten u trägt einen Summanden 2 zum geraden Kantengad von u bei. f Wir entfernen nun sukzessive zwei verschiedene G- Kanten v u und u fg durch eine neue Kante v w, bis alle Kanten aus Eu aufgebraucht sind. g w und ersetzen sie Der resultierende Graph G0 hat mindestens zwei Zusammenhangskomponenten (eine mit dem einzigen Knoten u ). In all diesen existieren nach Voraussetzung Eulersche Kreise. Rückersetzung f g fg w in diesen Kreisen durch die alten Kanten v u und u w, fügt all der neuen Kanten v diese Kreise zu einem Eulerschen Kreis für G zusammen. Will man den Beweis direkt für Graphen ohne Loops und Mehrfachkanten führen, wird er umständlicher, da wir zwei Nachbarn von u nicht ohne Weiteres verbinden können. Sind vi , i < 2m , die Nachbarn von u , so definieren wir die Kantenmenge Ẽ des neuen Graphen G̃ mit derselben Knotenmenge durch Entfernen aller Kanten mit Endpunkt u sowie {v2k , v2k+1 } ∈ Ẽ ⇐⇒ {v2k , v2k+1 } ∈ /E Alle übrigen Kanten von G bleiben unverändert. Der Kantengrad aller Knoten von G̃ ist immer noch gerade, aber G̃ hat mindestens zwei Zusammenhangskomponenten, in denen nach Voraussetzung Eulersche Kreise existieren. Jede Kante der Form {v2k , v2k+1 } ∈ Ẽ wird in ihrem Eulerschen Kreis nun durch das Paar alter Kanten h{v2k , u}, {u, v2k+1 }i ∈ E 2 ersetzt. Und im Fall {v2k , v2k+1 } ∈ / Ẽ wird der Eulersche Kreis in der Zusammenhangskomponente von v2k um das Dreieck h{v2k , u}, {u, v2k+1 }, {v2k+1 , v2k }i ∈ E 3 erweitert. Auf diese Weise erhalten wir einen Eulerschen Kreis für G . (b) Für einen Graphen mit n Knoten nummerieren wir diese von 0 bis n − 1 . Idee: Nach der Überprüfung, ob G zusammenhängend ist, bestimmen wir ggf. den Grad aller Knoten. Dabei können wir Loops, d.h., Kanten mit demselben Anfangs- wie Endpunkt, ignorieren. Wir verwenden die Codierung mittels Adjazenzmatrizen. 0. Falls G nicht zusammenhängend ist, ablehnen. Andernfalls 1. Überschreibe die Diagonale der Adjazenzmatrix mit Nullen. (Damit werden alle Loops eliminiert, die jeweils für einen Summanden 2 des Kantengrades ihres Knotens verantwortlich sind.) 2. Für jeden Knoten i < n : 2.0 Summiere die i- te Zeile der Adjazenzmatrix. 2.1 Abbruch bei ungeradem Ergebnis; G ablehnen. 3. Akzeptiere G . Laufzeitanalyse: 0. Der Zusammenhangstest benötigt polynomiale Laufzeit in |V | . 1. Das Überschreiben der Diagonale benötigt O(|V |) Zeit. 2. Die Schleife wird maximal |V |- mal durchlaufen. 2.0 Die Addition von < |V | Zahlen erfordert polynomiale Zeit in |V | . 2.1 Die Entscheidung über den Abbruch erfodert konstante Zeit. 3. Die letztendliche Akzeptanz erfordert konstante Zeit. Der gesamte Zeitbedarf ist polynomial in |V | .