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