FLÜSSE, SCHNITTE UND BIPARTITE GRAPHEN - TEIL 2 - Vortrag im Seminar Hallo Welt Für Fortgeschrittene Dozenten: Werth, T. & Brinkers, D. Lukas Dresel 17. Juni 215
Inhalt Problemstellung Lösungsmethode 1 Optimales Bipartites Matching 2 Minimale MINIMUMCUT oder Reduktion auf ein Flussproblem 3 (Kanten-/Knoten-) Reduktion auf ein Flussproblem 4 Modifizierter Ford-Fulkerson 2
Grundlagen Annahmen Schritte des Algorithmus 3
Lukas Das Urlaubs-Dilemma 3 1 2 Kilian Nick 4
Die auch Kuhn-Munkres Algorithmus genannt Zum Lösen gewichteter Zuordnungsprobleme auf bipartiten Graphen ( Optimales Bipartites Matching) 5
Die 1955 entwickelt von Harold W. KUHN basierend auf Ideen der ungarischen Mathematiker Dénes Kőnig & Jenő Egerváry 1957 überarbeitet nach Laufzeit- Analyse von James R. MUNKRES 6
Algorithmus zur Minimierung der Kosten eines bipartiten Matchings Basierend auf der Idee der augmentierenden Pfade Algorithmus ist greedy Laufzeit des originalen Algorithmus in O(n 4 ) Laufzeit nach Optimierung in O(n 3 ) 7
Annahmen zur Ungarischen Methode eine Gewichtungsmatrix, bei der die Zeilen den Arbeitern und die Spalten den Jobs entsprechen Gewichtungsmatrix ist quadratisch, andernfalls muss sie künstlich erweitert werden es gibt keine negativen Gewichte 8
1. Uminterpretieren der Kosten als Verlust gegenüber dem Minimum 2. Wähle initial kostenloses Matching 3. Überprüfe aktuelles kostenloses Matching auf Vollständigkeit, wenn JA Ende des Algorithmus 4. Finde augmentierenden Pfad, wenn keiner gefunden goto Schritt 6 5. In Schritt 4 gefundenen Pfad augmentieren goto Schritt 3 6. Passe Matrix an, um kleinstmögliches Übel zu akzeptieren goto Schritt 4 9
Beispiel: Schritt 1.1: Spaltenminima abziehen 2 1 12 4 3 5 8 45 35 15 1 4 18 13 2 3 2 1 12 4 3 5 8 45 35 15 1 4 18 13 2 3 1
Beispiel: Schritt 1.1: Spaltenminima abziehen 2 1 12 4 3 5 8 45 35 15 1 4 18 13 2 3 17 1 12 4 5 8 45 32 15 1 4 15 13 2 3 11
Beispiel: Schritt 1.1: Spaltenminima abziehen 2 1 12 4 3 5 8 45 35 15 1 4 18 13 2 3 17 5 12 4 8 45 32 1 1 4 15 8 2 3 12
Beispiel: Schritt 1.1: Spaltenminima abziehen 2 1 12 4 3 5 8 45 35 15 1 4 18 13 2 3 17 5 2 4 7 45 32 1 4 15 8 1 3 13
Beispiel: Schritt 1.1: Spaltenminima abziehen 2 1 12 4 3 5 8 45 35 15 1 4 18 13 2 3 17 5 2 1 7 15 32 1 1 15 8 1 14
Beispiel: Schritt 1.2: Zeilenminima abziehen 17 5 2 1 7 15 32 1 1 15 8 1 17 5 2 1 7 15 32 1 1 15 8 1 15
Beispiel: Schritt 1.2: Zeilenminima abziehen 17 5 2 1 7 15 32 1 1 15 8 1 15 3 8 7 15 32 1 1 15 8 1 16
Beispiel: Schritt 1.2: Zeilenminima abziehen 17 5 2 1 7 15 32 1 1 15 8 1 15 3 8 7 15 32 1 1 15 8 1 17
Beispiel: Schritt 1.2: Zeilenminima abziehen 17 5 2 1 7 15 32 1 1 15 8 1 15 3 8 7 15 32 1 1 15 8 1 18
Beispiel: Schritt 1.2: Zeilenminima abziehen 17 5 2 1 7 15 32 1 1 15 8 1 15 3 8 7 15 32 1 1 15 8 1 19
Beispiel: Schritt 2: Initiales Matching finden Wir iterieren über die Matrix und markieren noch nicht überdeckte Nullen mit einem Stern. 15 3 8 7 15 32 1 1 15 8 1 [ ] 2
Beispiel: Schritt 2: Initiales Matching finden Wir iterieren über die Matrix und markieren noch nicht überdeckte Nullen mit einem Stern. 15 3 8 7 15 32 1 1 15 8 1 [ 1 ] 1 21
Beispiel: Schritt 2: Initiales Matching finden Wir iterieren über die Matrix und markieren noch nicht überdeckte Nullen mit einem Stern. 15 3 8 7 15 32 1 1 15 8 1 [1 1 ] 1 1 22
Beispiel: Schritt 2: Initiales Matching finden Wir iterieren über die Matrix und markieren noch nicht überdeckte Nullen mit einem Stern. 15 3 8 7 15 32 1 1 15 8 1 [1 1 ] 1 1 23
Beispiel: Schritt 2: Initiales Matching finden Wir iterieren über die Matrix und markieren noch nicht überdeckte Nullen mit einem Stern. 15 3 8 7 15 32 1 1 15 8 1 [1 1 ] 1 1 24
Beispiel: Schritt 2: Initiales Matching finden Wir iterieren über die Matrix und markieren noch nicht überdeckte Nullen mit einem Stern. 15 3 8 7 15 32 1 1 15 8 1 [1 1 1] 1 1 1 25
Beispiel: Schritt 3: Ist initiales Matching perfekt? 15 3 8 7 15 32 1 1 15 8 1 [1 1 1] Es gibt eine unüberdeckte Spalte Kein perfektes Matching, weitermachen 26
Beispiel: Schritt 4: Finde augmentierenden Pfad Finde eine noch nicht überdeckte Null, markiere sie 15 3 8 7 15 32 1 1 15 8 1 [1 1 1] Mit Stern markierte Null in der selben Zeile? Ja, deren Spalte entfernen, Reihe zur Überdeckung hinzufügen 27
Beispiel: Schritt 4: Finde augmentierenden Pfad Finde eine noch nicht überdeckte Null 15 3 8 7 15 32 1 1 15 8 1 [ 1 1] 1 Keine unüberdeckte Null mehr Wir müssen mehr Kosten in Kauf nehmen. goto Schritt 6 28
Beispiel: Schritt 6: Matrix Werte anpassen Finde Minimum aller nicht überdeckten Werte 15 3 8 7 15 32 1 1 15 8 1 [ 1 1] 1 Minimum = 3 29
Beispiel: Schritt 6: Matrix Werte anpassen Zeile überdeckt? Spalte nicht überdeckt? 15 3 8 7 15 32 1 1 15 8 1 val += minimum; val = minimum; [ 1 1] 1 3
Beispiel: Schritt 6: Matrix Werte anpassen Zeile überdeckt? Spalte nicht überdeckt? 12 8 73 18 29 7 1 12 5 1 val += minimum; val = minimum; [ 1 1] 1 31
Beispiel: Schritt 4: Finde augmentierenden Pfad Finde eine noch nicht überdeckte Null, markiere sie 12 8 73 18 29 7 1 12 5 1 [ 1 1] 1 Mit Stern markierte Null in der selben Zeile? Ja, deren Spalte entfernen, Reihe zur Überdeckung hinzufügen 32
Beispiel: Schritt 4: Finde augmentierenden Pfad Finde eine noch nicht überdeckte Null, markiere sie 12 8 73 18 29 7 1 12 5 1 [ 1] 1 1 Mit Stern markierte Null in der selben Reihe? Nein, Markiere sie 33
Beispiel: Schritt 4: Finde augmentierenden Pfad Finde eine noch nicht überdeckte Null, markiere sie 12 8 73 18 29 7 1 12 5 1 [ 1] 1 1 Mit Stern markierte Null in der selben Reihe? Nein, Markiere sie, GOTO 5, augmentierender Pfad gefunden 34
Beispiel: Schritt 5: Pfad Augmentieren Beginne von der in Schritt 4 entdeckten unüberdeckten Null aus 12 8 73 18 29 7 1 12 5 1 [ 1] 1 1 Von jedem Prime aus finde einen Stern in der selben Spalte Von jedem Stern aus finde einen Prime in der selben Zeile 35
Beispiel: Schritt 5: Pfad Augmentieren Wiederhole solange möglich 12 8 73 18 29 7 1 12 5 1 [ 1] 1 1 Von jedem Prime aus finde einen Stern in der selben Spalte Von jedem Stern aus finde einen Prime in der selben Zeile 36
Beispiel: Schritt 5: Pfad Augmentieren Wiederhole solange möglich 12 8 73 18 29 7 1 12 5 1 [ 1] 1 1 Von jedem Prime aus finde einen Stern in der selben Spalte Von jedem Stern aus finde einen Prime in der selben Zeile 37
Beispiel: Schritt 5: Pfad Augmentieren Der Pfad ist nicht fortsetzbar, in Spalte 1 gibt es keinen Stern mehr 12 8 73 18 29 7 1 12 5 1 [ 1] 1 1 Augmentiere den Pfad: * * Zeilen und Spaltenüberdeckungen, sowie alle übrigen Primes werden gelöscht 38
Beispiel: Schritt 5: Pfad Augmentieren Der Pfad ist nicht fortsetzbar, in Spalte 1 gibt es keinen Stern mehr 12 8 73 18 29 7 1 12 5 1 [ ] Augmentiere den Pfad: * * Zeilen und Spaltenüberdeckungen, sowie alle übrigen Primes werden gelöscht GOTO 4 (Finde augmentierenden Pfad) 39
Beispiel: Schritt 5: Pfad Augmentieren 12 8 73 18 29 7 1 12 5 1 [1 1 1 1] In diesem Fall aber bereits am Ende, da jede Spalte einen Eintrag in unserem Matching hat 4
Beispiel: Schritt 5: Pfad Augmentieren Konsequenz: Unser finales (optimales) Matching lautet: 2 1 12 4 3 5 8 45 35 15 1 4 18 13 2 3 [ ] Arbeiter 1 Job 2 Arbeiter 2 Job 1 Arbeiter 3 Job 3 Arbeiter 4 Job 4 41
Grundlagen zu n Minimale und Maximale Flüsse in Fluss-Netzen in ungerichteten Graphen 42
in Fluss-Netzen Definition: Schnitt eines Fluss-Netzes Ein Schnitt teilt ein Fluss-Netz G V, E in zwei Teilgraphen S und T = V S, so dass die Quelle s S und die Senke t T gilt. Eigenschaften Kapazität c S, T = u S v T c(u, v) Fluss f S, T = u S v T f(u, v) - u S v T f(v, u) 43
7/13 1/23 Lukas Dresel in Fluss-Netzen Beispiel: v1 11/16 v2 s t v3 12/12 v4 Kapazität: c S, T = 2 + 12 = 32 Fluss: f S, T = 12 1 + 15 = 26 44
in Fluss-Netzen Definition: Minimaler Schnitt Ein minimaler Schnitt ist ein Schnitt, dessen Kapazität c(s, T) der Kapazität jedes anderen s im Netzwerk ist. 45
in Fluss-Netzen Theorem: Max-Flow-Min-Cut Sei f der Fluss in einem Netzwerk G = (V, E) mit Quelle s und Senke t, so sind die folgenden Bedingungen äquivalent: f ist maximaler Fluss in G Residualgraph G f hat keine erweiternden Pfade Es gibt einen Schnitt S, T aus G mit f = c S, T 46
in Fluss-Netzen Berechnung eines minimalen Schnitts Wir wissen: Max Flow = Min Cut Lösen durch Finden des maximalen Flusses Ford-Fulkerson Algorithmus auf den Graphen anwenden alle von s aus erreichbaren Knoten im Residualgraphen ergeben S alle übrigen Knoten im Residualgraphen ergeben T 47
in Graphen Der MINIMUMCUT Algorithmus arbeitet auf ungerichteten Graphen effizienter als simple flussbasierte Algorithmen leicht verständlich und implementierbar Mit n = Anzahl der Knoten und m = Anzahl der Kanten ergibt sich eine Laufzeit von O(nm + n 2 log n ) 48
in Graphen Der MINIMUMCUT Algorithmus Die zwei Komponenten des Algorithmus Reduktionsfunktion - reduziert Anzahl der Knoten im Graphen um eins (durch Knotenverschmelzung) Hauptfunktion - ruft Reduktionsfunktion in einer Schleife auf, solange noch mehr als ein Knoten im Graphen enthalten ist 49
in Graphen Die Reduktionsfunktion MINIMUMCUTPHASE (G, w, Startknoten a) A := {a} solange A V: finde x mit y A w x, y maximal füge x zu A hinzu seien z n, z n 1 die zuletzt gefundenen Knoten speichere c( z n, V z n ) vereinige z n, z n 1 gib gespeicherte Kapazität zurück 5
in Graphen Die Hauptfunktion MINIMUMCUT (G, w, Startknoten a) minimum := solange V > 1: cut := MINIMUMCUTPHASE (G, w, a) wenn cut < minimum: minimum = result gib minimum zurück 51
Definition: Unter der eines Graphen versteht man die minimale Anzahl der Verbindungselemente (Kanten oder Knoten), deren Entfernen aus dem Graphen diesen in mindestens zwei disjunkte Teilgraphen zerfallen lässt. s-t-kanten- Allgemeine Kanten- s-t-knoten- Allgemeine Knoten- 52
Die s-t-kanten- Gegeben: ungerichteter Graph G = V, E zwei Knoten s, t aus V Gesucht: Anzahl der Kanten, die mindestens durchtrennt werden müssen, um s von t unerreichbar werden zu lassen 53
Die s-t-kanten- Setze alle Kanten-Gewichte in G auf eins Finde minimalen Schnitt Reduktion auf Fluss-Problem MINIMUMCUT Kapazität Min-Cut = 54
Die allgemeine Kanten- Gibt Anzahl der Kanten an, die mindestens durchtrennt werden müssen, um den Graphen in mindestens zwei disjunkte Teilgraphen zerfallen zu lassen. Lösung: Bestimme die s-t-kanten- für jedes Knotenpaar s,t V Wähle Minimum 55
Knoten- Analog zur Kanten- Statt den Kanten-Gewichten werden die Knoten-Gewichte auf eins gesetzt Achtung: In der Reduktion beachten! 56
Problemstellung Annahmen Lösung 57
Problemstellung Annahmen Lösung 58
Problemstellung Gegeben: Fluss-Netzwerk G = V, E mit Kantenkapazitäten c(e E) Kantenkosten Cost(e E) Quelle und Senke s, t V Gesucht: Maximaler Fluss mit minimalen Kosten 59
Cost 2 Cap. 6 Cost 4 Cap. 9 Lukas Dresel Beispiel: v1 Cost 1 Cap. 16 v2 s t v3 Cost 1 Cap. 3 v4 Kosten sind ein konstanter Multiplikator! Der Transport (Fluss) von 5 entlang des roten Weges kostet: 2*5+1*5+5*5 = 175 6
Lösung: Variation von Ford-Fulkerson Augmentierende Pfade werden durch eine Kürzeste-Wege-Suche gefunden Distanz Kosten! Negative Gewichte (vor allem Zyklen) stellen ein Problem dar, daher z.b. Bellman-Ford verwenden 61
Zusammenfassung Besprochene Lösungsmethoden: Bipartites Matching Reduktion auf Fluss-Problem in Min-Cut Reduktion auf Fluss-Problem MINIMUMCUT (ungerichtet) 62
Laufzeiten Besprochene Lösungsmethoden: Reduktion auf Minimalen Schnitt Kanten, Knotengewichte auf 1 Minimaler Schnitt = Variation von Max-Flow Algorithmus kürzeste-wege Suche um augmentierende Pfade zu finden 63
Zusammenfassung Es gilt: n=anzahl Knoten, m=anzahl Kanten Algorithmus Lösungsmethode Laufzeit Optimales Bipartites Matching Ungarische Methode O(n 4 ) Minimale MINIMUMCUT O(nm + n 2 log n ) Minimale Reduktion auf ein Flussproblem O(n 2 m) 64
Zusammenfassung Algorithmus Lösungsmethode Laufzeit s-t-kanten Allgemein Kanten s-t-knoten Allgemein Knoten O m 2 O n m 2 O nm O n 3 m Min-Cost-Max- Flow Ford-Fulkerson mit kürzeste-wege- Suche O(nm log n ) 65
Quellen Cormen, Thomas H., Leiserson, Charles E., Rivest, Ronald L., Stein Clifford, Introduction to Algorithms, Second Edition, MIT Press, Cambridge, Massachusettes, London, England 21 Levitin, Anany, Introduction to The Design and Analysis of Algorithms, Third Edition, 212, Villanova University Vortragsfolien zum Seminar Hallo Welt! Für Fortgeschrittene (21 214) Pilgrim, Robert A., Munkres Assignment, Algorithm, csclab.murraystate.edu/bob.pilgrim/445/munkres.html Preussler, Ernst-Joachim und Klein, Patrick, Datenstrukturen und Algorithmen Minimale in Graphen, www-stud.rbi.informatik.uni-frankfurt.de/~erps/seminar/theoseminar.pdf Schulz Christof, Die für das Assignment Problem von H.W. Kuhn (1955), www.zib.de/groetschel/teaching/ss28/ss28/talks/schulz- Talk.pdf Stoer, Mechthild und Wagner, Frank, A simple Min-Cut Algorithm, e-maxx.ru/bookz/files/stoer_wagner_mincut.pdf Prof. Dr. Täubig, Hanjo, Fortgeschrittene Netzwerk- und Graph-Algorithmen, http://wwwmayr.informatik.tu-muenchen.de/lehre/21ws/anga/slides/anga- 21-12-22.pdf 66
Quellen Unknown author, The Hitchhiker s Guide to Programming Contests, home.iitk.ac.in/~abhra/icpc.pdf Unknown author,, https://www.fernuni-hagen.de/bwlor/assets/courses/k853-a1.pdf Unknown author, Graph Theory: The Hungarian Algorithm Example https://www.youtube.com/watch?v=gqfombkzza4, 213 Unknown author, Graph Theory: The Hungarian Algorithm, https://www.youtube.com/watch?v=djaqebv3vmy, (213) Unknown author, Graph Theory: The Hungarian Algorithm - Allocation, https://www.youtube.com/watch?v=dqdznhwuuoy,,(213) Wikipedia Artikel Hungarian algorithm, http://en.wikipedia.org/wiki/hungarian_algorithm, (25) Wikipedia Artikel, http://de.wikipedia.org/wiki/ungarische_methode, (24) Wikipedia Artikel, Minimum-cost flow problem http://en.wikipedia.org/wiki/minimum-cost_flow_problem, (26) 67