Seminarvortrag “Flüsse, Schnitte, bipartite Abbildungen” von Adrian J. Merkl E­Mail: [email protected] 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 1 Übersicht Motivation / Einführung Algorithmen für maximalen Fluss Ford­Fulkerson Preflow­Push Maximaler Fluss bei minimalen Kosten Minimaler Schnitt Max­Flow Min­Cut Bipartite Graphen und weitere Reduzierungen Zusammenfassung 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 2 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Das Vertriebsproblem 4 Produzenten 4 2/2 Zwischenhändler 6 3/4 5/5 Kosten 4/1 1/3 Produktion 3/2 1/4 1/4 Kapazität 2/6 6/6 3/4 4/3 Geschäfte Verbrauch 7 31.05.2006 3 Seminar "Hallo Welt!" für Fortgeschrittene 4 3 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Suche nach Engstellen im Straßennetz 1/3 2/2 2/2 1/1 q s 1/1 2/3 1/1 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 2/3 Durchschnittliches Verkehrsaufkommen Kapazität 4 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Tanzpaarbildung Mädchen Jungen 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 5 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Netzwerk N = (V, E, q, s, c): gerichteter Graph ohne Mehrfachkanten Quelle q und Senke s aus der Menge der Knoten V Kapazitätsfunktion c, die jeder Kante (u,v) aus E eine Kapazität c(u,v) aus dem Bereich der nicht negativen ganzen Zahlen zuweist. 1/3 2/2 2/2 1/1 q s 2/3 31.05.2006 1/1 1/1 2/3 Seminar "Hallo Welt!" für Fortgeschrittene 6 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Ein q­s­Fluss ist eine Funktion f, die von den Kanten im Netzwerk in die Menge der nicht negativen ganzen Zahlen abbildet. Dabei müssen für einen zulässigen Fluss folgende Bedingungen erfüllt sein: ∀u,v ∈ V: f(u,v) ≤ c(u,v) (Kantenfluss maximal so groß wie Kapazität) ∀u,v ∈ V \ {q,s}: ∑ f(u,v) = 0 (Summe der Zu­ und Abflüsse der inneren Knoten ist 0) ∀u,v ∈ V: (Entgegengesetzte Flüsse unterscheiden sich durch das Vorzeichen) f(u,v) = ­ f(v,u) Der Wert eines q­s­Flusses ist die Summe der eingehenden abzüglich der ausgehenden Belegungen der Senke s bzw. die ausgehenden Belegungen abzüglich der eingehenden Belegungen der Quelle q. 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 7 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Als Residualgraph oder Restnetzwerk eines Graphen G wird ein Graph G ' bezeichnet, der die übrigen Kantenkapazitäten anzeigt, nachdem ein Fluss angelegt wurde. Zwischen den Knoten V von G ' befinden sich nun Residualkanten, die die noch nicht genutzte Kantenkapazität anzeigen und entgegengesetzt gerichtete Kanten, die die bereits genutzte Kantenkapazität anzeigen. q 2/3 s 1 q s 2 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene Fluss / Kantenkapazität Restkapazität Kapazität für den Rückfluss 8 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Existiert in G ' ein Pfad p zwischen Quelle q und Senke s in Richtung s, so nennen wir diesen augmentierten Pfad (augmented path). Dieser aus Residualkanten bestehende Pfad gibt einen weiteren möglichen Fluss an, der im Algorithmus von Ford und Fulkerson zur Verbesserung des maximalen Flusses genutzt wird. Erst wenn keine augmentierten Pfade mehr existieren, wurde der maximale Fluss ermittelt. 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 9 Zwischenstand Motivation / Einführung Algorithmen für maximalen Fluss Ford­Fulkerson Preflow­Push Maximaler Fluss bei minimalen Kosten Minimaler Schnitt Max­Flow Min­Cut Bipartite Graphen und weitere Reduzierungen Zusammenfassung 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 10 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Berechnung des maximalen (zulässigen) Flusses Gegeben sei ein Netzwerk N = (V,E,q,s,c) Finde unter den Bedingungen eines zulässigen Flusses denjenigen Fluss von q nach s, dessen Wert maximal ist. Algorithmus­Idee von L. R. Ford und D. R. Fulkerson 1 2 3 4 5 31.05.2006 Fluss = leerer Fluss solange es in N einen Weg P von q nach s gibt erweitere Fluss mit einem Fluss über P N = der Residualgraph von N und Fluss über P return Fluss Seminar "Hallo Welt!" für Fortgeschrittene 11 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung ford_fulkerson(flow_graph *g, int source, int sink) { int volume; /* Flussvolumen */ add_residual_edges(g); initialize_search(g); bfs(g,source); /* Pfadsuche */ volume = path_volume(g, source, sink, parent); // max. Volumen des Pfades while (volume > 0) { /* aktualisiert Fluss und Residualgraph */ augment_path(g,source,sink,parent,volume); initialize_search(g); bfs(g,source); volume = path_volume(g, source, sink, parent); } } 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 12 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Ford­Fulkerson worst case (jeder Pfad hat maximalen Fluss 1 #Pfade = maxFlowgesamt) 1) 2) 109 9 10 q 10 9 10 31.05.2006 10 1 1 s 10 1 s 1 109 109­1 6) 109­1 1 q 1 1 109­1 q 9 109­1 9 109 1 s 1 5) 109­1 109 q 109 4) 109­1 109 9 s 1 109 q 3) 109­1 1 1 109­1 s 1 109­1 Seminar "Hallo Welt!" für Fortgeschrittene q 109­1 109­1 1 1 1 1 s 1 109­1 13 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Preflow­Push­Algorithmus (im Folgenden PfP abgekürzt) erlaubt temporär mehr Eingangs­ als Ausgangsfluss an einem Knoten, maximiert zuerst den Eingangsfluss eines Knotens (preflow), leitet dann den überzähligen Fluss über die Ausgangskanten weiter oder über die Eingangskante zurück (push) und verwaltet aktive Knoten in einer Queue (FIFO, Stack, Priority...). Der Knoten K ist dann aktiv, wenn gilt: ZuflussK != AbflussK solange noch aktive Knoten vorhanden sind, wird ein Knoten der Queue entnommen und der überzählige Fluss umgeleitet 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 14 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Wie bei Ford­Fulkerson wird auch bei PfP mit Residual­Netzwerken gearbeitet: Über Kanten im Residual­Netzwerk kann der überzählige Fluss abgeleitet werden. q 2/3 s 1 q s 2 31.05.2006 Fluss / Kantenkapazität Restkapazität Kapazität für den Rückfluss Seminar "Hallo Welt!" für Fortgeschrittene 15 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Auswahl der Kanten erfolgt durch eine Höhenfunktion: Initialisierung der Höhe der Senke: h(s) = 0 Initialisierung der Höhe der restlichen Knoten: h(u) = Kürzester Pfad von u zu s für jede Kante (u,v) ist der kürzeste Pfad von u nach s kleiner oder gleich dem kürzesten Pfad von v nach s plus 1: h(u) ≤ h(v) + 1 1 q h(u) < h(q) Überzähliger Fluss fließt zur Senke 2 3 4 5 h(u) > h(q) Überzähliger Fluss fließt zur Quelle v 1 h ( v ) 3 31.05.2006 2 2 3 2 4 1 Seminar "Hallo Welt!" für Fortgeschrittene 5 1 6 0 6 s 16 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Grundidee des PfP 1 solange es einen aktiven Knoten K gibt 2 wenn es eine geeignete Kante e gibt 3 leite überzähligen Fluss über e ab 4 ansonsten 5 erhöhe die Höhe von K 6 wenn ZuflussK gleich AbflussK 7 deaktiviere K Was ist eine geeignete Kante? Für Kante (u,v) muss gelten: h(u) = h(v) +1 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 17 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Aktive Knoten: Kante 0­1 1­2 1­3 2­4 3­4 Kapazität 4 3 3 2 2 h(3) wird erhöht! Rücklauf zu 1 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 18 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung preflow_push(flow_graph *g, int source, int sink) { queue q; edge *e; init_heights(); start_flow(); /* Höhen initialisieren */ /* Quellabfluss ins Netzwerk schicken */ while (! q.empty()){ vertex *u = q.dequeue(); if ((e = find_legal_edge(u)) != NULL) push_flow(e); else lift(u); if (u­>inflow != u­>outflow) q.enqueue(u); } } 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 19 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Laufzeiten Ford­Fulkerson O(M∗(V+E)) mit Edmonds­Karp­Strategie: Erweiterungspfad ist immer der Kürzestmögliche (Breitensuche): O(V∗E²) Preflow­Push mit FIFO­Queue mit implizitem Residual­Graphen: O(V²∗E) immer der höchste aktive Knoten: O(V²∗√E) mit explizitem Residual­Graphen (großer Programmieraufwand): O(V³) M = maximaler Fluss, V = Anzahl Knoten, E = Anzahl Kanten 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 20 Zwischenstand Motivation / Einführung Algorithmen für maximalen Fluss Ford­Fulkerson Preflow­Push Maximaler Fluss bei minimalen Kosten Minimaler Schnitt Max­Flow Min­Cut Bipartite Graphen und weitere Reduzierungen Zusammenfassung 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 21 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung U.U. gibt es mehrere Möglichkeiten für maximale Flüsse, allerdings können Kanten Kosten zugeschrieben werden. Welche Möglichkeit ist dann die Günstigste? Gesamtkosten = ∑ (fluss(e)∗kosten(e)) ∀ e ∈ E 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 22 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Erweiterung des Residualnetzwerkes mit Kosten q 2 / 3 / 15 s 1 / 15 q s 2 / ­15 Fluss / Kantenkapazität / Kosten Restkapazität / Kosten Kapazität für den Rückfluss / Kosten Ein maximaler Fluss hat minimale Kosten genau dann, wenn im Restnetzwerk keine negativen (Kosten)Zyklen existieren! 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 23 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Algorithmus­Idee: Suche einen maximalen Fluss. (a) Erhöhe den Fluss in den negativen Kostenzyklen so lange, (b) bis keiner mehr vorhanden ist. Zykleneliminierung (a) Ford­Fulkerson oder Preflow­Push finden maximalen Fluss (b) Bellman­Ford oder Floyd finden negative Zyklen 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 24 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Implementation maxflow(); /* berechne den maximalen Fluss */ network residual = get_maxflow_residual_network(); /* berechne Restnetzwerk */ while ((cycle = residual.find_negative_cycle()) != NULL){ residual.augment_along_cycle(); } 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 25 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Probleme Suche nach negativen Zyklen wird immer wieder von vorne begonnen. Es wird der zuerst gefundene Zyklus verwendet. Bessere Alternative: Netzwerk Simplex Algorithmus! Nachzulesen hier: http://www2.informatik.uni­erlangen.de/Lehre/WS200506/Graphen/08­NetworkFlowsII.pdf 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 26 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Es geht auch ohne vorherige Berechnung des maximalen Flusses: Füge Dummykante zwischen Quelle und Senke ins Netzwerk ein Sei Fluss und Kapazität dieser Kante höher als der maximale Fluss z.B. größer als die Kapazität der von q ausgehenden Kanten Seien die Kosten dieser Kante höher als jeder andere Pfad im Netzwerk z.B. V∗maxcost Der Algorithmus nimmt so viel Fluss wie möglich aus der Dummykante Der endgültige Fluss (ohne Dummykante) ist ein maximaler Fluss mit minimalen Kosten! Gesamtlaufzeit: O(V³KM) M = maximale Kapazität, K = maximale Kosten, V = Anzahl der Knoten 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 27 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Beispiel – Folie 1 q q 0/3/1 0/3/3 3/1 3/3 7/7/100 0/2/1 0/2/1 0/1/4 0/2/2 7/­100 2/1 0/2/2 2/1 1/4 2/2 0/2/1 2/2 2/1 s s Beschriftung: Fluss / Kapazität / Kosten Residualnetzwerk Kapazität / Kosten 31.05.2006 Dummykante hat Fluss 7 Fluss im Netzwerk = 0 Kosten = 700 Seminar "Hallo Welt!" für Fortgeschrittene 28 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Beispiel – Folie 2 q q 3/1 3/3 1/1 3/3 2/­1 7/­100 2/1 2/2 2/1 1/4 2/2 5/­100 2/1 2/1 2/100 2/­2 2/1 1/4 2/2 2/­1 s s Negativer Kostenzyklus Residualnetzwerk Kapazität / Kosten 31.05.2006 Dummykante hat Fluss 5 Fluss im Netzwerk = 2 Kosten = 508 Seminar "Hallo Welt!" für Fortgeschrittene 29 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Beispiel – Folie 3 q q 1/1 3/3 2/­1 2/­1 2/­3 5/­100 2/1 2/100 1/4 2/2 3/­100 2/­2 2/1 2/­1 1/1 1/3 2/­1 4/100 2/­2 2/1 1/4 2/­2 2/­1 s s Negativer Kostenzyklus Residualnetzwerk Kapazität / Kosten 31.05.2006 Dummykante hat Fluss 3 Fluss im Netzwerk = 4 Kosten = 320 Seminar "Hallo Welt!" für Fortgeschrittene 30 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Beispiel – Zusammenfassung Beschriftung: Fluss / Kapazität / Kosten q q 0/3/1 0/3/3 0/2/1 0/2/1 0/1/4 0/2/2 0/2/1 s Dummykante hat Fluss 7 Fluss im Netzwerk = 0 Kosten = 700 31.05.2006 2/3/1 2/3/3 7/7/100 q 2/3/1 2/3/3 3/7/100 0/2/2 2/2/1 0/2/1 0/1/4 2/2/2 2/2/2 2/2/1 s Dummykante hat Fluss 3 Fluss im Netzwerk = 4 Kosten = 320 Seminar "Hallo Welt!" für Fortgeschrittene 2/2/1 0/2/1 0/1/4 2/2/2 2/2/2 2/2/1 s Dummykante entfernt Fluss im Netzwerk = 4 Kosten = 20 31 Zwischenstand Motivation / Einführung Algorithmen für maximalen Fluss Ford­Fulkerson Preflow­Push Maximaler Fluss bei minimalen Kosten Minimaler Schnitt Max­Flow Min­Cut Bipartite Graphen und weitere Reduzierungen Zusammenfassung 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 32 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Max­Flow Min­Cut Theorem Der maximale Fluss durch ein Netzwerk kann nicht größer sein als die Kapazität eines beliebigen (und somit auch des minimalen) Schnitts. Ein q­s­Schnitt ist ein Schnitt in einem q­s­Graphen, der die Quelle q in der einen Teilmenge, die Senke s in der anderen platziert. Ein minimaler q­s­Schnitt ist ein q­s­Schnitt, dessen Kanten die minimal mögliche Kapazität besitzen. Der Fluss durch einen q­s­Schnitt entspricht dem Fluss von der Quelle zur Senke. Der maximale Fluss durch einen q­s­Graphen entspricht der minimalen Kapazität aller q­s­Schnitte. 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 33 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Beispiel 1/3 1/3 2/2 2/2 2/2 1/1 q s 1/1 2/3 2/3 1/1 q s 1/1 2/3 1/1 2/3 1/1 4 6 Normaler Schnitt MaxFlow < Cut 31.05.2006 2/2 Seminar "Hallo Welt!" für Fortgeschrittene Minimaler Schnitt MaxFlow = Cut 34 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Wie findet man einen minimalen Schnitt eines Netzwerkes? Berechne den maximalen Fluss. (Ford­Fulkerson oder Preflow­Push) Ziehe einen Schnitt durch alle Kanten, deren Fluss maximal ist. Markiere dazu immer die erste Kante mit Fluss = Kapazität auf einem q­s­Pfad. 1/3 2/2 2/2 1/1 q s 1/1 2/3 2/3 1/1 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 35 Min­Cut Algorithmusidee berechne maxFlow mit folgender Erweiterung markiere auf jedem augmentierten Pfad p die früheste Kante e mit Fluss gleich Kapazität lege einen Schnitt t durch alle markierten Kanten return t 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 36 Zwischenstand Motivation / Einführung Algorithmen für maximalen Fluss Ford­Fulkerson Preflow­Push Maximaler Fluss bei minimalen Kosten Minimaler Schnitt Max­Flow Min­Cut Bipartite Graphen und weitere Reduzierungen Zusammenfassung 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 37 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Ein einfacher Graph G = (V,E) heißt in der Graphentheorie bipartit, falls sich seine Knoten in zwei disjunkte Teilmengen A und B aufteilen lassen, so dass zwischen den Knoten innerhalb beider Teilmengen keine Kanten verlaufen. Das heißt, für eine Kante (u,v) ∈ E gilt entweder u ∈ A und v ∈ B oder umgekehrt. Mädchen (A) Die Menge {A,B} bezeichnet man dann als Bipartition des Graphen G. Jungen (B) 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 38 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Der Graph G heißt vollständig bipartit, falls eine Bipartition {A,B} existiert, für die für jedes Paar {a,b} mit a ∈ A und b ∈ B die Kante (a,b) zu E gehört (d.h. jeder Knoten aus A ist mit jedem Knoten aus B verbunden, wie in der Graphik unten zu sehen). Einen solchen Graphen bezeichnet man auch als Km,n, wobei m und n die Anzahl der Knoten von A bzw. B sind. Beispiel eines K4,3­Graphen Mädchen (A) Jungen (B) 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 39 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Problemstellung: Maximales Matching Maximale Anzahl von paarweise nicht­ benachbarten Kanten in einem bipartiten Graphen q Mädchen (A) Berechnung Hinzufügen einer globalen Quelle q und einer globalen Senke s Zuweisung der Kapazität 1 an alle Kanten Berechnung des maximalen Flusses Jungen (B) Durchflossene Kanten sind Teil des Matching. s 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 40 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Anwendung des MaxFlow auf 3/4 Graphen mit Knotenkapazitätsbeschränkung 1 2 Kapazität Kosten 3/4 4 2 1 4/1 2/5 5/5 3 3/2 Knotenkapazität 3 0/4 0/2 2 2 4/1 2/5 3 3/2 1/4 1/4 4 4 3/4 5 6 4 3 0/4 2/2 Lösung: Hinzufügen von Kanten mit Kapazität = Knotenkapazität 31.05.2006 5/5 Seminar "Hallo Welt!" für Fortgeschrittene 5 4 3/4 5 6 0/3 2/2 41 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Anwendung des MaxFlow auf Graphen mit maximaler Quellen­ und Senkenkapazität q 0/4 Quellenkapazität Kapazität 3/4 Kosten 2 1 4 4/1 2/5 3/4 5/5 2 3 3/2 1/4 4 3/4 3 3 4/1 2/5 1/4 4 3/4 2/2 5 6 Seminar "Hallo Welt!" für Fortgeschrittene 2/2 0/3 Senkenkapazität Lösung: Hinzufügen von Quelle / Senke mit Kapazität = Knotenkapazität 31.05.2006 5/5 3/2 5 6 1 s 42 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Anwendung des MaxFlow auf q Graphen mit mehreren Quellen und/oder Senken 4 4 2/2 1/3 3/2 Quellenkapazität 2/2 Kapazität 4/1 1/4 1/4 1/3 3/2 2/6 6/6 7 5/5 3/4 4/1 1/4 1/4 2/6 3/4 Kosten 4/3 3 4 Senkenkapazität Lösung: Hinzufügen von globaler Quelle / Senke 31.05.2006 0/6 0/4 6 3/4 5/5 0/4 6/6 0/7 Seminar "Hallo Welt!" für Fortgeschrittene 4/3 3/4 0/3 s 0/4 43 Zwischenstand Motivation / Einführung Algorithmen für maximalen Fluss Ford­Fulkerson Preflow­Push Maximaler Fluss bei minimalen Kosten Minimaler Schnitt Max­Flow Min­Cut Bipartite Graphen und weitere Reduzierungen Zusammenfassung 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 44 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Mit Hilfe von Ford­Fulkerson oder Preflow­Push kann man den maximalen Fluss in einem einfachen Netzwerk bestimmen. Durch Elimination von negativen Kostenzyklen kann man die Kosten minimieren. Sobald ein maximaler Fluss bekannt ist, findet man relativ leicht einen minimalen Schnitt eines Netzwerkes. Netzwerke mit Knotenkapazitätsbeschränkungen, mit mehreren Quellen / Zielen und bipartite Graphen kann man auf einfache Netzwerke reduzieren. 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 45 Motivation / Einführung Algorithmen für maximalen Fluss Maximaler Fluss mit minimalen Kosten Minimaler Schnitt Bipartite Graphen und weitere Reduzierungen Zusammenfassung Noch offene Fragen? 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 46 Quellen Seminarvortrag “Flüsse, Schnitte, bipartite Abbildungen” 2004, Tobias Limmer Seminarvortrag “Flüsse, Schnitte, bipartite Abbildungen” 2005, Tarek Bezold Vorlesungsfolien “Algorithmen auf Graphen” WS 2005/2006, Ingrid Fischer & Thorsten Meinl Robert Sedgewick: Algorithms in Java, 3rd Edition http://de.wikipedia.org/wiki/Bipartit http://de.wikipedia.org/wiki/Fl%C3%BCsse_und_Schnitte_in_Netzwerken Ford­Fulkerson Implementation vollständig: http://www.cs.sunysb.edu/~skiena/392/programs/netflow.c 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 47 Weiterführende Links Nützliches Applet zum Veranschaulichen und Herumspielen http://links.math.rpi.edu/applets/appindex/graphtheory.html Auszüge aus verschiedenen Büchern u.a. zum Thema Graphentheorie http://oopweb.com/Algorithms/Files/Algorithms.html Vorlesungsfolien “Algorithmen auf Graphen” WS 2005/2006, Ingrid Fischer & Thorsten Meinl http://www2.informatik.uni­erlangen.de/Lehre/WS200506/Graphen/ Verschiedene Links zu Implementationen von Graphalgorithmen http://www2.toki.or.id/book/AlgDesignManual/BOOK/BOOK4/NODE167.HTM 31.05.2006 Seminar "Hallo Welt!" für Fortgeschrittene 48