Juniorprof. Dr. Henning Meyerhenke 1 Henning Meyerhenke: KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu
Vorlesung 3 Programm des Tages: Matchings in bipartiten Graphen Berechnen größtmöglicher Matchings Berechnen von Matchings mit maximalem Gewicht Zusätzliche Literatur: D. West: Introduction to Graph Theory. G. Chartrand, O.R. Oellermann: Applied and algorithmic graph theory. 2 Henning Meyerhenke:
Inhalt Matchings in Graphen Matchings in bipartiten Graphen Berechnung eines größtmöglichen Matchings Berechnung eines Matchings mit maximalem Gewicht 3 Henning Meyerhenke:
Wiederholung Halls Theorem, Heiratsproblem Satz von König und Egerváry Algorithmus zur Berechnung größtmöglicher Matchings Start an einem sog. Wurzelknoten Alternierenden Baum mit BFS erstellen Wenn augmentierender Pfad gefunden, dann Matching vergrößern 4 Henning Meyerhenke:
Algorithmus Algorithm 1 Berechnung eines größtmöglichen Matchings 1: function MAXIMUMMATCHING(bipartiter Graph G = (V 1 V 2, E), initiales Matching M 1 ) Sei V 1 V 2 2: M = M 1 3: while unsat. Knoten v V 1 existiert, der noch nicht Wurzel war do 4: Markiere v als aktuelle Wurzel 5: P = AUGMENTINGPATHINTREE(G, M, v) 6: if P > 0 then 7: Augmentiere M entlang P 8: end if 9: end while 10: return M M ist größtmögliches Matching 5 Henning Meyerhenke:
Hilfsfunktion (1) Algorithm 2 M-augmentierenden Pfad mit einem alternierenden Baum berechnen (Teil 1) 1: function AUGMENTINGPATHINTREE(bip. Graph G = (V 1 V 2, E), Matching M, Wurzelknoten v) 2: tree(v) = true; Nur v ist initial im Baum 3: for all u V 1 V 2, u = v do 4: tree(u) = false 5: end for 6: Q = {v}; Queue Q für BFS 7: while Q > 0 do BFS-ähnliche Suche 8: x = DEQUEUE(Q) 9: Fortsetzung auf nächster Folie =0 6 Henning Meyerhenke:
Hilfsfunktion (2) Algorithm 3 M-augmentierenden Pfad mit einem alternierenden Baum berechnen (Teil 2) 10: for all y N(x) do 11: if not tree(y) then 12: if z mit (y, z) M then 13: tree(y) = tree(z) = true 14: ENQUEUE(Q, z) 15: parent(y) = x; parent(z) =y; 16: else 17: return M-augm. Pfad P von v bis y 18: end if 19: end if 20: end for 21: end while 22: return 7 Henning Meyerhenke:
Analyse des Algorithmus Zeitkomplexität des gesamten Algorithmus Beispiel: Siehe Tafel. Erinnerung: V 2 V 1 8 Henning Meyerhenke:
Analyse des Algorithmus Zeitkomplexität des gesamten Algorithmus Beispiel: Siehe Tafel. Erinnerung: V 2 V 1 Konstruktion eines alternierenden Baumes: O( E ). Grund: BFS betrachtet jede Kante höchstens einmal. Jeder augmentierende Pfad hat höchstens E Kanten Konstruktion des Pfads in Zeit O( E ) 8 Henning Meyerhenke:
Analyse des Algorithmus Zeitkomplexität des gesamten Algorithmus Beispiel: Siehe Tafel. Erinnerung: V 2 V 1 Konstruktion eines alternierenden Baumes: O( E ). Grund: BFS betrachtet jede Kante höchstens einmal. Jeder augmentierende Pfad hat höchstens E Kanten Konstruktion des Pfads in Zeit O( E ) Jeder Knoten ist höchstens einmal Wurzel eines alternierenden Baumes: O( V E ) Gesamtlaufzeit 8 Henning Meyerhenke:
Korrektheit des Algorithmus Siehe Übung. 9 Henning Meyerhenke:
Finden augmentierender Pfade Theorem Sei G = (V 1 V 2, E) ein bipartiter Graph und sei M ein Matching in G. Falls es einen M-augmentierenden Pfad gibt, der ein Matching M mit M > M erzeugt, und es einen Knoten u als Endknoten eines M -augmentierenden Pfades gibt, dann gibt es auch einen M-augmentierenden Pfad mit u als Endknoten. Beweis. Siehe Tafel bzw. Übung. 10 Henning Meyerhenke:
Finden augmentierender Pfade Beweisschritte Kontraposition, Annahme des Gegenteils (Widerspruchsbeweis) M 1 sei durch Augmentieren von M entlang Q entstanden Sei P ein M 1 -augmentierender Pfad P enthält Kante, die zu M 1 M gehört (warum?) 11 Henning Meyerhenke:
Finden augmentierender Pfade Beweisschritte Kontraposition, Annahme des Gegenteils (Widerspruchsbeweis) M 1 sei durch Augmentieren von M entlang Q entstanden Sei P ein M 1 -augmentierender Pfad P enthält Kante, die zu M 1 M gehört (warum?) Betrachte Kreuzung von P und Q Versuche zu zeigen, dass jeweils ein Teil von P und Q einen M-augmentierenden Pfad mit u als Endknoten bilden 11 Henning Meyerhenke:
Inhalt Matchings in Graphen Matchings in bipartiten Graphen Berechnung eines größtmöglichen Matchings Berechnung eines Matchings mit maximalem Gewicht 12 Henning Meyerhenke:
Szenario 1 Verbesserung der Singlebörse Kunden und Kundinnen dürfen angeben, wie gern sie Ihre Favoriten haben. Diese Priorität steht als Gewicht an den Kanten. 13 Henning Meyerhenke:
Szenario 1 Verbesserung der Singlebörse Kunden und Kundinnen dürfen angeben, wie gern sie Ihre Favoriten haben. Diese Priorität steht als Gewicht an den Kanten. Aufgabe: Finde gute Zuordnung, nämlich eine mit höchstem Gesamtgewicht! 13 Henning Meyerhenke:
Szenario 2 Jobs und Arbeiter Eine Fabrik hat n 1 Maschinen und n 2 Arbeiter. Jeder Arbeiter hat eine bestimmte Produktivität an einer Maschine. Die Produktivität ist 0, wenn der Arbeiter die Maschine nicht bedienen kann. 14 Henning Meyerhenke:
Szenario 2 Jobs und Arbeiter Eine Fabrik hat n 1 Maschinen und n 2 Arbeiter. Jeder Arbeiter hat eine bestimmte Produktivität an einer Maschine. Die Produktivität ist 0, wenn der Arbeiter die Maschine nicht bedienen kann. Diese Produktivität steht als Gewicht an den Kanten. Aufgabe: Finde Zuordnung mit höchster Gesamtproduktivität! 14 Henning Meyerhenke:
Matchings mit maximalem Gewicht in bipartiten Graphen Definition Das Gewicht eines Matchings M ist definiert als: w(m) = w(e) e M Definition Sei M ein Matching in einem Graphen G. Wenn w(m) w(m ) für alle Matchings M in G gilt, dann ist M ein Matching maximalen Gewichts in G. Englisch: Maximum weight matching Abgekürzt: MWM 15 Henning Meyerhenke:
Aufgabe und Transformation der Eingabe Aufgabe: Optimale Zuweisung (optimal assignment) Gegeben: Gewichteter bipartiter Graph G = (V 1 V 2, E) Gesucht: MWM in G Transformation: G = (V 1 V 2, E) wird in vollständigen bipartiten Graphen H = (U 1 U 2, E ) transformiert U 1 = U 2 = max{ V 1, V 2 }, V 1 U 1, V 2 U 2 Konstruktion von E = U 1 U 2 : Für x U 1 und y U 2 gilt: { w w H (x, y) = G (x, y), falls {x, y} E 0 sonst 16 Henning Meyerhenke:
Eigenschaften der transformierten Eingabe Beobachtung Wir dürfen annehmen, dass ein Matching M perfekt im Graphen H ist, falls es maximales Gewicht hat. Einige Kanten von M können dabei das Gewicht 0 haben. Beobachtung Ist M ein MWM in H, so ist M E(G) ein MWM in G. 17 Henning Meyerhenke:
Eigenschaften der transformierten Eingabe Beobachtung Wir dürfen annehmen, dass ein Matching M perfekt im Graphen H ist, falls es maximales Gewicht hat. Einige Kanten von M können dabei das Gewicht 0 haben. Beobachtung Ist M ein MWM in H, so ist M E(G) ein MWM in G. Corollary In der Folge genügt es, vollständige bipartite Graphen zu betrachten. Beobachtung Alle U 1! perfekten Matchings zu produzieren und daraus eins mit höchstem Gewicht zu wählen, wäre ineffizient. 17 Henning Meyerhenke:
Hilfsmittel: Knotenmarkierungen Definition Sei G = (V 1 V 2, E) ein gewichteter bipartiter Graph mit Gewichtsfunktion w, wobei V 1 = V 2. Eine Knotenmarkierung l ist eine reellwertige Funktion über der Knotenmenge V 1 V 2. l(v) wird Markierung des Knotens v genannt. Definition Eine Knotenmarkierung ist genau dann zulässig, wenn für jede Kante (u, v) E gilt. l(u) + l(v) w(u, v) 18 Henning Meyerhenke:
Zulässige Knotenmarkierungen Beobachtung Jeder gewichtete vollständige bipartite Graph hat eine zulässige Knotenmarkierung l mit l(v) = max{w(v, u) u V 2 } für alle v V 1 und l(u) = 0 für alle u V 2 Beispiel: Siehe Tafel. 19 Henning Meyerhenke:
Kantenteilgraph und zulässige Knotenmarkierungen Definition Ein Kantenteilgraph von G = (V, E) ist ein Graph H = (V, E ) mit E E. Sei der durch l induzierte ungewichtete Kantenteilgraph H l von G definiert als H l = (V 1 V 2, E l ) mit E l = {(u, v) l(u) + l(v) = w(u, v)}. Theorem Sei l eine zulässige Knotenmarkierung von G = (V 1 V 2, E). Falls der Graph H l ein perfektes Matching M enthält, dann ist M ein MWM (maximum weight matching) in G. 20 Henning Meyerhenke:
Algorithmus-Idee (1) Mit zulässiger Knotenmarkierung starten. Den Kantenteilgraphen H l konstruieren. Unseren bekannten Algorithmus MAXIMUMMATCHING auf H l anwenden. Wird ein perfektes Matching in H l gefunden, gibt es dazu ein MWM in G. Andernfalls liefert MAXIMUMMATCHING ein nicht-perfektes Matching M. 21 Henning Meyerhenke:
Algorithmus-Idee (2) Nicht-perfektes Matching M bearbeiten M -alternierenden Baum T konstruieren, dessen Wurzel ein ungematchter Knoten x ist (mit AUGMENTINGPATHINTREE). Baum T lässt sich nicht erweitern und hat keinen M -augmentierenden Pfad. 22 Henning Meyerhenke:
Algorithmus-Idee (2) Nicht-perfektes Matching M bearbeiten M -alternierenden Baum T konstruieren, dessen Wurzel ein ungematchter Knoten x ist (mit AUGMENTINGPATHINTREE). Baum T lässt sich nicht erweitern und hat keinen M -augmentierenden Pfad. Knotenmarkierung (KM) l verändern: Neue zulässige KM l erstellen. l so anpassen, dass M und T in H l enthalten sind. Insbesondere gilt: H l enthält mindestens eine neue Kante von V 1 V (T ) nach V 2 V (T ). 22 Henning Meyerhenke:
Algorithmus-Idee (2) Nicht-perfektes Matching M bearbeiten M -alternierenden Baum T konstruieren, dessen Wurzel ein ungematchter Knoten x ist (mit AUGMENTINGPATHINTREE). Baum T lässt sich nicht erweitern und hat keinen M -augmentierenden Pfad. Knotenmarkierung (KM) l verändern: Neue zulässige KM l erstellen. l so anpassen, dass M und T in H l enthalten sind. Insbesondere gilt: H l enthält mindestens eine neue Kante von V 1 V (T ) nach V 2 V (T ). Dann: Neuen M -alternierenden Baum in H l mit Wurzel x erstellen. Wiederholen, bis augmentierender Pfad mit x als Endknoten gefunden. 22 Henning Meyerhenke:
Der Algorithmus von Kuhn und Munkres Algorithm 4 Berechnung eines Matchings mit maximalem Gewicht 1: function MAXIMUMWEIGHTMATCHING(Vollst. bip. Graph G = (V 1 V 2, E), Gew.fkt. w) berechnet MWM M für G mit V 1 = V 2 2: for all v V 1 do l(v) = max u V2 w(v, u) 3: end for 4: for all u V 2 do l(u) = 0 5: end for Inititale Knotenmarkierung fertig 6: Sei H l der von l induzierte Kantenteilgraph mit Kantenmenge E l 7: M = MAXIMUMMATCHING(H l, ) 8: while Knoten x V 1, der in M nicht saturiert ist do 9: [H l, l, M] = HANDLEUNSATURATED(H l, l, M, x) 10: end while 23 Henning Meyerhenke:
Nicht-perfektes Matching behandeln Algorithm 5 Unterfunktion zur Behandlung unsaturierter Knoten 1: function HANDLEUNSATURATED(Spanngraph H l, KM l, Matching M, Wurzelknoten x) 2: repeat 3: [P, T] = FINDPATHINTREE(H l, M, x) 4: if P > 0 then Augmentiere M entlang P 5: else 6: m l = min{l(v) + l(u) w(u, v) v V 1 T, u V 2 \ T } 7: l(v) = l(v) m l für alle v V 1 T 8: l(u) = l(u) + m l für alle u V 2 T 9: Konstruiere neues H l anhand von l 10: end if 11: until P > 0 12: return [H l, l, M] 24 Henning Meyerhenke: