Das Briefträgerproblem Paul Tabatabai 30. Dezember 2011 Inhaltsverzeichnis 1 Problemstellung und Modellierung 1.1 Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Modellierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 2 2 Lösung 2.1 Lösung für eulersche Graphen . . . . 2.2 Lösung für Bäume . . . . . . . . . . 2.3 Generelle Lösung (nach [8]) . . . . . 2.3.1 Theoretische Lösung . . . . . 2.3.2 Algorithmus . . . . . . . . . . 2.3.3 Korrektheit des Algorithmus . . . . . . 2 2 2 2 3 3 3 3 Verwendete Algorithmen 3.1 Kürzeste Pfade: Algorithmus von Floyd-Warshall . . . . . . . . . 3.2 Minimales perfektes Matching: Edmonds Matching Algorithmus . 3.3 Euler-Tour: Algorithmus von Hierholzer . . . . . . . . . . . . . . 5 5 7 7 4 Beispiele 4.1 Beispiel 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Beispiel 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 7 9 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1 Problemstellung und Modellierung Problem Das Problem wurde erstmals 1962 von dem chinesischen Mathematiker Mei Ko Kwan untersucht, der ihm den Namen Chinese Postman Problem gab. Ein (chinesischer) Briefträger soll über den kurzmöglichsten Weg alle Straßen einer Stadt besuchen, und am Ende wieder an seinem Startpunkt angelangen. 1.2 Modellierung Für die Modellierung des Problems betrachtet man einen zusammenhängenden ungerichteten Graphen G = (V, E), wobei die Kantenmenge E(G) die Straßen der Stadt sind und die Knotenmenge V (G) die Kreuzungen der Straßen darstellen. Die Längen der Straßen werden durch eine Gewichtsfunktion der Kanten modelliert: w : E → R≥0 . Gesucht ist ein minimaler (minimal bezüglich der Kanten-Gewichte) Zyklus, der jede Kante mindestens einmal enthält. 2 Lösung Die Lösung des Problems ist von dem modellierten Graphen abhängig. Für eulersche Graphen und Bäume gibt es eine triviale Lösung. Für beliebige Graphen stellen wir ein Lösungsverfahren vor und beweisen dessen Richtigkeit. 2.1 Lösung für eulersche Graphen Ein Graph heißt eulersch, wenn er eine geschlossene Tour enthält, die jede Kante genau einmal enthält. Eine Tour heißt geschlossen, wenn sie wieder an ihrem Startpunkt endet (so wie es auch bei unserem Problem verlangt wird). In eulerschen Graphen ist der gesuchte Zyklus genau die Euler-Tour des Graphen. Gefordert ist ein Zyklus, der jede Kante mindestens einmal enthält, also ist die Euler-Tour, die jede Kante genau einmal enthält, auf jeden Fall minimal bezüglich der Kantengewichte. 2.2 Lösung für Bäume Mit Induktion lässt sich schnell zeigen, dass in Bäumen jede Kante genau zwei mal in dem gesuchten Zyklus vorkommt. 2.3 Generelle Lösung (nach [8]) Zunächst betrachten wir die theoretische Lösung des Briefträgerproblems. Dann stellen wir einen konkreten Algorithmus vor, mit dem diese Lösung erzielt werden kann und beweisen dessen Korrektheit. 2 2.3.1 Theoretische Lösung Sei X die Menge der Knoten aus G mit ungeradem Grad. Wir fügen eine neue Menge von Kanten E 0 zu dem Graphen hinzu, so dass folgende drei Bedingungen erfüllt sind: a) Jede Kante e0 ∈ E 0 ist parallel zu einer Kante e ∈ E. (Das heißt, die Kante e0 verläuft zwischen den gleichen Knoten wie e und w(e0 ) = w(e)) b) In G(V, E 0 ) haben genau die Knoten aus X ungeraden Grad. c) w(E 0 ) ist minimal; Es gilt w(E 0 ) ≤ w(E 00 ) für alle Kantenmengen E 00 , die 1. und 2. erfüllen. Der so konstruierte Graph G(V, E ∪ E 0 ) ist ein eulerscher Multigraph (d.h. ein eulerscher Graph, in dem Mehrfachkanten erlaubt sind). Jeder Euler-Tour dieses Graphen hat die minimale Länge w(E)+w(E 0 ). Wenn man sich vor Augen führt, dass das Konstruieren eines solchen eulerschen Multigraphen äquivalent zur Frage ist, welche Kanten (Straßen) mehrfach durchlaufen werden müssen, ist klar, dass sich jede Lösung des Problems so darstellen lässt. 2.3.2 Algorithmus Wir stellen jetzt den Algorithmus für die Lösung vor. Sei G(V, E) ein zusammenhängender Graph mit Gewichtsfunktion w : E → R≥0 . Sei weiters dG : V × V → R≥0 die Funktion, die jedes 2-Tupel von Knoten auf die Länge des kürzesten Pfades in G zwischen den Knoten abbildet. 1. Bestimme X := {v ∈ V : deg(v) ungerade}. 2. Bestimme dG (x, y) ∀x, y ∈ V . 3. Sei H der vollständige Graph über X. Bestimme ein perfektes Matching M in H mit minimalem Gewicht bezüglich dG . 4. Bestimme für alle (x, y) ∈ M einen kürzesten Weg Wxy zwischen x und y in G. Füge dann für jede Kante in Wxy eine neue Kante mit selbem Gewicht zu G hinzu. Sei G0 der so definierte Multigraph. 5. Bestimme eine Euler-Tour C 0 in G0 . Ersetze jede Kante aus C 0 , die nicht in G enthalten ist, durch die dazugehörige parallele Kante in G mit selbem Gewicht. Sei C die so konstruierte Euler-Tour in G. Genauere Erklärungen der Teilschritte folgen im nächsten Abschnitt, zunächst zeigen wir die Korrektheit des Algorithmus. 2.3.3 Korrektheit des Algorithmus In Schritt 4. wird für jedes Matching M von H (der vollständige Graph über X mit Gewichtsfunktion dG ) eine Knotenmenge E 0 zu G hinzugefügt, so dass die Bedingungen a) und b) aus der theoretischen Lösung erfüllt sind. Der so entstehende Zyklus hat die Länge w(E) + dG (M ); deshalb ist es klar, 3 dass das Matching M aus Schritt 3. minimal sein soll. Um zu zeigen, dass die Minimalitätsbedingung c) aus der Theoretischen Lösung erfüllt ist, muss allerdings noch gezeigt werden, dass sich keine andere Kantenmenge E 0 finden lässt, mit der sich ein noch kleinerer Zyklus konstruieren lässt. Dafür brauchen wir das folgende Lemma und den folgenden Satz (bewiesen von D. Jungnickel in [1]): Lemma 1. Sei G(V, E) ein zusammenhängender Graph mit Gewichtsfunktion w : E → R≥0 . Sei X ⊆ V mit |X| gerade und H der vollständige Graph über X. Die Kanten von H haben die Gewichte dG (x, y). Für jedes minimale, perfekte Matching M von H und für jedes E0 mit d(V,E) (a, b) = d(V,E0 ) (a, b) (∀a, b ∈ X :) gilt: dG (M ) ≤ w(E0 ) Beweis. Sei M = {x1 y1 , . . . , x2 y2 } ein minimales perfektes Matching von H. Dann ist dG (M ) = dG (x1 , y1 )+· · ·+dG (xn , yn ). Sei weiters Pi ein kürzester Pfad von xi zu yi in (V, E0 ). Dann gilt aufgrund unserer Forderung an E0 : w(Pi ) = dG (x, y). Wir wollen nun zeigen, dass keine Kante e in mehr als einem der Pfade Pi enthalten sein kann. Daraus folgt dann die Aussage unseres Lemmas. Annahme: Es existiert eine Kante e, die in zwei Pfaden (P1 und P2 ) enthalten ist. P1 und P2 haben dann folgende Form: P1 = (x1 , P10 , u, e, v, P100 , y1 ) P2 = (x2 , P20 , u, e, v, P200 , y2 ) Es folgt: dG (x1 , y1 ) + dG (x2 , y2 ) = dG (x1 , u) + w(e) + dG (v, y1 ) + dG (x2 , u) + w(e) + dG (v, y2 ) > dG (x1 , u) + dG (x2 , u) + dG (v, y1 ) + dG (v, y2 ) ≥ dG (x1 , x2 ) + d(y1 , y2 ) Das ist aber ein Widerspruch zu der Annahme, dass unser Matching M minimal ist, denn würde man in M {x1 y1 , y2 y2 } durch {x1 x2 , y1 y2 } ersetzen, erhielte man ein Matching von kleinerem Gewicht. Satz. Der Algorithmus zum Lösen des Briefträgerproblems ist korrekt. Beweis. Sei M ein minimales perfektes Matching von (H, dG ), wobei H der vollständige Graph über der Menge von Knoten auf G mit ungeradem Grad ist. Dann liefert unser Algorithmus einen Zyklus der Länge w(E) + dG (M ). Sei E 0 eine Menge von Kanten, die die Bedingungen a), b) und c) unserer theoretischen Lösung erfüllt. Der so konstruierbare Zyklus hat dann die Länge w(E) + w(E 0 ). Wir müssen zeigen, dass w(E 0 ) ≥ dG (M ) gilt. Sei Z eine Zusammenhangskomponente von (V, E 0 ) mit mindestens zwei Knoten und X wie üblich die Menge der Knoten aus G mit ungeradem Grad. Der Schnitt Z ∩ X kann dann nicht leer sein, denn sonst könnten wir alle Kanten aus E 0 , die in Z enthalten sind einfach weglassen, und erhielten so eine kleinere 4 Kantenmenge, die immer noch a) und b) erfüllt. Da X die Menge von Knoten von (V, E 0 ) mit ungeradem Grad ist, ist X ∩ Z ebenfalls eine Menge von Knoten mit ungeradem Grad. Nach dem Handschlagslemma ist also |Z ∩ X| gerade. Das bedeutet, dass die Zusammenhangskomponenten (Z1 , . . . , Zk ) von (V, E 0 ) eine Zerlegung (X1 , . . . , Xk ) von X induzieren, so dass für alle i ∈ {1, . . . , k} gilt: |Xi | ist gerade und zwei beliebige Knoten von Xi sind immer durch einen Pfad in (V, E 0 ) verbunden. Seien x, y ∈ Xi und sei Pxy der Pfad von x bis y in E 0 . Dann ist Pxy trivialerweise ein kürzester Pfad zwischen x in y in (V, E 0 ). Pxy ist aber auch ein kürzester Pfad zwischen x in y in G; Angenommen, es gäbe einen kürzeren Pfad P xy 0 zwischen den zwei Knoten. Dann würde eine Kantenmenge E 00 , in der alle Kanten aus P xy durch die Kanten aus P xy 0 ersetzt wurden immer noch a) und b) erfüllen und wäre von kleinerem Gewicht. Sei Ei0 die Menge von Kanten aus E 0 , so dass beide Endknoten der Kanten in Zi (Zusammenhangskomponente, die Xi induziert) enthalten sind. Sei Hi nun der vollständige Graph über Zi mit Gewichtsfunktion d(Zi ,Ei0 ) (x, y) und sei Mi ein minimales perfektes Matching von Hi . Nach unserem Lemma gilt d(Zi ,Ei0 ) (Mi ) ≤ w(Ei0 ). Die Vereinigung aller Matchings M1 ∪ M2 ∪ · · · ∪ Mk ist ein perfektes Matching von H und E 0 = E10 ∪ E20 ∪ · · · ∪ Ek0 . Daraus folgt: w(E 0 ) = w(E10 ) + · · · + w(Ek0 ) ≥ dG (M1 ) + · · · + dG (Mk ) ≥ dG (M ) 3 3.1 Verwendete Algorithmen Kürzeste Pfade: Algorithmus von Floyd-Warshall Der Algorithmus von Floyd-Warshall bestimmt die Länge eines kürzesten Pfades zwischen allen zwei Knoten x, y eines Graphen mit positiven Kantengewichten wij (Wenn ij keine Kante des Graphen ist, setze wij = ∞). Sei V = {1, ..., n}. 5 Algorithm 1 Floyd-Warshall for i = 1 to n do for j = 1 to n do if i 6= j then d(i, j) ← wij else d(i, j) ← ∞ end if end for end for for k = 1 to n do for i = 1 to n do for j = 1 to n do if d(i, k) + d(j, k) < d(i, j) then d(i, j) ← d(i, k) + d(j, k)) end if end for end for end for Der Algorithmus kann so modifiziert werden, dass er neben der Längen der kürzesten Pfade ebenfalls die Pfade selbst liefert. Man muss sich dazu lediglich für alle Knotenpaare x, y den Knoten mit höchstem Index merken, den man durchlaufen muss, wenn man von x über einen kürzesten Pfad y erreichen möchte. Diesen Knoten nennen wir Bxy . Der Algorithmus sieht dann so aus (Die Initialsierungsschleife wird hier nicht wieder angeführt): for k = 1 to n do for i = 1 to n do for j = 1 to n do if d(i, k) + d(j, k) < d(i, j) then d(i, j) ← d(i, k) + d(j, k)) Bij ← k end if end for end for end for Um dann den Pfad Pij zu konstruieren, benutzt man folgendes rekursive Verfahren: 6 Verfahren 2 getPath(i,j) if d(i, j) = ∞ then return “kein Pfad zwischen i und j.“ end if B ← Bij if B = null then return “ “ /* {i, j} ist eine Kante. else return GetPath(i, B) + B + GetPath(B, j) end if 3.2 Minimales perfektes Matching: Edmonds Matching Algorithmus Edmonds’ Algorithmus liefert ein minimales perfektes Matching für vollständige Graphen mit gerader Knotenzahl. Da der Algorithmus fortgeschrittene Kenntnisse aus der Optimierung benötigt, sei hier nur auf [8] verwiesen. 3.3 Euler-Tour: Algorithmus von Hierholzer Mit dem Algorithmus von Hierholzer lässt sich eine Euler-Tour in einem eulerschen Graphen G(V, E) bestimmen. Der Algorithmus benutzt die Tatsache, dass sich eulersche Graphen in paarweise Kantendisjunkte Zyklen zerlegen lassen. Algorithm 3 Hierholzer 1. Konstruiere ausgehend von einem beliebigen Knoten v einen Kreis K in G, der jede Kante höchstens einmal enthält. 2. Wenn K ein Euler-Kreis breche ab, sonst: 3. Vernachlässige alle Kanten aus K. 4. Suche in in den Knoten aus K einen Knoten, dessen Grad größer als 0 ist. Starte von diesem Knoten aus einen neuen Kreis K 0 , der keine Knoten aus K enthält und jede Kante aus G höchstens einmal enthält. 5. Füge den Kreis K 0 in den Kreis K ein: Ersetze den Startpunkt von K 0 in K durch alle Punkte von K 0 (in korrekter Reihenfolge). Nenne den so konstruierten Kreis wieder K und gehe zu Schritt 2. 4 4.1 Beispiele Beispiel 1 Wir betrachten den Graphen G aus Abbildung 1. Die Knoten aus G mit ungeradem Grad sind {a, b, c, d, h, i}. Sei H der vollständige Graph über diesen Knoten mit Gewichtsfunktion dG . Wir suchen jetzt ein minimales perfektes Matching von H. Man sieht schnell, dass unser gesuchtes Matching jenes aus Abbildung 2 ist. 7 Abbildung 1: Ungerichteter Graph mit positiven Kantengewichten Abbildung 2: M = {ab, cd, hi} Für jedes xy ∈ M fügen wir jetzt für jede Kante aus dem kürzesten Pfad Pxy (In unserem Fall ist das genau eine Kante) eine parallele Kante zu G hinzu und erhalten so den Graphen G0 in Abbildung 3. Abbildung 3: Eulerscher Multigraph G0 In diesem Multi-Graphen G0 suchen wir jetzt eine Euler-Tour C 0 und ersetzen darin jede Kante aus C 0 , die nicht in G ist, durch die dazugehörige parallele Kante in G. So erhalten wir den gewünschten Euler-Zyklus. 8 Informell kann man auch sagen, die Mehrfachkanten geben an, welche Straßen der Briefträger zwei mal durchlaufen muss. 4.2 Beispiel 2 Wir betrachten den Graphen G aus Abbildung 4. Abbildung 4: Ungerichteter Graph mit positiven Kantengewichten Die Knoten aus G mit ungeradem Grad sind {a, c, e, g}. Sei H wieder der vollständige Graph über diesen Knoten mit Gewichtsfunktion dG . Das Matching M in Abbildung 5 ist ein minimales perfektes Matching von H. Abbildung 5: M = {ag, ce} Für jedes xy ∈ M fügen wir jetzt für jede Kante aus dem kürzesten Pfad Pxy die entsprechende parallele Kante zu G hinzu und erhalten so den Multigraphen G0 in Abbildung 6. 9 Abbildung 6: Eulerscher Multigraph G0 Aus G0 können wir wie im vorherigen Beispiel den gesuchten Zyklus konstruieren. Literatur [1] Dieter Jungnickel: Graphs, Networks and Algorithms, Springer 2003 [2] http://de.wikipedia.org/wiki/Briefträgerproblem [3] http://en.wikipedia.org/wiki/Floyd-Warshall algorithm [4] http://en.wikipedia.org/wiki/Eulerian path [5] http://web.mit.edu/urban or book/www/book/chapter6/6.4.4.html [6] http://de.wikipedia.org/wiki/Algorithmus von Hierholzer [7] http://de.wikipedia.org/wiki/Eulerkreisproblem [8] B. Korte und J. Vygen: Kombinatorische Optimierung: Theorie und Algorithmen, Springer 2008 10