Inhalt Inhalt

Werbung
Inhalt
1
Elementare Algorithmen
2
Algorithmen für Graphen
Einführung
Tiefen- und Breitensuche
Minimal Spannende Bäume
Kürzeste Wege
Matchings
3
Mathematische Algorithmen
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen
75
Algorithmen für Graphen / Einführung
76
Inhalt
1
Elementare Algorithmen
2
Algorithmen für Graphen
Einführung
Tiefen- und Breitensuche
Minimal Spannende Bäume
Kürzeste Wege
Matchings
3
Mathematische Algorithmen
Theoretische Informatik 3 (SS 2007)
Notation – ungerichtete Graphen
G = (V , E): endlicher, ungerichteter Graph, ohne Schlaufen/Schlingen, wobei:
V - eine endliche Menge von Knoten/Ecken ist und
E - die Menge der Kanten ist. Hierbei gilt:
` ´
E ⊆ V2 := {u, v } ⊆ V | u 6= v .
NG (v ): Nachbarn von v definiert durch: NG (v ) := N(v ) := {u ∈ V | {u, v } ∈ E}.
degG (v ): Grad von v definiert durch degG (v ) := deg(v ) := |N(v )|.
δ(G): Minimalgrad δ(G) := minv ∈V deg(v )
∆(G): Maximalgrad ∆(G) := maxv ∈V deg(v )
α(G): U ⊆ V ist eine stabile Menge, wenn
` ´ es keine Kante von G mit beiden
Endpunkten in U gibt, d.h. E ∩ U2 = ∅. Die Stabilitätszahl
α(G) := max{|U| | U ist stabile Menge inG}.
ω(G): U ⊆ V spannt eine Clique K|U| , wenn jede Kante mit beiden Endpunkten in U in
` ´ ` ´
E ist, d.h. E ∩ U2 = U2 . Die Cliquenzahl ω(G) := max{|U| | U ist Clique in G}.
χ(G): f : V → N ist eine Färbung von G, wenn f (u) 6= f (v ) für alle {u, v } ∈ E. G ist
k -färbbar, falls eine Färbung f : V → [k ] existiert. Die chromatische Zahl
χ(G) = min{k ∈ N | G ist k-färbbar}. Ein Graph ist bipartit, wenn χ(G) ≤ 2.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Einführung
77
Notation – ungerichtete Graphen – Teil 2
Subgraph: Ein Graph H = (V 0 , E 0 ) heißt Sub-/Teil-/Untergraph von G = (V , E), falls
` 0´
V 0 ⊆ V und E 0 ⊆ E. H ist ein induzierter Subgraph, falls E 0 = E ∩ V2 , hierfür
` 0´
schreiben wir auch H = G[V 0 ] := (V 0 , E ∩ V2 ).
Weg: Folge von (nicht notwendig verschiedenen) Knoten v0 , . . . , v` , so dass
{vi , vi+1 } ∈ E für 0 ≤ i < `. Die Länge des Weges ist die Anzahl der Kanten,
also `. Ein Weg v0 , . . . , v` heißt auch v0 -v` -Weg.
Pfad: Weg bei dem alle Knoten paarweise verschieden sind.
Ein Graph
`V ´G = (V , E) heißt zusammenhängend, falls es für alle Paare
{u, v } ∈ 2 einen u-v -Pfad gibt.
Zykel: ist ein u-v -Weg mit u = v .
Kreis: ist ein Zykel v0 , v1 . . . , v`−1 , v0 für den v0 , v1 . . . , v`−1 paarweise verschieden
sind. Ein Graph G = (V , E) heißt kreisfrei oder Wald, falls er keinen Kreis
enthält.
Baum: ist ein zusammenhängender Wald.
spezielle Graphen:
Kn : Clique mit/vollständiger Graph auf n ∈ N Knoten.
_
Ka,b : vollständiger bipartiter Graph (A∪B,
E), wobei |A| = a, |B| = b und
E = {{u, v } | u ∈ A, v ∈ B}.
Pn : Pfad der Länge n, also hat Pn genau n Kanten und n + 1 Knoten.
Cn : Kreis der Länge n, also hat Cn genau n Kanten und n Knoten.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Einführung
78
Warm-up
Lemma 13.
In einem ungerichteten Graphen G = (V , E) ist die Anzahl der Knoten mit ungeradem Grad
gerade.
P
Beweis: Die Summe aller Knotengrade ist v ∈V deg(v ) = 2|E| gerade. Somit ist die Summe der
Knotengrade der Knoten mit ungeradem Grad gerade und die Aussage folgt.
Lemma 14.
In einem ungerichteten Graphen G = (V , E) gilt χ(G) ≥ |V |/α(G).
Beweis: Sei
χ(G) und f : V → [k] eine k -Färbung. Für j ∈ [k ] ist f −1 (j) eine stabile Menge
Pk k :=−1
in G und j=1 |f (j)| = |V |. Also ist α(G) ≥ |V |/k .
Lemma 15.
Jeder ungerichtete Graph G = (V , E) mit δ(G) ≥ 2 enthält einen Kreis der Länge mindestens
δ(G) + 1.
Beweis: Sei P = v0 . . . v` ein längster Pfad in G. D.h. N(v0 ) liegt vollständig auf dem P, da sonst
P verlängert werden könnte. Sei j der größte Index, so dass {v0 , vj } ∈ E. Da alle Nachbarn von v0
auf P liegen, muss j ≥ deg(v0 ) ≥ δ(G) ≥ 2. Somit ist v0 . . . vj ein Kreis der Länge j + 1.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Einführung
79
Notation – gerichtete Graphen
D = (V , A): endlicher, gerichteter Graph oder Digraph, wobei:
V - eine endliche Menge von Knoten/Ecken ist und
A - die Menge der gerichteten Kanten ist. Hierbei gilt:
E ⊆ V × V := (u, v ) | u, v ∈ V ,
wobei Schlingen, d.h. Kanten vom Typ (u, u), erlaubt sind.
ND+ (v ):
deg+
D (v ):
ND− (v ):
deg−
D (v ):
Nachfolger von v definiert durch: ND+ (v ) := N + (v ) := {u ∈ V | (v , u) ∈ A}.
+
+
Ausgangsgrad von v definiert durch deg+
D (v ) := deg (v ) := |N (v )|.
Vorgänger von v definiert durch: ND− (v ) := N − (v ) := {u ∈ V | (u, v ) ∈ A}.
−
−
Eingangsgrad von v definiert durch deg−
D (v ) := deg (v ) := |N (v )|.
Weg: Folge von (nicht notwendig verschiedenen) Knoten v0 , . . . , v` , so dass
(vi , vi+1 ) ∈ A für 0 ≤ i < `. Gerichtete Pfade, Zykel und Kreise werden analog
zum ungerichteten Fall definiert.
Zusammenhang:
D = (V , `A)´ist schwach zusammenhängend, wenn es für jedes Paar
{u, v } ∈ V2 wenigstens einen gerichteten Pfad (in eine Richtung) zwischen
u und v gibt.
D = (V , `A)´ist stark zusammenhängend, wenn es für jedes Paar
{u, v } ∈ V2 sowohl einen gerichteten u-v -Pfad, als auch einen gerichteten
v -u-Pfad gibt.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Einführung
80
Weitere Spielarten
gewichtete Graphen: Zusätzlich zum Graphen bzw. Digraphen gibt es eine
Gewichtsfunktion w von den Kanten in die reelen Zahlen.
Simulation von Straßennetzwerken: Die Knoten sind Kreuzungen,
die Kanten sind Straßen und die Gewichtsfunktion stellt
Reisekosten oder Reisedauer dar.
Netzwerke: Gewichteter Digraph mit zwei ausgezeichneten Knoten s und t.
Simulation von Flüssen: Die Kanten sind Rohrleitungen mit
Kapazitäten die durch w gegeben sind. Ziel ist es möglichst viel
von s nach t zu pumpen.
Multigraphen: Graphen in denen Mehrfachkanten erlaubt sind. D.h. die Kantenmenge
ist eine Multimenge.
Hypergraphen: Graphen“ in denen eine (Hyper)Kante aus mehr als 2 Knoten
”
bestehen kann. Z.B. in einem k-uniformen Hypergraphen besteht jede
Kante aus genau k Knoten. 2-uniforme Hypergraphen sind dann wieder
einfache Graphen.
...
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Einführung
81
Datenstrukturen für Graphen
Adjazenzmatrix für G = (V , E) bzw. D = (V , A)
Knoten werden von 1 bis |V | =: n durchnummeriert
Die n × n-Matrix A mit Einträgen:
1, {vi , vj } ∈ E
aij =
0, sonst
bzw.
1, (vi , vj ) ∈ A
aij =
0, sonst.
ist die Adjazenzmatrix.
Für ungerichtete Graphen ist die Adjazenzmatrix symmetrisch mit aii = 0 für i ∈ [n].
Adjazenzlisten für G = (V , E) bzw. D = (V , A)
Für jeden Knoten wird eine Liste mit seinen Nachbarn verwaltet. Im gerichteten Fall,
verwaltet man entweder nur die Liste der Nachfolger oder zusätzlich eine weitere für die
Vorgänger.
Falls die Anzahl der Knoten gleichbleibt organisiert man die Adjazenzlisten in einem Feld,
d.h. die Feldelemente sind die Adjazenzlisten. Falls die Anzahl der Knoten sich dynamisch
ändert, so werden die Adjazenzlisten typischerweise in einer Liste verwaltet.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Einführung
82
Datenstrukturen für Graphen – Aufwand
Adjazenzmatrix
Adjazenzlisten (einfach)
Adjazenzlisten
O(|V | )
O(|V |)
O(|V |)
O(1)
O(1)
O(1)
O(|V | + |E|)
O(1)
O(|V |2 )
O(1)
O(|V |)
O(|V |)
O(|V | + |E|)
O(1)
O(|V |)
O(1)
O(1)
O(|V |)
Speicherbedarf
Knoten einfügen
Knoten entfernen
Kante einfügen
Kante entfernen
Test auf Kante
2
Bemerkung.
Die Verbesserung beim Löschen in der Adjazenzlistendarstellung erhält man, indem
man für jede Kante mit jeweils einem Zeiger auf die Position in der Adjazenzliste ihre
jeweiligen Endknoten mitabspeichert.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Einführung
83
Algorithmen für Graphen / Tiefen- und Breitensuche
84
Inhalt
1
Elementare Algorithmen
2
Algorithmen für Graphen
Einführung
Tiefen- und Breitensuche
Minimal Spannende Bäume
Kürzeste Wege
Matchings
3
Mathematische Algorithmen
Theoretische Informatik 3 (SS 2007)
Tiefensuche (depth-first-search)
DFS(G = (V , E))
1
Für alle Knoten v ∈ V :
DFS-visit(G = (V , E), v )
1
Setze visited(v ) := true.
Für alle Knoten u ∈ N(v )
2
Setze visited(v ) := false.
2
3
Setze π(v ) := nil.
3
4
Für alle Knoten v ∈ V :
5
Falls visited(v ) = false:
6
DFS-Visit(G, v ).
Falls visited(u) = false:
4
Setze π(u) := v .
5
DFS-Visit(G, u).
Bemerkung.
In π(v ) wird immer der Knoten abgelegt, über den v bei der Tiefensuche zum
erstenmal erreicht wurde.
Tiefensuchwald
Der Algorithmus DFS lässt sich auch auf gerichteten Graphen implementieren, in
dem N(v ) durch N + (v ) ersetzt wird.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Tiefen- und Breitensuche
85
Tiefensuche
Satz 16.
Der Algorithmus DFS durchläuft alle Knoten und Kanten eines ungerichteten Graphen
und hat eine Laufzeit von O(|V | + |E|), wenn G mit Adjazenzlisten gegeben ist.
Beweis: Offensichtlich wird das Feld visited für jeden Knoten u genau einmal auf
true gesetzt, und zwar genau dann, wenn der Knoten u besucht“ wird. Außerdem
”
werden in Zeile 2 der Prozedur DFS-visit alle zu u inzidenten Kanten betrachtet.
Wir bestimmen nun die Laufzeit des Algorithmus DFS. Die Prozedur DFS-visit wird
nur für unbesuchte Knoten aufgerufen und der unbesuchte Knoten wird sofort als
besucht markiert.Somit wird DFS-visit für jeden Knoten genau einmal aufgerufen.
Innerhalb von DFS-visit wird die for-Schleife für die deg(v ) Nachbarn des aktuellen
P
Knotens v durchlaufen. Insgesamt sind das v ∈V deg(v ) = 2|E| Durchläufe. Die
Gesamtlaufzeit des Algorithmus DFS beträgt somit O(|V | + |E|).
Bemerkung.
Die Anzahl der Zusammenhangskomponenenten eines ungerichteten Graphen kann
einfach mit DFS bestimmt werden. In der Tat gilt: Die Anzahl der
Zusammenhangskomponenten von G ist die Anzahl der Knoten v mit π(v ) = nil nach
dem Aufruf von DFS.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Tiefen- und Breitensuche
86
Tiefensuchbaum/-wald
Definition 17.
Sei G = (V , E) ein Graph und H = (U, F ) ein Untergraph.
H heißt spannend, falls U = V .
H ist ein Spannbaum (bzw. spannender Baum) von G, falls H ein Baum ist und U = V .
Sei G = (V , E) und π das Feld nach dem Ausführen von DFS(G). Dann definieren wir den
entsprechenden spannenden Vorgängerteilgraph Tπ = (V , Eπ ) von G durch:
Eπ := {v , π(v )} | v ∈ V und π(v ) 6= nil .
Beachte: G kann verschiedene Vorgängergraphen haben. Der Vorgängergraph hängt von der
Reihenfolge ab, in der die Knoten in Schritt 4 von DFS und Schritt 2 von DFS-visit betrachtet
werden.
Lemma 18.
Für jeden Graphen G ist der Vorgängerteilgraph Tπ einer Tiefensuche ein spannender Wald.
Darüberhinaus ist Tπ ein Spannbaum von G, falls G zusammenhängend ist.
Beweis: Es seien die Knoten des Graphen gemäß ihrer Reihenfolge, in der sie besucht werden nummeriert.
Dann gilt, falls π(u) 6= nil, dann ist die Nummer von π(u) kleiner der Nummer von u, da π(u) bereits besucht
wurde. Somit ist Tπ kreisfrei.
Falls G zusammenhängend ist, dann ist nur π(v ) = nil für den ersten Knoten v , für den DFS-visit in Zeile
6 von DFS aufgerufen wird. D.h. |Eπ | = |V | − 1 und, da Tπ kreisfrei ist, ist Tπ ein Baum (siehe Übung).
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Tiefen- und Breitensuche
87
Querkanten?
Definition 19.
Sei T = (V , F ) ein Baum mit Wurzel w. Für zwei Knoten u und v ∈ V sagen wir, u ist
ein Vorgänger von v bzw. v ist ein Nachfolger von u, falls der Knoten u auf dem
eindeutigen w-v -Pfad liegt.
Satz 20.
Sei G = (V , E) ein zusammenhängender Graph und Tπ = (V , Eπ ) ein
Tiefensuchbaum von G und {x, y} ∈ E. Dann gilt: x ist ein Vorgänger von y (bzw.
umgekehrt) in T .
Der Satz bedeutet, dass es keine Kanten in G zwischen disjunkten Teilbäumen von T
geben kann (so genannte Querkanten).
Beweis: Es seien die Knoten des Graphen gemäß ihrer Reihenfolge, in der sie
besucht werden nummeriert. Sei {x, y} eine Kante in G. O.B.d.A. wurde x vor y
besucht. Dann muss y entdeckt“ und besucht werden, bevor x abgearbeitet“ ist, da y
”
”
ein Nachbar von x ist, der nicht vor x besucht wurde. Dies bedeutet, entweder wird y
direkt von x aus besucht und {x, y} ist eine Baumkante, oder y wird von einem
Nachfolger von x aus besucht und ist somit auch ein Nachfolger von x.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Tiefen- und Breitensuche
88
Breitensuche (breadth-first-search)
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Tiefen- und Breitensuche
89
Breitensuche
Eine weitere Art, einen Graphen zu durchlaufen, ist die Breitensuche (BFS). Ähnlich
wie mit der Tiefensuche kann man so
die Zusammenhangskomponenten eines gegebenen Graphen;
einen spannenden Baum in zusammenhängenden Graphen berechnen.
Darüberhinaus kann man mit der Breitensuche effizient
die kürzesten Wege von einem Startknoten s zu allen anderen Knoten v ∈ V
berechnen.
Der kürzeste Abstand dist(s, v ) des Knotens v vom Startknoten s in einem
ungewichteten Graphen G = (V , E) ist die minimale Anzahl von Kanten über alle
s-v -Pfade in G. Wenn es keinen s-v -Pfad gibt, dann sei dist(s, v ) = ∞. Ein Pfad der
Länge dist(s, v ) wird als kürzester Pfad bezeichnet.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Tiefen- und Breitensuche
90
BFS
A LGORITHMUS: BFS(G, s)
Eingabe:
Gesucht:
1
Ein Graph G = (V , E) und ein Startknoten s ∈ V
dist(s, v ) und π(v ) für alle v ∈ V .
Für alle v ∈ V :
Setze dist(s, v ) := ∞ und π(v ) := nil.
2
3
Setze dist(s, s) := 0.
4
Initialisiere Warteschlange Q und füge s in Q ein.
5
Solange Q nicht leer ist:
6
Entnehme ein Element v aus Q.
7
Für alle u ∈ NG (v ):
Falls dist(s, u) = ∞:
8
9
Setze π(u) := v .
10
Setze dist(s, u) := dist(s, v ) + 1.
11
Füge u in Q ein.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Tiefen- und Breitensuche
91
Analyse der Breitensuche
Satz 21.
Für einen Graphen G = (V , E) läuft BFS in Zeit O(|V | + |E|), wenn G mit Adjazenzlisten gegeben
ist. Ferner gilt:
1
2
dist(s, v ) ist die Länge eines kürzesten s-v -Pfades in G (bzw. ∞, falls kein s-v -Pfad
existiert).
Wenn G zusammenhängend ist, ist der Vorgängergraph Tπ = (V , Eπ )
Eπ := {v , π(v )} | v ∈ V \ {s}
ein Spannbaum von G.
3
Ein kürzester s-v -Weg kann in O(dist(s, v )) aus π konstruiert werden.
Beweis:
Laufzeit: Die Initialisierung in Schritt 1-2 kostet Zeit O(|V |).
Da jeder Knoten nur einmal in Q eingefügt wird (bevor u in Q eingefügt wird, wird in Schritt
10 dist(s, u) auf einen Wert < ∞ gesetzt), kann er auch nur einmal entnommen werden.
D.h. die for-Schleife in 7 betrachtet für jeden Knoten jeden seiner Nachbarn genau einmal
und wird insgesamt höchstens
X
degG (v ) = 2|E|
v ∈V
mal durchlaufen, so dass die Laufzeit der Schritte der while-Schleife 5–11 O(|E|) ist.
Insgesamt erhalten wir O(|V | + |E|).
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Tiefen- und Breitensuche
92
Analyse der Breitensuche – Teil 2
zu 1) Um 1) zu beweisen, bemerken wir, dass nach Konstruktion (Schritt 5) für alle v ∈ V mit
π(v ) 6= nil gilt, dass
dist(s, v ) = dist(s, π(v )) + 1 ≥ 1.
Folgt man daher dem Pfad
v , π(v ), π(π(v )), . . .
(1)
so nimmt in jedem Schritt der dist(s, ·)-Wert“ um 1 ab. Weil s der einzige Knoten mit
”
dist(s, ·)-Wert“ 0 ist, endet der Pfad in s und hat Länge dist(s, v ).
”
Andererseits haben wir zu zeigen, dass es keinen kürzeren s-v -Pfad als (1) gibt. Um dies zu
zeigen, stellen wir fest, dass die dist(s, ·)-Werte“ der Knoten in Q sich zu jedem Zeitpunkt
”
um höchstens eins unterscheiden, wobei die Knoten mit den kleineren dist(s, ·)-Werten“
”
vorn (in Q) stehen. Daraus folgt, dass
∀ {x, y } ∈ E : dist(s, x) ≤ dist(s, y ) + 1.
(2)
Sei nun s = u0 , . . . , uk = v irgendein s-v -Pfad. Dann folgt aus (2), dass
dist(s, v ) = dist(s, uk )
≤ dist(s, uk −1 ) + 1 ≤ dist(s, uk −2 ) + 2 · · · ≤ dist(s, u0 ) + k
= dist(s, s) + k = k ,
weshalb der Pfad (1) der Länge dist(s, v ) ein kürzester s-v -Pfad ist.
zu 2) Die zweite Aussage ist eine unmittelbare Konsequenz aus der Tatsache, dass (1) ein
s-v -Pfad ist.
zu 3) Da der Pfad in (1) ein kürzester s-v -Pfad ist, kann ein kürzester Pfad in O(dist(s, v ))
ausgegeben werden.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Tiefen- und Breitensuche
93
Algorithmen für Graphen / Minimal Spannende Bäume
94
Inhalt
1
Elementare Algorithmen
2
Algorithmen für Graphen
Einführung
Tiefen- und Breitensuche
Minimal Spannende Bäume
Kürzeste Wege
Matchings
3
Mathematische Algorithmen
Theoretische Informatik 3 (SS 2007)
Das Problem des minimalen Spannbaumes
Bis jetzt betrachteten wir nur ungewichtete Graphen und wir haben gesehen, dass man
mittels DFS oder BFS spannende Bäume in einem zusammenhängenden Graphen in
Zeit O(|V | + |E|) berechnen kann. Wir wollen nun Algorithmen kennenlernen, die
minimal spannende Bäume in gewichteten Graphen berechnen können, d.h.
spannende Bäume, deren Gesamtlänge/-gewicht minimal ist.
Problem: minimal spannender Baum
Gegeben:
Gesucht:
zusammenhängender Graph G = (V , E) mit w : E → R
P
spannender Baum T = (V , F ), der w(T ) := e∈F w(e) minimiert
Anwendungen:
Vernetzung von Rechnern,
Design von Schaltkreisen,
Design von preiswerten, zusammenhängenden Graphen“
”
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Minimal Spannende Bäume
95
Algorithmus von Kruskal
` ´
Für einen Graphen G = (V , E) und f ∈ V2 , sei G + f der Graph (V , E ∪ {f }), den wir
erhalten, wenn wir f als Kante zu G hinzufügen, falls es noch keine Kante in G war.
A LGORITHMUS: Kruskal(G, w)
Eingabe:
Gesucht:
1
zusammenhängender Graph G = (V , E) mit Kantengewichten wP
: E →R
Spannbaum T = (V , F ) von G mit minimalem Gewicht w(T ) := e∈F w(e)
Sortiere die Kanten E von G nach aufsteigenden Gewichten:
w(e1 ) ≤ w(e2 ) ≤ · · · ≤ w(em ).
2
Initialisiere T = (V , ∅).
3
Für i = 1 bis m:
4
5
Falls T + ei kreisfrei ist:
Setze T := T + ei .
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Minimal Spannende Bäume
96
Korrektheit von Kruskal
Lemma 22.
Kruskal berechnet einen minimalen Spannbaum von (G, w).
Beweis: Sei T die Ausgabe von Kruskal. Die Konstruktion stellt sicher, dass T
kreisfrei ist. Weil ferner G zusammenhängend ist, trifft dasselbe auf T zu, so dass T
ein spannender Baum ist.
Für einen beliebigen spannenden Baum T 0 von G definieren wir
µ(T 0 ) := min{1 ≤ i ≤ m := |E| | ei liegt in T , aber nicht in T 0 }
(mit der Konvention, dass µ(T ) = ∞). Ferner sei T ∗ ein minimaler Spannbaum von G,
für den der Wert µ(T ∗ ) größtmöglich ist. Falls T = T ∗ , ist T ein minimal spannender
Baum.
Wir nehmen nun für einen Widerspruchsbeweis an, dass T 6= T ∗ . Sei 1 ≤ i ≤ m
minimal mit der Eigenschaft, dass ei zu T , aber nicht zu T ∗ gehört. Dann enthält
T ∗ + ei einen Kreis C, der wiederum eine Kante ej enthält, welche nicht zu T gehört.
Es gilt j > i, weil T ∗ alle Kanten aus der Menge {e1 , . . . , ei−1 } enthält, welche zu T
gehören. Dies impliziert, dass w(ej ) ≥ w(ei ). Daher ist T ∗∗ = T ∗ − ej + ei ebenfalls
ein minimal spannender Baum von G. Aber da µ(T ∗∗ ) > i = µ(T ∗ ), erhalten wir einen
Widerspruch zur Wahl von T ∗ . Dieser zeigt, dass T = T ∗ .
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Minimal Spannende Bäume
97
Laufzeit von Kruskal
Satz 23.
Sei G ein Graph mit n Knoten und m Kanten. Kruskal bestimmt in Zeit
O((m + n) log n) einen minimal spannenden Baum.
Beweis: Dass die Ausgabe von Kruskal ein minimal spannender Baum ist, zeigt das letzte
Lemma. In Bezug auf die Laufzeit bemerken wir, dass n − 1 ≤ m, weil G zusammenhängend ist.
Die Sortieroperation im ersten Schritt kann mit MergeSort in Zeit
O(m log m) ≤ O(m log n2 ) = O(m log n)
ausgeführt werden.
Die Laufzeit der Schritte 3–5 ist ebenfalls O(m + n log n), wenn man den Test auf Kreisfreiheit wie
folgt implementiert: zu jedem Knoten wird ein Eintrag angelegt, der die Nummer seiner
Zusammenhangskomponente in dem aktuellen Wald T enthält; anfangs hat T n Komponenten,
die von 1, . . . , n numeriert sind. Jedesmal, wenn eine Kante e = {u, v } zu T hinzugefügt wird,
werden die Komponenten von u und v vereinigt. Die Komponentennummern werden
entsprechend aktualisiert, indem diejenigen in der kleineren Komponente durch die Nummer der
größeren Komponente ersetzt werden. Auf diese Art ändert sich für jeden Knoten höchstens
log n-mal die Komponentennummer, was auf die gewünschte Laufzeit O(m + n log n) führt.
Somit ist die Gesamtlaufzeit O(m log n + m + n log n) = O((m + n) log n).
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Minimal Spannende Bäume
98
Bemerkungen
1926 wurde der erste Algorithmus für das minimale Spannbaumproblem von
Borůvka vorgestellt. Seine Veröffentlichung war in tschechisch und wurde leider
viele Jahre übersehen.
1956 stellte Kruskal den hier angegebenen Algorithmus vor.
1957 wurde ein weiterer Algorithmus von Prim entwickelt. Allerdings stellte sich
später heraus, dass dieser Algorithmus bereits 1930 von Jarnı́k entdeckt wurde.
Beim Jarnı́k-Prim Algorithmus wird auch in |V | − 1 Schritten jeweils eine
leichteste“ Kante ausgewählt. Im Gegensatz zu Kruskals Algorithmus bilden die
”
bereits ausgewählten Kanten zu jedem Zeitpunkt einen Baum. In jedem Schritt
wird immer die Kante ausgewählt, welche einen Baumknoten mit einem isolierten
Knoten verbindet und dabei minimales Gewicht hat. Mit Hilfe von sogenannten
Fibonacci-Heaps, lässt sich der Jarnı́k-Prim Algorithmus mit einer Laufzeit
O(|E| + |V | log |V |) implementieren.
Der zur Zeit schnellste bekannte Algorithmus ist von Chazelle aus dem Jahre
1997. Die Laufzeit von Chazelles Algorithmus ist O(|E| · β(|V |, |E|)), wobei β die
inverse Ackermann-(Péter)-Funktion ist (siehe Theoretische Informatik 2).
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Minimal Spannende Bäume
99
Algorithmen für Graphen / Kürzeste Wege
100
Inhalt
1
Elementare Algorithmen
2
Algorithmen für Graphen
Einführung
Tiefen- und Breitensuche
Minimal Spannende Bäume
Kürzeste Wege
Matchings
3
Mathematische Algorithmen
Theoretische Informatik 3 (SS 2007)
Kürzeste Wege in Graphen
Ausgangspunkt
Gegeben ein gerichteter Graph mit nichtnegativen Kantengewichten.
Wie lässt sich ein kürzester Pfad zwischen zwei Knoten effizient berechnen,
sofern er existiert? (Länge eines Pfades: Summe seiner Kantengeichte)
ungewichteter Fall: Breitensuche
Motivation
Wegeberechnung in einem Navigationsgerät
Fahrplanauskunft bei der Deutschen Bahn
... und viele weitere Anwendungen
Edsger Wybe Dijkstra (1930–2002, niederländischer Informatiker)
Algorithmus von Dijkstra (1959)
strukturierte Programmierung
speisenden Philosophen
Semaphoren
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Kürzeste Wege
101
Algorithmus von Dijkstra (single-source shortest-path problem)
Dijkstra(G = (V , A), w, s), w : A → Q+ ∪ {0}, s ∈ V
1
Für alle Knoten x ∈ V \ {s}: Setze x.Abstand := ∞; π(s) := nil
2
Setze s.Abstand := 0
3
Setze Q := V
4
Solange Q 6= ∅:
5
Setze x := Knoten in Q, der .Abstand minimiert:
6
Q := Q \ {x}
7
Für alle Knoten y ∈ N + (x) ∩ Q:
8
Falls x.Abstand +w((x, y )) < y .Abstand
9
y .Abstand := x.Abstand +w((x, y )).
10
π(y) := x.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Kürzeste Wege
102
Beweis Korrektheit
Satz 24.
Der Algorithmus Dijkstra berechnet einen kürzesten s-t-Pfad für alle Knoten t ∈ V .
Beweis: Induktion über Anzahl aus Q entfernter Knoten.
Behauptung: Wenn x ∈ V aus Q entfernt wird, gilt x.Abstand = dist(s, x).
IA) gilt für s, da s.Abstand = 0.
IS) x wird aus Q entfernt. Zu Zeigen: dist(s, x) = x.Abstand.
Wegen Zeile 7–8 existiert s-x-Pfad. Also gilt dist(s, x) ≤ x.Abstand.
Betrachte einen kürzesten s-x-Pfad s = v1 , . . . , vk = x.
betrachte beliebigen Index i mit vi ∈
/ Q, vi+1 ∈ Q. Existiert, da s ∈
/ Q, x ∈ Q.
Es gilt vi .Abstand = dist(s, vi )
(IV)
und vi+1 .Abstand ≤ dist(s, vi ) + w((vi , vi+1 )) (Zeile 8).
x wird aus Q entfernt, da er .Abstand minimiert.
x.Abstand ≤ vi+1 .Abstand
k −1
X
≤ dist(s, vi ) + w((vi , vi+1 )) +
w((vλ , vλ+1 )) = dist(s, x)
λ=i+1
|
{z
}
Restpfad hat Gewicht ≥ 0
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Kürzeste Wege
103
Laufzeitanalyse
Laufzeit in Abhängigkeit der Datenstrukturen
EM(n): Laufzeit von Extract-Min bei n Elementen.
DK (n): Laufzeit von Decrease-Key bei n Elementen.
In(n): Laufzeit von Insert bei n Elementen.
O(n) + n · O(In(n)) +
| {z } |
{z
}
1
=
3
n
X
i=1
0
1
B
C
+
@O(EM(n)) + deg (i) · O(DK (n))A
| {z } | {z } | {z }
5−6
7
n · O(In(n)) + n · O(EM(n)) + O(DK (n))
8
n
X
deg + (i)
i=1
=
O(n(In(n) + EM(n)) + m · O(DK (n)))
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Kürzeste Wege
104
weiteres zur Laufzeit
Laufzeit in Abhängigkeit der Datenstrukturen
Listen: O(n2 ) + O(m) = O(n2 )
binäre Heaps: O(n log(n)) + O(m log(n)) = O((n + m) log(n))
Fibonacci-Heaps: O(m + n log(n))
(In(n) = DK (n) = O(1), EM(n) = O(log(n)))
Wann ist welche Datenstruktur geeigneter?
dichte Graphen (m = Θ(n2 )) : Listen sind geeigneter
dünne Graphen (m = O(n)) : binäre Heaps (extremer Zeitgewinn)
Fibonacci-Heaps sind erst bei sehr großen Graphen mit mittlerer Dichte schneller.
Theoretisch optimale Laufzeit für den Algorithmus von Dijkstra: ist der Graph ein Stern
und startet man vom Mittelpunkt, so ergibt sich ein weiteres Sortierverfahren.
Offene Frage
Existiert Algorithmus mit Laufzeit O(n + m)?
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Kürzeste Wege
105
Varianten und Erweiterungen
Bemerkung
Pfade können analog zum Vorgängergraph Tπ (vgl. Breitensuche) konstruiert werden.
kürzester s-t-Pfad
Stoppen, wenn t aus Q entfernt wird
Skizzierung einer möglichen Verbesserung:
1. Suche von beiden Seiten. Benutze dazu zwei Queues Qs und Qt .
2. Halte an, wenn ein Knoten x sowohl aus Qs als auch Qt entfernt wurde.
3. Verbinde die beiden Pfade geeignet:
dist(s, t) = min{dist(s, x) + dist(x, t), min {dist(s, u) + w((u, v )) + dist(v , t)}}
(u,v )∈A
u∈V \Qs
v ∈V \Qt
V
s
Theoretische Informatik 3 (SS 2007)
x
V−Qs
V−Qt
t
Algorithmen für Graphen / Kürzeste Wege
106
Varianten und Erweiterungen II
Praxiseinsatz
Der Algorithmus von Dijkstra wird oft in der Praxis eingesetzt, entweder
wie hier vorgestellt
oder als Verfeinerung (z.B. A∗ -Algorithmus)
negative Kantengewichte
notwendige Voraussetzung für Dijkstra: alle Kanten nichtnegativ
bei negativen Kantengewichten gibt es zwei Fälle
Existieren Kreise mit negativem Gewicht?
ja
nein
NP-vollständig
Bellman-Moore-Algorithmus in O(nm).
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Kürzeste Wege
107
kürzester Pfad zwischen je zwei Knoten (all-pairs shortest-path problem)
Dynamische Programmierung
Herleitung Rekursionsformel
berechne neue optimale Lösung
aus bereits berechneten
optimalen Teillösungen.
Sei V = {1, . . . , n} und ein Pfad
v1 , v2 , . . . , vk gegeben. Die Knoten
v2 , . . . , vk−1 heißen innere Knoten.
di,j (k) : Länge eines kürzesten Pfades
von i nach j, dessen inneren Knoten alle
aus 1, . . . , k stammen. Offensichtlich gilt
di,j (k) ≥ di,j (k + 1).
Ziel: bestimme di,j (n) für alle 1 ≤ i, j ≤ n.
k+1
di,j (k + 1) := min{di,j (k), di,k+1 (k) + dk +1,j (k)}
Knoten mit
Index < k
j
i
Theoretische Informatik 3 (SS 2007)
Beweis: Fallunterscheidung.
Wenn keine Kreise mit negativem Gewicht
existieren, so ist ein kürzester i-j-Weg ein
Pfad!
Algorithmen für Graphen / Kürzeste Wege
108
Algorithmus von Floyd-Warshall
kürzeste Wege zwischen je zwei Knoten
Voraussetzung: jeder Kreis hat nichtnegatives Gewicht
Floyd-Warshall(G = (V , A), w), w : A → R

0 : i=j

1 di,j (0) =
w(vi , vj ) : (vi , vj ) ∈ A

∞ : sonst
2
Für k := 0 bis n − 1:
3
Für i := 1 bis n:
Für j := 1 bis n:
4
di,j (k + 1) := min{di,j (k ), di,k +1 (k ) + dk +1,j (k )}
5
Bemerkung
Laufzeit ist offensichtlich O(n3 )
Speicherplatz läßt sich auf Θ(n2 ) reduzieren, z.B. durch Speichern zweier
n × n-Tabellen:
di,j ((k + 1) mod 2) := min{di,j (k mod 2), di,k+1 (k mod 2) + dk+1,j (k mod 2))}
Nach Ablauf gilt: es gibt ein negatives Diagonalelement gdw. es gibt einen Kreis
negativer Länge.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Kürzeste Wege
109
Rekursion vs. Iteration
Mehrfachberechnung bei Rekursion
Erstellt man einen Rekursionsbaum, so hat jeder Knoten di,j (k) mit k > 0 drei
Nachbarn. Für di,j (n) entsteht dann ein vollständig ternärer Baum der Tiefe n + 1.
Dieser hat mehr als 3n Knoten, wobei die meisten Werte mehrfach berechnet werden.
Ein ähnliches Phänomen ergibt sich bei der rekursiven Berechnung der
Fibonacci-Zahlen.
d(i,j) =: di,j (k+1)
[k+1]
Maximal
innerer
Knoten
[k]
+
d(i,j)
d(i,k+1)
+
[k−1]
d(i,j)
d(i,k)
Theoretische Informatik 3 (SS 2007)
d(k+1,j)
+
d(k,j)
d(i,k+1)
d(i,k)
+
d(k,k+1)
d(k+1,j) d(k+1,k)
Algorithmen für Graphen / Kürzeste Wege
d(k,j)
110
Inhalt
1
Elementare Algorithmen
2
Algorithmen für Graphen
Einführung
Tiefen- und Breitensuche
Minimal Spannende Bäume
Kürzeste Wege
Matchings
3
Mathematische Algorithmen
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Matchings
111
Matchings/Paarungen
Definition 25.
Sei G = (V , E) ein Graph.
M ⊆ E heißt Matching, falls keine zwei Kanten aus M einen Knoten gemeinsam haben.
M heißt maximales Matching, falls M ∪ {e} für alle e ∈ E \ M kein Matching ist.
Ein Matching M heißt größtes Matching, falls |M| ≥ |M 0 | für alle Matchings M 0 von G gilt.
Die Kardinalität eines größten Matchings in G wird mit ν(G) bezeichnet.
Ein Matching M heißt perfekt, falls 2|M| = |V | gilt.
Ein Knoten v ∈ V heißt überdeckt bezüglich eines Matchings M, falls es eine Kante e ∈ M
gibt, mit v ∈ e.
Anwendungen:
Zuordnungsprobleme
Graphenpartitionierung
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Matchings
112
Maximale Matchings
A LGORITHMUS: GreedyMaxMatching(G)
Eingabe:
Gesucht:
Graph G = (V , E)
maximales Matching M ⊆ E
1
Setze M := ∅ und für alle v ∈ V : setze matched(v ) = f.
2
Solange es eine Kante {x, y } ∈ E gibt, so dass matched(x) = f und matched(y ) = f.
3
4
Setze matched(x) := matched(y) := t
Setze M := M ∪ {x, y} .
Beobachtung 26.
Der Algorithmus GreedyMaxMatching(G) findet ein maximales Matching in O(|V | + |E|).
Lemma 27.
Sei M ein maximales Matching in G. Dann gilt: ν(g)/2 ≤ |M| ≤ ν(G).
Beweis: Es sei V (M) ⊆ V die Menge der von M überdeckten Knoten. Dann gilt 2|M| = |V (M)|.
Jede Kante eines größten Matchings M 0 von G muss mindestens einen Knoten aus V (M)
enthalten, da ansonsten M nicht maximal wäre. Somit gilt ν(G) = |M 0 | ≤ |V (M)| = 2|M|.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Matchings
113
Augmentierende Pfade
Definition 28.
Ein Pfad in einem Graphen G = (V , E) heißt M-alternierend bezüglich eines Matchings M, falls er
abwechselnd Kanten aus M und aus E \ M benutzt. Ein x-y -Pfad (x 6= y ) heißt M-augmentierend, falls er
alternierend ist und x und y von M nicht überdeckt werden.
Satz 29 (Berge ’57).
Ein Matching M ist genau dann ein größtes Matching, wenn kein M-augmentierender Pfad existiert.
Beweis:
⇒“ Falls es einen M-augmentierenden Pfad gibt, so ist M offensichtlich nicht ein größtes Matching, denn
”
durch Vertauschen von Matchingkanten und nicht-Matchingkanten entlang des M-augmentierenden
Pfades erhält man ein größeres Matching.
⇐“ Wir nehmen nun an, dass M kein größtes Matching ist. Sei M 0 Matching mit |M 0 | > |M|. Betrachte die
”
symmetrische Differenz M4M 0 . Diese induziert einen Graphen mit Maximalgrad 2 und besteht somit aus
der Vereinigung von geraden Kreisen und Pfaden. Wegen |M 0 | > |M| muss es dann einen
M-augmentierenden Pfad geben.
Bemerkung.
Die meisten Matchingalgorithmen beruhen auf dem Satz von Berge und erweitern ein gegebenes Matching
entlang augmentierende Pfade, bis es keine mehr gibt.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Matchings
114
Ungarische Wälder
Definition 30.
Sei G ein Graph mit Matching M. Ein Baum in G mit einem als Wurzel ausgezeichneten
Knoten heißt alternierend, falls die Wurzel nicht von M überdeckt ist und alle von der
Wurzel zu den Blättern gehenden Pfade alternierend sind und gerade Länge haben.
Ein alternierender Wald ist die disjunkte Vereinigung alternierender Bäume.
Für einen alternierenden Wald F bezeichnen die Mengen even(F ) bzw. odd(F ) alle
Knoten, die geraden bzw. ungeraden Abstand von einer Wurzel haben.
Bemerkung.
Ein alternierender Baum mit Wurzel x enthält alle potenziellen Anfangsstücke von
augmentierenden Pfaden, die in x beginnen.
Wenn eine nicht-Matchingkante die Blätter zweier alternierender Bäume verbindet,
dann erhält man einen augmentierenden Pfad von der einen Wurzel zur anderen.
Falls es keine solche Kante gibt, dann spricht man von einem ungarischem Wald.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Matchings
115
Finden größter Matchings in bipartiten Graphen
A LGORITHMUS: AugmentBipMatching(G, M)
Eingabe:
Gesucht:
bipartiter Graph G = (V , E) und Matching M
augmentierender Pfad, wenn es einen gibt
1
Setze F := von M nicht überdeckte Knoten
2
Setze even(F ) := F und odd(F ) = ∅.
3
Solange es eine Kante {x, y } ∈ E gibt, so dass x ∈ even(F ) und y 6∈ odd(F ).
4
5
Falls y 6∈ even(F ):
// Dann ist y 6∈ F und es gibt {y , z} ∈ M
6
Erweitere F um {x, y } und {y , z}
7
Setze odd(F ) := odd(F ) ∪ {y } und even(F ) := even(F ) ∪ {z}
8
9
Sonst return augm. Pfad von der Wurzel des Baumes von x zur Wurzel von y .
// Beachte die x und y müssen in verschiedenen Bäumen liegen, da beide geraden
// Abstand zur entsprechenden Wurzel haben und G bipartit ist.
10
return F ist ein ungarischer Wald
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Matchings
116
BipMatching(G)
A LGORITHMUS: BipMatching(G)
Eingabe:
Gesucht:
bipartiter Graph G = (V , E)
größtes Matching M
1
Setze M := ∅.
2
Solange AugmentBipMatching(G, M) einen augm. Pfad zurückgibt
Erweitere M entlang des augm. Pfades.
3
Satz 31.
Der Algorithmus BipMatching bestimmt ein größtes Matching in einem bipartiten Graphen G = (V , E) und
hat Laufzeit O(|V ||E|).
Beweis: Zum Nachweis der Korrektheit reicht es offensichtlich zu zeigen, dass M größtes Matching ist, wenn
die Prozedur AugmentBipMatching(G, M) einen ungarischen Wald F zurückliefert.
Ist F ein ungarischer Wald, so sind gemäß der Bedingung in der while-Schleife die Knoten in even(F ) nur mit
Knoten aus odd(F ) adjazent. Jedes Matching lässt somit mindestens | even(F )| − | odd(F )| viele Knoten in G
unüberdeckt. Andererseits enthält jede Komponente des ungarischen Waldes F genau einen von M nicht
überdeckten Knoten. Auf der Menge V \ (even(F ) ∪ odd(F )) bildet M ein perfektes Matching, da alle
ungematchten Knoten in even(F ) liegen und es keine Matchingkante gibt, von der nur ein Endknoten im
ungarischen Wald liegt. Die Anzahl Komponenten des ungarischen Waldes F ist | even(F )| − | odd(F )|, d.h.
also M ist größtes Matching.
Ohne Einschränkung können wir |V | = O(|E|) annehmen. Die Routine AugmentBipMatching(G, M) hat
Laufzeit O(|V | + |E|) und wird maximal |V |/2-mal aufgerufen, womit sich die angegebene Gesamtlaufzeit
ergibt.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Matchings
117
Matchingalgorithmen
Der schnellste Algorithmus für das Finden eines größten Matchings in bipartiten
Graphen ist von Hopcroft und Karp aus dem Jahr 1973 mit einer Laufzeit
O(|V |1/2 |E|).
Für das Matchingproblem auf allgemeinen Graphen hat Edmonds einen
Algorithmus entwickelt. Dieser Algorithmus lässt sich mit einer Laufzeit O(|V |3 )
implementieren.
1980 wurde von Micali und Vazirani ein Algorithmus für das allgemeine
Matchingproblem mit einer Laufzeit O(|V |1/2 |E|) vorgestellt. Eine vollständige
Analyse erschien erst 1994.
1990 hat Blum einen eleganteren Algorithmus mit derselben Laufzeit entwickelt.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Matchings
118
Stabile Matchings
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Matchings
119
Stabile Matchings/stable marriage problem
Problem: stabiles Matching / stabile Ehe
Gegeben:
Gesucht:
disjunkte Mengen X und Y mit |X | = |Y | und Gewichtsfunktionen/Präferenzen
wx : Y → N für x ∈ X und wy : X → N für y ∈ Y
Bijektion f : X → Y , so dass für kein Paar (x, y) ∈ X × Y gleichzeitig gilt:
wx (y) > wx (f (x)) und wy (x) > wy (f −1 (y )).
In anderen Worten:
Gegeben: Ein vollständiger, bipartiter Graph Kn,n mit n = |X | = |Y | zusammen mit
Präferenzlisten für jeden Knoten bezüglich der Knoten auf der anderen Seite.
Gesucht: Ein perfektes stabiles Matching M, d.h. wenn {x1 , y2 } ∈ E(Kn,n ) \ M und
{x1 , y1 }, {x2 , y2 } ∈ M, dann präferiert entweder x1 y1 mehr als y2 oder y2 präferiert
x2 über x1 . D.h. nicht beide x1 und y2 mögen“ sich mehr als ihren jeweiligen
”
Partner in M.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Matchings
120
Propose and Reject
Gale & Shapley ’62
Seien die Knoten in der einen Klasse Männer“ und in der anderen Frauen“.
”
”
1 Solange es einen unverheirateten“ Mann x gibt:
”
2
x macht der Frau y einen Antrag“, die er noch nicht gefragt hat
”
und die am höchsten auf seiner Präferenzliste steht.
3
y nimmt den Antrag an, wenn:
• sie keinen Partner hat,
• oder wenn x höher in ihrer Liste steht, als ihr jetziger Mann,
welchen sie dann für x verlässt.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Matchings
121
Korrektheit des Gale-Shapley-Algorithmus’
Satz 32.
Der Gale-Shapley-Algorithmus findet ein stabiles perfektes Matching und hat Laufzeit
O(|X |2 ).
Beweis:
Perfektheit: Sobald eine Frau einmal verheiratet ist, bleibt sie verheiratet. Somit
kann am Ende kein Mann x und keine Frau y unverheiratet sein, da x
irgendwann y einen Antrag gemacht hätte und y diesen ersteinmal
angenommen hätte.
Stabilität: Seien x und y am Ende des Algorithmus zwar verheiratet, aber nicht
miteinander. Angenommen x würde y seiner jetzigen Frau bevorzugen.
Dann hätte er y einen Antrag gemacht bevor er seiner jetzigen Frau
einen Antrag gemacht hätte. Dann hat y den Antrag von x entweder
abgelehnt, da sie schon mit einem besseren Mann verheiratet ist, oder
sie hat x später für einen besseren Mann verlassen und somit nur noch
Anträge von noch besseren Männern angenommen. D.h. y präferiert
ihren endgültigen Mann über x.
Laufzeit: Jeder Mann macht höchstens |Y | = |X | Anträge und über einen Antrag
wird in O(1) entschieden.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Matchings
122
Aktive Partnersuche zahlt sich aus“
”
Definition 33.
Ein Paar (x, y ) ∈ X × Y heißt realisierbar, falls ein stabiles perfektes Matching M mit {x, y } ∈ M gibt. In dem
Fall sagen wir auch, y ist für x realisierbar.
Satz 34.
Der Gale-Shaply-Algorithmus findet ein Mann-optimales Matching, d.h. jeder Mann x bekommt die Frau y mit
der höchsten Präferenz unter allen realisierbaren Frauen.
Beweis: Angenommen das gefundene Matching ist nicht Mann-optimal. Sei {x1 , y2 } das erste realisierbare
Paar, welches abgelehnt wird. Entweder hat y2 den Antrag von x1 abgelehnt, da sie schon einen besseren
Partner, sagen wir x2 , hatte oder ein besserer Partner x2 hat ihr später einen Antrag gemacht.
Da {x1 , y2 } ein realisierbares Paar sind, gibt es ein perfektes, stabiles Matching M 0 in dem x1 mit y2 verheiratet
ist. Sei y 0 der Partner von x2 in dieser Zuordnung M 0 .
Es kann nicht sein, dass x2 die Frau y 0 mehr als y2 präferiert, da sonst x2 die Frau y 0 vor y2 gefragt hätte, und
diese ihn irgendwann ablehnen/verlassen haben müsste, bevor x2 die Frau y2 fragt. Dies widerspricht der
Annahme, dass {x1 , y2 } das erste realisierbare Paar ist, welches im Verlauf des Algorithmus nicht angenommen
wurde.
Also bevorzugt x2 die Frau y2 über y 0 und y2 bevorzugt x2 über x1 . Somit kann M 0 kein stabiles Matching sein.
Korollar 35.
Falls die Präferenzlisten von jedem Mann eine eindeutige Ordnung unter den Frauen definiert (d.h.
wx (y ) 6= wx (y 0 ) für alle x ∈ X ), dann findet der Gale-Shapley-Algorithmus ein eindeutiges stabiles Matching
unabhängig von der Reihenfolge der Anträge.
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Matchings
123
Bemerkungen
So ähnlich wie man Mann-Optimalität für den Gale-Shapley-Algorithmus zeigt,
kann man zeigen, dass der Algorithmus Frau-pessimal ist, d.h. jede Frau bekommt
den schlechtesten unter allen realisierbaren Partnern.
Der Gale-Shapley-Algorithmus funktioniert auch, wenn es mehr Frauen als
Männer gibt. In diesem Fall werden immer noch alle Männer optimal“ verheiratet
”
und unabhängig von der Reihenfolge der Anträge bleiben bei eindeutigen
Präferenzlisten immer dieselben Frauen unverheiratet.
Falls es mehr Männer als Frauen gibt, dann werden alle Frauen pessimal“
”
verheiratet und unter den Männern gibt es eine Gruppe, die nie verheiratet wird.
Mehr Informationen zum stable marriage problem gibt es in dem gleichnamigen
Buch von Gusfield und Irving (MIT Press, 1989)
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Matchings
124
Graphenalgorithmen: Zusammenfassung
Darstellung von Graphen: Adjazenzmatrix, Adjazenzlisten
Tiefensuche: Besuche rekursiv einen unbesuchten Nachbarn des aktuellen Knotens und gehe nur zurück,
falls dies nicht mehr geht
Laufzeit O(|V | + |E|) in Adjazenzlistendarstellung
keine Querkanten bezüglich des Tiefensuchbaumes
Breitensuche: Besuche alle unbesuchten Nachbarn des aktuellen Knotens und stelle diese“ hinten in der
”
Warteschlange Q an. Fahre dann mit dem nächsten Knoten in Q fort, bis Q = ∅.
Laufzeit O(|V | + |E|) in Adjazenzlistendarstellung
Berechnet die Distanzen (in ungewichteten Graphen) zu dem Startknoten s der Breitensuche
Es gibt keine Kanten {x, y } in G, die ein Level im Breitensuchbaum überspringen.
Minimal spannende Bäume in gewichteten Graphen
Greedy-Algorithmus von Kruskal: Füge die leichteste Kante zu T hinzu, die keinen Kreis schließt.
Laufzeit: O((|E| + |V |) log |V |)
kürzeste Pfade in gewichteten Graphen
Dijkstra: Berechnet alle kürzesten Pfade von einem Startknoten, wenn alle Kantengewichte
nicht-negativ sind, in O(|E| + |V | log |V |) mit Fibonacci-Heaps
Floyd-Warshall: Berechnet kürzeste Pfade zwischen allen Knotenpaaren, wenn es keine Kreise mit
negativem Gewicht gibt. Laufzeit: O(|V |3 ).
Matchings
maximale Matchings findet der Greedy-Algorithmus in O(|V | + |E|)
größte Matchings in bipartiten Graphen: augmentierende Pfade, Ungarische Wälder einfache
Implementation in O(|V ||E|), verbesserte Implementation von Hopcroft und Karp in O(|V |1/2 |E|)
größte Matchings in allgemeinen Graphen: Edmonds mit Laufzeit O(|V |3 ) und Micali und Vazirani
mit Laufzeit O(|V |1/2 |E|).
Stabile Matchings und der Gale-Shapley-Algorithmus
Theoretische Informatik 3 (SS 2007)
Algorithmen für Graphen / Matchings
125
Herunterladen