Institut für Informatik Lehrstuhl f ¨ur Informatik 15

Werbung
Institut für Informatik
Lehrstuhl für Informatik 15
Computer Graphik & Visualisierung
Diskrete Strukturen I
Wintersemester 2006/2007
Übungsblatt 10
Seite 1 von 3
Prof. R. Westermann, J. Schneider, J. Georgii, S. Pott
TU München, 08.01.2007
Lösungen zu Diskrete Strukturen I (Blatt 10)
Aufgabe 43
[5 Punkte]
Komplementärgraph
• n = 1. Sei G = ({1}, ). Dann ist G = ({1}, ). Beide Graphen sind 1-f ärbbar und somit auch
2-färbbar.
• n = 2. Sei G = ({1, 2}, ). Dann ist G = ({1, 2}, {{1, 2}}). Beide Graphen sind 2-f ärbbar.
• n = 3. Sei G = ({1, 2, 3}, {{1, 2}}). Dann ist G = ({1, 2, 3}, {{1, 3}, {2, 3}}). Beide sind 2färbbar. Hier ist es bereits notwendig, daß G eine oder zwei Kanten enthält.
• n = 4. Sei G = ({1, 2, 3, 4}, {{1, 2}, {2, 3}, {3, 4}}). Dann ist G = ({1, 2, 3, 4}, {{1, 3}, {1, 4}}, {3, 2}).
Beide sind 2-färbbar. Hier ist es notwendig, daß G zwei Kanten enthält.
Eine notwendige Voraussetzung für die 2-Färbbarkeit ist, dass G keinen K3 als Teilgraphen enthält.
Somit kann es keinen G = (V, N ) mit |V | = 5 geben, für den sowohl G als auch G 2-färbbar wären.
Nach Schubfachprinzip hat jeder 2-färbbare Graph G mit mindestens 5 Knoten mindestens 3 Knoten
der gleichen Farbe. Diese drei Knoten sind dann im Komplementärgraph durch ein Dreieck verbunden. Wäre das nicht so, dann würde eine Kante zwischen zwei gleichgefärbten Vertices in G existieren. Demnach ist also G nicht mehr 2-färbbar.
Aufgabe 44
[2+2+2+2 Punkte]
Breitensuche
1
4
T2
T1
3
3
2
5
6
4
1
5
6
2
7
7
Aufgabe 44a,b
a) d1 [1] = 0, d1 [2] = 2, d1 [3] = 1, d1 [4] = 2, d1 [5] = ∞, d1 [6] = ∞, d1 [7] = ∞
pred1 [1] = N IL, pred1 [2] = 3, pred1 [3] = 1, pred1 [4] = 3, pred1 [5..7] = N IL.
Seite 2 von 3
b) d4 [1] = 2, d4 [2] = 2, d4 [3] = 1, d4 [4] = 0, d4 [5] = 1, d4 [6] = 1, d4 [7] = 2
pred4 [1] = 3, pred4 [2] = 3, pred4 [3] = 4, pred4 [4] = N IL, pred4 [5] = 4, pred4 [6] = 4, pred4 [7] = 6.
c) Beweis (indirekt): Annahme: ∃s, v ∈ V : d s [v] 6= dv [s]. Dann existiert ein Pfad mit Kosten d s [v] von
s nach v und ein Pfad mit Kosten d v [s] von v nach s. Sei nun oBdA ds [v] < dv [s]. Da die Breitensuche
garantiert den kürzesten Pfad findet, stellt dies also einen Widerspruch zur Annahme dar, denn der
Pfad mit Kosten dv [s] kann durch den mit den Kosten d s [v] ersetzt werden.
d) Folgt aus der Tatsache daß d w [v] die Kosten für den kürzesten Pfad von w nach v bezeichnet.
Angenommen dieser Pfad enthält s, dann ist genau dw [v] = dw [s] + ds [v]. Angenommen der Pfad
enthält s nicht, und es gilt nicht d w [v] ≤ dw [s] + ds [v]. Dann könnte aber ein kürzerer Pfad von w nach
v über s gefunden werden, also Widerspruch zur Annahme.
Aufgabe 45
a)
[2+1+1+2 Punkte]
Traversierung von Binärbäumen
• preorder( B1 ) = *+893
• inorder( B1 ) = 8+9*3
• postorder( B1 ) = 89+3*
• preorder( B2 ) = ABDFGEHC
• inorder( B2 ) = FDGBEHAC
• postorder( B2 ) = FGDHEBCA
b) preorder, inorder und postorder entsprechen der Tiefensuche, keiner der Algorithmen entspricht
der Breitensuche.
c) Für alle drei Algorithmen gilt: Jeder Knoten wird genau einmal besucht, zus ätzlich werden die
Stoppsymbole ⊥ einmal getestet. Da der Baum binär ist, kann er maximal 2n Stoppsymbole haben,
also ist die Laufzeit in O(n) – mit zusätzlichem Speicherverbrauch (für den Stack) von O(log2 n) für
einen balancierten Baum und O(n) im schlechtesten Fall.
d) Bei allen drei Algorithmen kann man durch Ausgabe der Klammern den Baum rekonstruieren,
also z.B. preorder: (Label, linkes Kind, rechtes Kind), postorder (linkes Kind, rechtes Kind, Label) etc.
Man kann den Baum bei preorder und postorder Algorithmus auch eindeutig rekonstruieren, wenn
man die Stoppsymbole mitausgibt. Alternativ kann man, wie bei der polnischen Notation, den Baum
für preorder und postorder rekonstruieren, wenn man die Operatorwertigkeiten (also die Anzahl
Kindknoten 6= ⊥) kennt. Im Falle von B2 kann man allerdings dann nicht mehr bestimmen, ob v 7
linkes oder rechtes Kind von v 4 ist.
Seite 3 von 3
Aufgabe 46
[2+2+2+2 Punkte]
Kürzeste Wege
Dortmund
165
83
Köln
Kassel
189
Mannheim
68
Karlsruhe
82
88
Frankfurt
228
294
465
Nürnberg
167
Stuttgart
92
Ulm
139
München
Aufgabe 46a
Aufgabenteil b und c)
Der Dijkstra-Algorithmus liefert zunächst nur die Entfernung. Um den Pfad zu bekommen, muss für
jeden Knoten ein Zeiger auf einen Vorgängerknoten gehalten werden, genau wie in der Breitensuche.
Dieser Zeiger erhält dann ein Update, wenn auch d[v] geändert wird. Dann kann man den durch
diese Zeiger gegebenen Pfad rückwärts traversieren, um die Orte “einzusammeln”. Wir geben also
zusätzlich zu den Distanzen d den Zeiger p an.
1) F = {Ulm,Stuttgart,Karlsruhe,Mannheim,Frankfurt,Nürnberg,Kassel,Dortmund,Köln}.
d[Ulm] = 139, d[Stuttgart] = ∞, d[Karlsruhe] = ∞, d[Mannheim] = ∞, d[Frankfurt] = ∞,
d[Nürnberg] = 167, d[Kassel] = ∞, d[Dortmund] = ∞, d[Köln] = ∞, d[München] = 0.
p[Ulm] = München, p[Nürnberg] = München.
2) u = Ulm, F = {Stuttgart,Karlsruhe,Mannheim,Frankfurt,Nürnberg,Kassel,Dortmund,Köln}.
Updates: d[Kassel] = 604, d[Stuttgart] = 231, d[Frankfurt] = 433.
p[Kassel] = Ulm, d[Stuttgart] = Ulm, d[Frankfurt] = Ulm.
3) u = Nürnberg, F = {Stuttgart,Karlsruhe,Mannheim,Frankfurt,Kassel,Dortmund,K öln}.
Updates: d[Frankfurt] = 395, p[Frankfurt] = Nürnberg.
4) u = Stuttgart, F = {Karlsruhe,Mannheim,Frankfurt,Kassel,Dortmund,K öln}.
Updates: d[Karlsruhe] = 313, p[Karlsruhe] = Stuttgart.
5) u = Karlsruhe, F = {Mannheim,Frankfurt,Kassel,Dortmund,Köln}.
Updates: d[Mannheim] = 381, p[Mannheim] = Stuttgart.
6) u = Mannheim, F = {Frankfurt,Kassel,Dortmund,Köln}.
Updates: keine neuen kürzeren Wege.
7) u = Frankfurt, F = {Kassel,Dortmund,Köln}.
Updates: d[Köln] = 584, p[Köln] = Frankfurt.
8) u = Köln, F = {Kassel,Dortmund}.
Updates: d[Dortmund] = 667, p[Dortmund] = Köln.
9) u = Kassel, F = {Dortmund}.
Updates: keine kürzeren Wege.
10) u = Dortmund, F = .
Updates: keine kürzeren Wege.
Rücktraversierung von p[Köln] liefert (Köln, Frankfurt, Nürnberg, München) mit 584km.
Herunterladen