Theoretische Informatik 2, Blatt 6

Werbung
@
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 | .
Herunterladen