Technische Universität München Zentrum Mathematik Prof. Dr. P. Gritzmann, Dipl.-Inf. Dipl.-Math. S. Borgwardt, Dr. M. Ritter Optimierung 2, WS 2008/09 Übungsblatt 12 Aufgabe 12.1 Betrachten Sie die folgenden Probleme: Hamiltonkreis) Problem ( Ein Graph Gegeben: Auftrag: G = (V, E). Entscheide, ob G einen Hamiltonkreis besitzt. Gerichteter Hamiltonkreis) Problem ( Ein Digraph Gegeben: Auftrag: G = (V, E). Entscheide, ob G einen (gerichteten) Hamiltonkreis besitzt. a) Zeigen Sie: Das Problem Hamiltonkreis kann polynomiell auf das Problem Gerich- teter Hamiltonkreis reduziert werden. b) Was sagen Sie zu folgender Aussage: Hat man eine Instanz G = (V, E) von Gerichte- ter Hamiltonkreis gegeben, so deniert man einfach einen ungerichteten Graphen G0 = (V, E 0 ) durch E 0 := {{u, v} : (u, v) ∈ E}. Damit ist das Problem auf Hamilton- kreis reduziert. c) Zeigen Sie: Das Problem Gerichteter Hamiltonkreis kann polynomiell auf das Problem Hamiltonkreis reduziert werden. Lösung zu Aufgabe 12.1 a) Zu einer Instanz (V, E ∗ ) durch G = (V, E) von Hamiltonkreis denieren wir einen Digraphen G∗ := E ∗ := [ {(u, v), (v, u)} . {u,v}∈E Besitzt G∗ einen gerichteten Hamiltonkreis, so entspricht diesem natürlich auch ein Ha- Umgekehrt gibt es zu jedem Hamiltonkreis in G aber auch einen korG∗ (genau genommen sogar zwei), wenn man sich auf ∗ eine Durchlaufrichtung festlegt. Also gilt: G besitzt genau dann einen Hamiltonkreis, miltonkreis in G. respondierenden Hamiltonkreis in wenn G einen besitzt, damit hat man die gewünschte polynomielle Reduktion. b) Die Aussage ist natürlich Unsinn, wie folgendes Beispiel zeigt: 1 2 3 1 4 Oenbar bestitzt der Digraph keinen gerichteten Hamiltonkreis, seine ungerichtete Version hat aber natürlich einen Hamiltonkreis. c) Sei G = (V, E) eine Instanz von Gerichteter Hamiltonkreis, dann nehmen wir fol- gende Transformation auf einen (ungerichteten) Graphen V 0 := [ v + , v, v − G0 = (V 0 , E 0 ) vor (vgl. Skizze): v∈V ! E 0 := E10 ∪ E20 := u− , v + : (u, v) ∈ E ∪ [ v + , v , v, v − v∈V v v− v v+ Wir zeigen, dass diese Transformation die gesuchte Reduktion darstellt. Dass die Transformation mit polynomiell beschränktem Aufwand durchführbar ist, ergibt sich aus der Tatsache, dass der neue Graph 3n Knoten und m + 2n Kanten besitzt, seine Gröÿe ist also polynomiell beschränkt in der Gröÿe des Digraphen Bleibt zu zeigen, dass G0 G. genau dann einen Hamiltonkreis enthält, wenn richteten Hamiltonkreis enthält. Die eine Richtung ist klar: Falls G G einen ge- einen gerichteten G0 , wenn Hamiltonweg enthält, ergibt sich daraus natürlich auch ein Hamiltonweg in + − man jeden Knoten x durch die Knotenfolge x , x, x ersetzt. Für die Umkehrung setzen wir voraus, dass G0 einen Hamiltonkreis enthält. Dieser Kreis enthält dann natürlich auch alle Mittelknoten, und mit einem Mittelknoten x sind auch + − die beiden Kanten {x , x} und {x, x } im Hamiltonkreis enthalten, und zwar unmittelbar hintereinander (anders ist x ja nicht zu erreichen). Der Hamiltonkreis ist also eine + − − + Aneinanderreihung von Knotentripeln x , x, x oder x , x, x . Aus der Konstruktion 2 von G0 folgt aber, dass diese Tripel alle einheitlicher Reihenfolge durchlaufen werden müssen, d.h. auf einen Minusknoten folgt immer ein Plusknoten oder umgekehrt − + von einem x -Knoten kommt man ja nur zu einem y -Knoten und umgekehrt. Ein solcher Hamiltonkreis entspricht aber einem gerichteten Hamiltonkreis in + − in der Reihenfolge x , x, x für alle Knoten durchläuft. G, wenn man ihn Aufgabe 12.2 Wir zeigen, dass der Floyd-Warshall Algorithmus auf einem Graphen G = (V, E) mit n = |V | als Beispiel für dynamische Optimierung verstanden werden kann. Dazu konstruieren wir den zugehörigen Schichtgraphen. Dabei benutzen wir jeweils eine Schicht von Knoten für jeden Schritt des Algorithmus, also (k) für jede Matrix DG , k = 0, . . . , n, und einen Knoten pro Schicht für jeden Eintrag von (k) (k) DG = (δij )i,j∈[n] . a) Skizzieren Sie die Knotenmenge des Schichtgraphen und beschreiben Sie die Bedeutung der einzelnen Knoten. Wieviele Knoten gibt es in Ihrem Schichtgraphen? b) Beschreiben Sie die Kantenmenge Ihres Schichtgraphen und die dazugehörige Stufenkostenfunktion. Was stellen Sie für Ihre Stufenkostenfunktion fest? c) Bestimmen Sie eine möglichst scharfe Laufzeitschranke für Ihren Algorithmus. Lösung zu Aufgabe 12.2 a) Neben einem Startknoten s benutzen wir für jeden der n Schritte (und für die urprüng- liche Distanzmatrix) des Floyd-Warshall-Algorithmus eine Schicht von Knoten, die den (i, j) k -ten Matrix repräsentiert die Länge eines kürzesten vi , vj -Weges in dem gegebenen Graphen, der nur Knoten v1 , ..., vk als Zwischenknoten benutzt, für k = 0 entspricht er dem Wert der Distanzmatrix an der Stelle (i, j). Den entsprechenden Knoten in unserem Schichtgraphen (der sich in Schicht k bendet) indizieren wir als vi,j,k . Matrix-Einträgen des entsprechenden Schrittes entsprechen. Der Eintrag an Stelle in der Insgesamt haben wir damit s und vi,j,k ∀i, j ∈ {1, ..., n}, k ∈ {0, ..., n}, also n2 · (n + 1) + 1 Knoten. vi,j,0 unseres Graphen soll jeweils die Kantenlängen zwischen s mit einer Kante mit jedem dieser Stufenkostenfunktion φ((s, vi,j,0 )) = w((vi , vj )), falls (vi , vj ) ∈ b) Die erste Schicht der Knoten Knoten vi und vj angeben. Dazu verbinden wir Knoten, und benutzen als E und φ((s, vi,j,1 )) = ∞ sonst. Damit enthalte die Schicht noten aus v1 , ...vk . k die kürzesten Wege zwischen Knoten allein mit Zwischenk- Die Kanten zu Schicht Da ein kürzester Weg über Knoten Knoten 0, vk+1 k+1 v1 , ..., vk+1 entstehen folgendermaÿen: zwischen zwei Knoten möglicherweise den (vi,j,k , vi,j,k+1 ) mit φ((vi,j,k , vi,j,k+1 )) = vi,j,k+1 übernommen werden kann. gar nicht benutzt, haben wir Kanten so dass das Label von Knoten vi,j,k direkt für 3 vk+1 auf dem Weg entstehen durch den Dreiecksoperator mögvi , ..., vk+1 , ..., vj . Dessen Länge setzt sich natürlich zusammen aus der Länge des Weges vi , ..., vk+1 und des Weges vk+1 , ..., vj . Dementsprechend fügen wir dem Schichtgraphen Kanten von vi,k+1,k zu vi,j,k+1 hinzu mit φ((vi,k+1,k , vi,j,k+1 )) = δ(vk+1,j,k ), wobei δ(vk+1,j,k ) dem Label des Knotens vk+1,j,k entspricht, also der Länge eines kürzesten vk+1 , vj -Weges über Knoten v1 , ..., vk . Da δ(vi,k+1,k ) der Länge eines kürzesten vi , vk+1 -Weges über Knoten v1 , ..., vk entspricht, wird das Label des Knotens vi,j,k+1 genau mit der Länge eines kürzesten vi , vj -Weges über v1 , ..., vk+1 belegt, wenn wir das Durch das Erlauben von licherweise vi , vj -Wege der Form Minimum der angebotenen Wege zum Knoten auswählen. Diese Stufenkostenfunktion lässt sich nicht geschlossen angeben: Mit der Denition φ((vi,k+1,k , vi,j,k+1 )) = δ(vk+1,j,k ) kennen wir die Kantengewichte zur Schicht nachdem wir die Knotenlabels der Schicht k k+1 erst, berechnet haben. Für unseren Algorithmus ist dies unproblematisch. c) Wir bestimmen eine Laufzeitschranke für unseren Algorithmus durch die Anzahl der 3 Knoten und Kanten in unserem Graphen. Nach Aufgabe a) haben wir n +n+1 Knoten. 2 Von s laufen n Kanten zu den Knoten der ersten Schicht. Danach haben wir n weitere Übergänge von einer Schicht zur nächsten. In diesen gibt es für jeden Knoten Kante zu vi,j,k eine vi,j,k+1 und für n weitere Knoten vi,k+1,k (i ∈ {1, ..., n}) jeweils n weitere Kanten vi,j,k+1 (j ∈ {1, ..., n}). Wir haben also n2 +n2 = 2n2 Kanten für einen solchen zu Knoten Schichtübergang. 3 Zusammen haben wir n + n + 1 Knoten und 3 in O(n ). (Vgl. Vorlesung) n2 + n · (2n2 ) = n2 + 2n3 Kanten, sind also Aufgabe 12.3 Hausaufgabe a) Erweitern Sie den Euklidischen Algorithmus (6.1.9 der Vorlesung) zur Bestimmung des gröÿten gemeinsamen Teilers zweier Zahlen a, b ∈ N derart, dass Faktoren s, t ∈ Z bestimmt werden, so dass ggT (a, b) = s · a + t · b. Begründen Sie die Korrektheit Ihres Algorithmus. b) Benutzen Sie Ihren Algorithmus aus Teilaufgabe a), um eine ganzzahlige Lösung der folgenden diophantischen Gleichung zu bestimmen: 6 · x1 + 12 · x2 + 14 · x3 = 16 c) Bestimmen Sie alle ganzzahligen Lösungen der Gleichung aus Teilaufgabe Vorlesung. (Vgl. Beispiel 7.1.9 der Vorlesung.) Lösung zu Aufgabe 12.3 4 b) analog zur Algorithmus 1 : Input : a, b ∈ N Output : s, t ∈ Z Erweiterter Euklidischer Algorithmus mit 1 Setze k = 0; r0 = a, r1 2 while rk+1 6= 0 do 3 k := k + 1 4 5 6 7 ggT (a, b) = s · a + t · b = b; s0 = 1, s1 = 0; t0 = 0, t1 = 1. c qk := b rk−1 rk rk+1 := rk−1 − qk · rk sk+1 := sk−1 − qk · sk tk+1 := tk−1 − qk · tk 8 end 9 return: s = sk , t = tk rk konstruiert, die als ggT von a und b in Frage kommen. Sobald rk+1 = rk−1 − qk · rk = 0 brechen wir ab, da wir dadurch rk−1 ∈ N und wir hiermit feststellen, dass ggT (a, b) = ggT (rk−1 , rk ) = rk wissen, dass rk ist. (Vgl. Lemma 6.1.10). a) Analog zu Algorithmus 6.1.9 wird eine Folge fallender Mit der gewählten Initialisierung gilt r0 = a = 1 · a + 0 · b = s0 · a + t0 · b r1 = b = 0 · a + 1 · b = s1 · a + t1 · b sk und tk erfolgen nun analog zu den Belegungen der rk , so dass rk = sk · a + tk · b gilt. Da am Ende des Algorithmus ggT (a, b) = rk gilt, arbeitet Die Belegungen der stets der Algorithmus korrekt. b) Nach Lemma 7.1.6 und Bemerkung 7.1.7 berechnen wir (iterativ) den ggT der drei Koef- zienten. (Natürlich kann man ihn in diesem Beispiel einfach ablesen.) Hierzu benutzen wir unseren erweiterten Euklidischen Algorithmus, so dass wir dabei die Lösung der Gleichung mitbestimmen. ggT (6, 12) = 6 = 1 · 6 + 0 · 12 durch Ablesen oder r0 = 6, s0 = 1, t0 = 0 r1 = 12, s1 = 0, t1 = 1 r2 = 6 − 0 · 12 = 6, s2 = 1, t2 = 0 r3 = 12 − 2 · 6 = 0, s3 = 0 − 2 · 1 = −2, t3 = 1 − 2 · 0 = 1 Also: s = s2 = 1, t = t2 = 0 Schritt 1: wie folgt ggT (6, 14) = 2 = −2 · 6 + 1 · 14 durch Ablesen oder = 6, s0 = 1, t0 = 0 = 14, s1 = 0, t1 = 1 = 6 − 0 · 14 = 6, s2 = 1, t2 = 0 = 14 − 2 · 6 = 2, s3 = 0 − 2 · 1 = −2, t3 = 1 − 2 · 0 = 1 = 6 − 3 · 2 = 0, s4 = 1 − 3 · (−2), t4 = 0 − 3 · 1 = −3 Also: s = s3 = −2, t = t3 = 1 Schritt 2: r0 r1 r2 r3 r4 5 wie folgt Schritt 3: Zusammen ergibt sich ggT (6, 12, 14) = 2 = −2·ggT (6, 12)+1·14 = −2(1·6+0·12)+1·14 = −2·6+0·12+1·14 Da 16 = 2 · 8 erhalten wir als Lösung x1 = −2 · 8 = −16, x2 = 0, x3 = 1 · 8 = 8. ggT -Berechnungen wie folgt 1 −2 0 (6, 12, 14) 0 1 0 = (6, 0, 14) 0 0 1 1 0 −2 (6, 0, 14) 0 1 0 = (6, 0, 2) 0 0 1 1 0 0 (6, 0, 2) 0 1 0 = (0, 0, 2) −3 0 1 c) In Matrixschreibweise sehen unsere aus: Wir erhalten eine Matrix 1 −2 0 1 0 −2 1 0 0 7 −2 −2 1 0 C = 0 1 0 0 1 0 0 1 0 = 0 0 0 1 0 0 1 −3 0 1 −3 0 1 (6, 12, 14)C = (0, 0, 2). Damit ist 6 · x1 + 12 · x2 + 14 · x3 = 2β 0 lösbar für β 0 ∈ Z, 0 T −1 also insbesondere für 2β = 16. C ist regulär, also gilt für y := (y1 , y2 , y3 ) := C x mit 16 = (6, 12, 14)x = (6, 12, 14)Cy = (0, 0, 2)y = 2y3 Damit ist y3 (−2, 1, 0)T y2 = 8 und wir erhalten alle Lösungen in der Form x = Cy = (7, 0, −3)T y1 + + (−2, 0, 1)T · 8, wobei y1 , y2 ∈ Z beliebig sind. 6