Wiederholung zu Flüssen

Werbung
Methoden der Netzwerkanalyse
Universität Konstanz
SS 2008
Fachbereich Informatik & Informationswissenschaft
Prof. Dr. Ulrik Brandes / Melanie Badent
Wiederholung zu Flüssen
Wir untersuchen Flüsse in Netzwerken: Wieviel kann man in einem Netzwerk maximal von
einer Quelle s zu einer Senke t transportieren, wenn die Kapazitäten der einzelnen Verbindungen gegeben sind?
1
Definitionen
Definition (Fluss)
Sei D = (V, E) ein einfacher gerichteter Graph mit Kantenkapazitäten c : E → R+
0 und
ausgezeichneten Knoten s, t ∈ V . Man bezeichnet das Tupel (D; s, t; c) als Netzwerk mit
Quelle s (engl.: source) und Senke t (engl.: target). Eine Abbildung f : E → R+
0 heißt Fluss,
wenn sie die folgenden beiden Eigenschaften hat:
1. Für alle (i, j) ∈ E ist die Kapazitätsbedingung
0 ≤ f (i, j) ≤ c(i, j)
erfüllt.
2. Für alle i ∈ V \ {s, t} ist die Flusserhaltungsbedingung
X
X
f (i, j) −
f (j, i) = 0
{j|(i,j)∈E}
{j|(j,i)∈E}
erfüllt.
Die Kapazitätsbedingung besagt also, dass durch jede Kante ein nicht-negativer Fluss, der
durch die Kapazität der Kante beschränkt ist, fließt. Die Flusserhaltungsbedingung besagt,
dass in jeden Knoten (abgesehen von Quelle und Senke) genau so viel hinein fließt wie heraus.
Anschaulich ist klar, dass der Gesamtfluss aus s heraus gleich dem Gesamtfluss nach t sein
sollte. Das folgende Lemma bestätigt dies:
Lemma 1
Für einen Fluss f in einem Netzwerk (D; s, t; c) gilt
X
X
X
X
f (s, i) −
f (i, s) =
f (i, t) −
f (t, i).
(s,i)∈E
Beweis. Es gilt
X
(i,s)∈E
f (i, j) =
(i,j)∈E
=
X
f (i, s) +
(i,t)∈E
X
(i,s)∈E
(i,t)∈E
X
X
(s,s)∈E
f (s, i) +
(t,i)∈E
Wegen der Flusserhaltung folgt die Behauptung.
1
f (i, t) +
(t,i)∈E
X
X
f (i, j)
j∈V \{s,t} (i,j)∈E
f (t, i) +
X
X
j∈V \{s,t} (j,i)∈E
f (j, i).
Definition (Wert des Flusses)
Der Ausdruck
X
X
w(f ) :=
f (s, i) −
f (i, s)
(s,i)∈E
(i,s)∈E
heißt Wert des Flusses f .
Definition (Maximalfluss)
Ein Fluss f , für den w(f ) maximal ist, d.h. w(f 0 ) ≤ w(f ) für alle Flüsse f 0 in einem Netzwerk
(D; s, t; c), heißt Maximalfluss in (D; s, t; c).
Definition (Schnitt, Kapazität eines Schnittes)
Eine Menge S ⊂ V induziert eine Partition (S, V \ S) der Knotenmenge V , die wir Schnitt im
Graphen D = (V, E) nennen. In einem Netzwerk (D; s, t; c) heißt (S, V \ S) ein s-t-Schnitt,
wenn s ∈ S und t ∈ V \ S. Die Kapazität eine Schnittes (S, V \ S) ist definiert als
X
c(S, V \ S) :=
c(i, j)
(i,j)∈E
i∈S
j∈V \S
Definition (minimaler Schnitt)
Ein Schnitt (S, V \ S) heißt minimal, wenn c(S, V \ S) minimalen Wert unter allen Schnitten
(S 0 , V \ S 0 ) hat, d.h. c(S 0 , V \ S 0 ) ≥ c(S, V \ S) für alle S 0 ⊂ V mit ∅ =
6 S 0 6= V .
Lemma (Schnittlemma)
Sei (S, V \ S) ein s-t-Schnitt im Netzwerk (D; s, t; c). Für jeden Fluss f gilt, dass
X
X
w(f ) =
f (i, j) −
f (i, j).
(i,j)∈E
i∈S
j∈V \S
(i,j)∈E
j∈S
i∈V \S
Insbesondere ist w(f ) ≤ c(s, V \ S).
Beweis. Es gilt
w(f ) =
X X
i∈S
=
(i,j)∈E
X
(i,j)∈E
i,j∈S
≤
X
X
f (i, j) −
f (i, j) −
f (j, i)
(j,i)∈E
X
f (j, i) +
(j,i)∈E
i,j∈S
X
(i,j)∈E
i∈S
j∈V \S
c(i, j) = c(S, V \ S).
(i,j)∈E
i∈S
j∈V \S
2
f (i, j) −
X
(j,i)∈E
i∈S
j∈V \S
f (j, i)
Definition (erhöhender Weg)
Zu einem Fluss f im Netzwerk (D; s, t; c) betrachten wir einen ungerichteten Weg von s nach
t. Alle Kanten auf diesem Weg, die von s in Richtung t gerichtet sind, heißen Vorwärtskanten (VwK), alle anderen Rückwärtskanten (RwK). Ein solcher Weg heißt erhöhender Weg
bezüglich f , wenn für jede Vorwärtskante (i, j) des Weges f (i, j) < c(i, j) gilt und wenn für
jede Rückwärtskante f (i, j) > 0.
Satz (Satz vom erhöhenden Weg)
Ein Fluss f in einem Netzwerk (D; s, t; c) ist genau dann ein Maximalfluss, wenn es bezüglich
f keinen erhöhenden Weg gibt.
Beweis. =⇒: Sei f ein Maximalfluss. Angenommen, es existiere bezüglich f ein erhöhender
Weg. Sei für Kanten (i, j) dieses Weges
c(i, j) − f (i, j) falls (i, j) Vorwärtskante
∆(i, j) :=
f (i, j)
falls (i, j) Rückwärtskante
und
∆ := min{∆(i, j) | (i, j) auf erhöhendem Weg W }.
Dann ist ∆ > 0. Sei nun f 0 : E → R+
0 definiert als

 f (i, j) + ∆ falls (i, j) Vorwärtskante auf W
f (i, j) − ∆ falls (i, j) Rückwärtskante auf W
f 0 :=

f (i, j)
sonst.
Dann ist f 0 wieder ein Fluss und w(f 0 ) > w(f ) im Widerspruch zur Annahme, dass f ein
Maximalfluss ist.
⇐=: Das Netzwerk (D; s, t; c) habe keinen bezüglich f erhöhenden Weg. Sei S die Menge aller
Knoten in V , zu denen ein erhöhender Weg von s aus bezüglich f existiert. Es gilt S 6= ∅,
weil s ∈ S und S 6= V , weil t ∈
/ S. Dann induziert s einen s-t-Schnitt und es muss gelten,
dass f (i, j) = c(i, j) für alle (i, j) mit i ∈ S, j ∈ V \ S und dass f (i, j) = 0 für alle (i, j) mit
i ∈ V \ S, j ∈ S (d.h. alle Kanten (i, j) mit i ∈ S, j ∈ V \ S sind saturiert und alle Kanten
(i, j) mit i ∈ V \ S, j ∈ S sind leer). Nach dem Schnittlemma ergibt sich w(f ) = c(S, V \ S).
Es muss also w(f ) maximal sein.
Satz (Max-Flow Min-Cut Theorem, Ford und Fulkerson, 1956)
In einem Netzwerk (D; s, t; c) ist der Wert eines Maximalflusses gleich der minimalen Kapazität eines s-t-Schnittes.
Beweis. Die Behauptung folgt direkt aus dem Satz vom erhöhenden Weg. Denn ist f ein
Maximalfluss, dann existiert ein Schnitt (S, V \ S) mit s ∈ S und t ∈ V \ S, wobei S die
Menge aller auf einem erhöhenden Weg von s erreichbaren Knoten ist. Für (S, V \ S) gilt,
dass
c(S 0 , V \ S).
w(f ) = c(S, V \ S) und c(S, V \ S) = min
0
∅6=S 6=V
s∈S
t∈V \S
3
2
Der Algorithmus von Edmonds und Karp
Der Algorithmus von Edmonds und Karp (1972) berechnet in O(|V ||E|2 ) einen maximalen
Fluss entsprechend dem Beweis des Satzes vom erhöhenden Weg. Hierbei wird systematisch
mittels Breitensuche ein erhöhender Weg kürzester Länge gesucht (siehe Abbildung 1).
1) Setze f (i, j) := 0 für alle Kanten (i, j) ∈ E.
2) Solange es einen erhöhenden Weg bezüglich f gibt, führe aus:
3)
Sei he1 , e2 , . . . , ek i mit e1 , e2 , . . . , ek ∈ E ein erhöhender Weg kürzester Länge.
4)
Setze ∆ := min({c(ei ) − f (ei ) | ei VwK} ∪ {f (ei ) | ei RwK}).
5)
Setze f (ei ) := f (ei ) + ∆, falls ei VwK ist und f (ei ) := f (ei ) − ∆, falls ei RwK ist.
Im Algorithmus von Edmonds und Karp wird der Fluss maximal O(|V ||E|) oft erhöht und
eine Erhöhung kostet jeweils höchstens O(|E|), was zu einer Laufzeit von O(|V ||E|2 ) führt.
Für Implementationsdetails und weitere Flussalgorithmen, siehe Skript über Flussprobleme
und Dualität oder [2].
3
Bipartites Matching
3.1
Definitionen
Definition (bipartiter Graph)
Sei G = (V, E) ein ungerichteter Graph. G heißt bipartit, falls die Knotenmenge V in zwei
disjunkte Teilmengen X und Y partitioniert werden kann, so dass jede Kante aus E genau
einen Endknoten in X und genau einen Endknoten in Y hat, d.h. für {v, w} ∈ E gilt v ∈ X
und w ∈ Y oder v ∈ Y und w ∈ X.
Definition (Matching, maximales Matching)
Ein Matching von G ist eine Teilmenge M der Kantenmenge E, die keine gemeinsamen
Endknoten besitzt. Ein maximales Matching ist ein Matching maximaler Mächtigkeit (siehe
Abbildung 2(b)), d.h. G enthält kein Matching |M 0 | mit |M | < |M 0 |.
Definition (das maximale bipartite Matching-Problem)
Das maximale bipartite Matching-Problem besteht darin, ein maximales Matching zu finden.
3.2
Reduktion auf ein Flussproblem
Sei G ein bipartiter Graphen, dessen Knoten in zwei disjunkte Mengen X und Y partitioniert
sind. Wir erzeugen ein Flussnetzwerk D, so dass der maximale Fluss in D in ein maximales
Matching umgerechnet werden kann (siehe Abbildung 3).
• Alle Knoten in G werden zu Knoten in D. Füge zwei weitere Knoten s bzw. t als Quelle
bzw. Senke hinzu.
• Füge jede Kante von G zu D hinzu, richte die Kante so, dass sie von X nach Y orientiert
ist. Füge gerichtete Kanten von s zu jedem Knoten aus X hinzu und Kanten von jedem
Knoten aus Y zu t. Alle Kanten bekommen jeweils die Kapazität 1.
Sei f ein Fluss in D. Sei e ∈ M ⊆ E, falls f (e) = 1. Wir zeigen nun, dass M ein Matching
ist. Da in D alle Kapazitäten 1 sind, trägt jede Kante den Fluss 0 oder 1. Weiterhin hat
4
(a)
(b)
(c)
(d)
(e)
(f)
(g)
(h)
(i)
(j)
Abbildung 1: Beispiel des Algorithmus von Edmonds und Karp.
5
(a)
(b)
Abbildung 2: (a) Ein nicht erweiterbares Matching, das aber nicht maximal ist. (b) Ein
maximales Matching.
jeder Knoten aus X genau eine einkommende Kante. Dies impliziert, dass höchstens eine
ausgehende Kante von X nicht-leeren Fluss haben kann. Genauso hat jeder Knoten aus Y
genau eine ausgehende Kante und somit höchstens eine eingehende Kante mit nicht-leerem
Fluss. Daraus folgt, dass jeder Knoten aus X mit maximal einem Knoten aus Y durch eine
flusstragende Kante verbunden ist und somit ist M ein Matching. Wir sehen leicht, dass die
Mächtigkeit von M gleich dem Wert des Flusses f ist.
Die umgekehrte Richtung gilt ebenso. Falls ein Matching M eines Graphen G gegeben ist,
können wir daraus einen Fluss f für D folgendermaßen bestimmen: Sei f (e) = 1, falls e ∈ M
und f (e) = 0, sonst. Weiterhin gilt für alle Kanten e ∈ D, die inzident zu s oder t sind:
f (e) = 1, falls e Endpunkt einer Kante aus M ist und f (e) = 0, sonst. Dann ist f ein Fluss
und der Wert des Flusses gleicht der Mächtigkeit von M .
Hieraus folgt, dass jeder Algorithmus zur Bestimmung eines maximalen Flusses auch zur
Bestimmung des bipartiten maximalen Matching-Problems benutzt werden kann. Genauer:
1. Konstruiere ein Netzwerk D eines bipartiten Graphen G in O(n + m). Das Netzwerk D
hat n + 2 Knoten und n + m Kanten.
2. Berechne einen maximalen Fluss für D zum Beispiel mit dem Algorithmus von Edmonds
und Karp. Da die Kanten Einheitsgewicht haben und somit der Wert des Maximalflusses
gleich |M | ist, ist die Laufzeit dieses Schrittes O(nm).
Satz
Sei G ein bipartiter Graph mit n Knoten und m Kanten. Ein maximales Matching von G
kann in O(nm) berechnet werden.
4
Anwendungsbeispiel - ein Tag in der Arbeitsagentur
Bei der Arbeitsagentur haben sich viele Leute gemeldet, die noch eine Arbeit suchen. Auf
dem Formular für Arbeitssuche haben sie angegeben, für welche Arbeiten sie qualifiziert sind.
Die Arbeitsagentur möchte nun so viele Jobs wie möglich vermitteln. Hierbei hilft der Satz
von Hall (siehe [3]).
Satz (Heiratssatz von Hall, 1935)
In einem bipartiten Graphen G mit Knotenpartitionen X und Y existiert genau dann ein
Matching M mit |M | = |X|, falls für jede Teilmenge S ⊆ X gilt, dass die Nachbarschaft von
6
(a)
(b)
Abbildung 3: (a) Ein bipartiter Graph G. (b) Ein von G reduziertes Flussnetzwerk D mit
Maximalfluss (dicke Kanten); die dicken Kanten haben Fluss 1, die anderen Kanten haben
Fluss 0 (siehe [1]).
S mindestens so groß ist, wie S selbst, d.h. |N (S)| ≥ |S| für alle S ⊆ X (wobei N (S) := {y ∈
Y | {x, y} ∈ E, x ∈ S} die Nachbarschaft der Knotenmenge S heißt).
Beweis. =⇒: In dem durch M induzierten Teilgraphen H = (V, M ) hat jede Teilmenge
S ⊆ X nach Definition eines Matchings genau |S| Nachbarn. Wegen M ⊆ E gilt daher
auch |N (S)| ≥ |S|.
⇐=: Beweis durch Widerspruch
Annahme: Es gäbe einen Graphen, für den |N (S)| ≥ |S| für alle S ⊆ X, aber der kein
Matching der Kardinalität |X| enthält.
Wähle ein kardinalitätsmaximales Matching M in G. Dann gilt |M | < |X|.
Also gibt es mindestens einen Knoten x0 ∈ X, der nicht von M überdeckt wird. Da |N (x0 )| ≥ |x0 | = 1 nach Voraussetzung, hat x0 mindestens
einen Nachbarn y0 in Y . Dann können wir eine Folge von Knoten konstruieren:
k ← 0;
while yk wird von M überdeckt do
xk+1 ← Nachbar von yk in M ;
wähle einen beliebigen Knoten yk+1 aus N ({x0 , . . . , xk+1 }) \ {y0 , . . . , yk };
k ← k + 1;
Wegen der Voraussetzung gibt es in jedem Durchlauf der Schleife Knoten yk+1 , denn jeder
Knoten ist nach Konstruktion zu mindestens einem Knoten in der Menge {x0 , . . . , xk+1 } inzident. Somit gibt es einen Pfad von x0 zu dem letzten gefundenen Knoten, der abwechselnd
aus Kanten besteht, die nicht zum Matching M gehören und aus Kanten, die in M enthalten
sind. Nach Konstruktion werden x0 und yk nicht von M überdeckt. Daraus folgt, dass ein
neues Matching M 0 konstruiert werden kann. Entferne aus M alle Kanten des Pfades, die zu
M gehören und füge statt dessen zu M alle Kanten des Pfades hinzu, die bislang nicht zu M
gehört haben. Das so entstandene Matching M 0 enthält dann genau eine Kante mehr als das
Matching M . Da M als kardinalitätsmaximal gewählt wurde, haben wir einen Widerspruch
zur Annahme.
Wann kann nun die Arbeitsagentur allen Bewerbern einen Job vermitteln? Sei hierfür X die
Menge die Bewerber und Y die Menge der Jobs. Für jedes S ⊆ X sei N (S) die Menge der
7
Jobs für die sich die Bewerber S ⊆ X interessieren. Mit der Konstruktion, die im Beweis vom
Satz von Hall benutzt wurde, kann nun auch die Arbeitsagentur genau dann allen Bewerbern
einen Job vermitteln, falls |N (S)| ≥ |S| für alle S ⊆ X.
Literatur
[1] M. T. Goodrich, R. Tamassia: Algorithm Design: Foundations, Analysis, and Internet
Examples. Wiley, 2002.
[2] D. Jungnickel: Graphen, Netzwerke und Algorithmen. BI-Wissenschaftsverlag, 1994.
[3] A. Steger: Diskrete Strukturen. Springer, 2007.
8
Herunterladen