Lemma 4.5.9. Der Algorithmus von Edmonds

Werbung
Lemma 4.5.9. Der Algorithmus von Edmonds-Karp führt höchstens O(|V ||E|)
Augmentierungen durch.
Beweis. Eine Kante (u, v) heiße kritisch auf augmentierenden Weg p gdw.
cf (u, v)
| {z }
= cf (p).
Restkapazität
Eine kritische Kante verschwindet bei einer Augmentierung aus dem Restnetz.
Nun stellt sich die Frage, wie oft kann eine Kante (u, v) kritisch werden? Die
Kante (u, v) kann in einem späteren Restnetz wieder auftreten, wenn sie irgendwann wieder Restkapazität > 0 erhält, d.h. (v, u) liegt auf einem augmentierenden Weg.
Sei f ein Fluss bei dem (u, v) kritisch war ⇒ δf (s, v) = δf (s, u) + 1.
u
v
s
t
f 0 sei der Fluss, bei dem die Kante (v, u) das nächste Mal wieder auf dem
augmentierenden Weg liegt. Dann gilt
δf 0 (s, u) = δf 0 (s, v) + 1
≥ δf (s, v) + 1 (nach Lemma 2)
= δf (s, u) + 2.
v
u
s
t
Also gilt: zwischen zwei Malen, wo eine Kante (u, v) kritisch ist, erhöht sie ihren
Abstand zu s im Restnetz um mindestens 2. Der Abstand kann überhaupt
höchstens |V | − 2 sein und damit wird jede Kante höchstens |V 2|−2 = O(|V |)
mal kritisch. Also gibt es insgesamt höchstens O(|V ||E|) Augmentierungen.
Es folgt:
Satz 4.5.10. Der Algorithmus von Edmonds/Karp hat eine Laufzeit von O(|V ||E|2 ).
Bemerkung. Sei |V | = n. Der Algorithmus von Edmonds/Karp hat eine Laufzeit von O(n5 ). Diese wurde von Goldberg auf O(|V |2 |E|)[= O(n4 )] verbes|2
sert. Die besten“ bekannten Algorithmen laufen in O(|V ||E| log( |V
|E| )) (Gold”
berg/Tarjan 1986) und in O(|V ||E| + |V |2 log(|V |)) (Mehlhorn, Cheryan und
Hagerup, 1997).
92
4.6
Bipartites Matching
Definition 4.6.1 (Matching 1 ). Sei ein ungerichteter Graph G = (V, E) gegeben. Ein Matching ( Paarung“) ist eine Teilmenge M ⊂ E von unabhängigen“
”
”
Kanten, d.h. keine zwei Kanten haben einen gemeinsamen Endpunkt.
M ist Matching, man kann hier sogar keine weiteren Kanten hinzufügen.
Ein Matching M heißt maximal (engl. maximal matching), wenn keine echte
Obermenge von M ein Matching ist.
Wir wollen aber lieber größte Matchings (engl. maximum matching) betrachten,
d.h. M mit |M | maximal.
M ist immer noch maximales Matching, M ist größtes Matching
Wir suchen im Folgendem nach größten Matchings in bipartiten Graphen.
Definition 4.6.2 (bipartite Graphen). Ein ungerichteter Graph G = (V, E)
˙ 2 gibt, so dass alle Kanten zwiheißt bipartit gdw. es eine Partition V = V1 ∪V
schen einem Knoten in V1 und einem in V2 verlaufen. (Es verlaufen also keine
Kanten innerhalb von V1 und V2 .)
|{z}
V1
|{z}
V2
M ist Matching
1 Eine
mögliche Zweitlektüre zu bipartiten Matchings ist das Kapitel 1.1 in dem Buch Gra”
phentheorie“ von R. Diestel, welches unter http://www.math.uni-hamburg.de/home/diestel/
books/graphentheorie/ online verfügbar ist.
93
Wie findet man nun das größte Matching in bipartiten Graphen G = (V, E)?
Dieses Problem kann auf das maximale Fluss Problem zurück geführt werden:
Aus G konstruieren wir einen neuen Graphen G0 = (V 0 , E 0 ), dabei ist
V 0 = V ∪ {s, t}
und
E 0 = {(s, u)|u ∈ V1 } ∪ {(v, t)|v ∈ V2 } ∪ {(u, v)|u ∈ V1 , v ∈ V2 , {u, v} ∈ E}.
Als Kapazitäten wählen wir c(e) = 1 für alle Kanten e ∈ E 0 .
G0
G
→
|{z}
V1
s
|{z}
V2
t
|{z}
V1
|{z}
V2
Alle Kanten sind von links nach rechts gerichtet.
Wir nehmen also unseren Ursprungsgraphen G und fügen die beiden Knoten s
und t hinzu. Nun geben wir in den Graphen Kanten hinzu, die von s zu jedem
Knoten in V1 und von jedem Knoten aus V2 nach t verlaufen. Alle ursprünglichen
Kanten in G werden gerichtet von V1 nach V2 . Alle Kanten in G0 bekommen die
Kapazität 1.
Um nun das Problem des größten Matchings mit Flüssen zu lösen, benötigen
wir noch folgendes
Lemma 4.6.3. Für k ∈ N gilt: Es gibt ein Matching M in G mit |M | = k
⇔ Es gibt einen ganzzahligen Fluss f in G0 mit |f | = k
Beweis. ⇒:
s
t
Sei M ein Matching mit k Kanten. Wir schicken von s zu jedem Matchingknoten
in V1 den Fluss 1. Von dort verläuft der Fluss weiter über die k Matchingkanten
zu V2 und weiter zu t. Der Wert eines Flusses ergibt sich als die Summe der
ausgehenden Flüsse aus s, also hier k.
94
⇐: Sei f ein ganzzahliger Fluss mit |f | = k. Wähle
M = {(u, v)|u ∈ V1 , v ∈ V2 , f (u, v) > 0 }.
| {z }
also f (u, v) = 1
Da die Kapazität jeder Kante 1 ist, muss für eine Kante in einem ganzzahligen
Fluss mit f (u, v) > 0 gelten f (u, v) = 1. Weiter muss für jedes u ∈ V1 , das in
einer Kante in M vorkommt, f (s, u) = 1 sein.
1
s
1
u
einzige eingehende Kante
Also muss jede andere von u ausgehende Kante Fluss 0 haben. Dies bedeutet,
dass nur eine Kante in M inzident zu u ist. Analog für jedes v ∈ V2 . Also ist M
ein Matching mit k Kanten.
Es gilt allgemein für Flüsse in Netzen:
Satz 4.6.4. Sei G = (V, E) ein gerichteter Graph, mit Kapazität c : E → R.
Dann gilt: Falls die Kapazitätsfunktion nur ganzzahlige Werte hat, so hat der
maximale Fluss f eine ganzzahligen Wert f . Außerdem existiert ein ganzzahliger
maximaler Fluss.
Beispiel
0,5
1
1
0,5
1
1
1
1
0,5
1
1
1
0,5
0
0
In grün - ganzzahliger Fluss, in rot - nicht ganzzhaliger Fluss und in schwarz
sind die Kapazitäten eingezeichnet
Beweis. Übung
Korollar 4.6.5. Die Kardinalität eines größten Matchings in einem bipartiten
Graphen G ist der Wert eines maximalen Flusses in G0 .
Es folgt:
Satz 4.6.6. Ein größtes Matching in einem bipartiten Graphen kann in O(|V ||E|)
Zeit gefunden werden.
Beweis. Man beachte das Korollar und die Laufzeit des Ford-Fulkerson Algorithmus, welche O(|f ∗ ||E|) ist. Für ein Matching M gilt |f ∗ | = |M | ≤ |V2 | und
daher O(|f ∗ ||E|) = O(|V ||E|).
95
Der beste bekannte Algorithmus für bipartitep
Graphen ist von Hopcroft/Karp
aus dem Jahr 1973 mit einer Laufzeit von O( |V ||E|) ≈ O(n2,5 ). Eine Verallgemeinerung auf allgemeine Graphen kam von Micali/Vazirani in 1983 mit der
gleichen Laufzeit.
Die Frage nach einem größten Matching kann man ebenfalls in einem gewichteten Graphen stellen. Hier ist ein Matching gesucht mit größtem Gesamtgewicht,
genannt größtes gewichtetes Matching. Dieses Problem ist in O(|E||V | log(|V |))
Zeit lösbar mit einem Algorithmus von Galil, Micali und Gabow aus dem Jahr
1986.
Ein Anwendungsbeispiel für die Suche nach einem größten gewichteten Matching
ist das Job-Assignment Problem. Dazu betrachten wir den bipartiten Graphen
˙ 2 , E), wobei die Menge V1 eine Gruppe von Personen und V2 eine
G = (V1 ∪V
Menge von Jobs darstellen. Jede Kante von einem Knoten vi ∈ V1 zu einem
Knoten vj ∈ V2 beschreibt die Eignung der Person vi für den Job vj . Nun
ist das Matching mit dem größten Gesamtgewicht gesucht. Dies entspricht einer
Zuordnung der Personen zu den Jobs, so dass insgesamt die Personen am besten
zu den Jobs passen.
96
Herunterladen