Das Briefträgerproblem

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