Kombinatorische Optimierung Juniorprof. Dr. Henning Meyerhenke Institut für Theoretische Informatik – Paralleles Rechnen 1 KIT –Henning Universität desMeyerhenke: Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft Kombinatorische Optimierung Institut für Theoretische Informatik www.kit.edu Paralleles Rechnen 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: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Inhalt Matchings in Graphen Matchings in bipartiten Graphen Berechnung eines größtmöglichen Matchings Berechnung eines Matchings mit maximalem Gewicht 3 Henning Meyerhenke: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen 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: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Algorithmus Algorithm 1 Berechnung eines größtmöglichen Matchings 1: function M AXIMUM M ATCHING (bipartiter Graph G = (V1 ∪ V2 , E ), initiales Matching M1 ) . Sei |V1 | ≤ |V2 | 2: M = M1 3: while unsat. Knoten v ∈ V1 existiert, der noch nicht Wurzel war do 4: Markiere v als aktuelle Wurzel 5: P = AUGMENTING PATH I N T REE(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: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Hilfsfunktion (1) Algorithm 2 M-augmentierenden Pfad mit einem alternierenden Baum berechnen (Teil 1) 1: function AUGMENTING PATH I N T REE(bip. Graph G = (V1 ∪ V2 , E ), Matching M, Wurzelknoten v ) 2: tree(v) = true; . Nur v ist initial im Baum 3: for all u ∈ V1 ∪ V2 , u 6= 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 = D EQUEUE(Q) 9: . Fortsetzung auf nächster Folie =0 6 Henning Meyerhenke: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen 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: E NQUEUE(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: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Analyse des Algorithmus Zeitkomplexität des gesamten Algorithmus Beispiel: Siehe Tafel. Erinnerung: |V2 | ≥ |V1 | 8 Henning Meyerhenke: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Analyse des Algorithmus Zeitkomplexität des gesamten Algorithmus Beispiel: Siehe Tafel. Erinnerung: |V2 | ≥ |V1 | 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: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Analyse des Algorithmus Zeitkomplexität des gesamten Algorithmus Beispiel: Siehe Tafel. Erinnerung: |V2 | ≥ |V1 | 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: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Korrektheit des Algorithmus Siehe Übung. 9 Henning Meyerhenke: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Finden augmentierender Pfade Theorem Sei G = (V1 ∪ V2 , E ) ein bipartiter Graph und sei M ein Matching in G. Falls es einen M-augmentierenden Pfad gibt, der ein Matching M 0 mit |M 0 | > |M | erzeugt, und es einen Knoten u als Endknoten eines M 0 -augmentierenden Pfades gibt, dann gibt es auch einen M-augmentierenden Pfad mit u als Endknoten. Beweis. Siehe Tafel bzw. Übung. 10 Henning Meyerhenke: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Finden augmentierender Pfade Beweisschritte Kontraposition, Annahme des Gegenteils (Widerspruchsbeweis) M1 sei durch Augmentieren von M entlang Q entstanden Sei P ein M1 -augmentierender Pfad P enthält Kante, die zu M1 − M gehört (warum?) 11 Henning Meyerhenke: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Finden augmentierender Pfade Beweisschritte Kontraposition, Annahme des Gegenteils (Widerspruchsbeweis) M1 sei durch Augmentieren von M entlang Q entstanden Sei P ein M1 -augmentierender Pfad P enthält Kante, die zu M1 − 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: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Inhalt Matchings in Graphen Matchings in bipartiten Graphen Berechnung eines größtmöglichen Matchings Berechnung eines Matchings mit maximalem Gewicht 12 Henning Meyerhenke: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen 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: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen 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: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Szenario 2 Jobs und Arbeiter Eine Fabrik hat n1 Maschinen und n2 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: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Szenario 2 Jobs und Arbeiter Eine Fabrik hat n1 Maschinen und n2 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: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen 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 0 ) für alle Matchings M 0 in G gilt, dann ist M ein Matching maximalen Gewichts in G. Englisch: Maximum weight matching Abgekürzt: MWM 15 Henning Meyerhenke: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Aufgabe und Transformation der Eingabe Aufgabe: Optimale Zuweisung (optimal assignment) Gegeben: Gewichteter bipartiter Graph G = (V1 ∪ V2 , E ) Gesucht: MWM in G Transformation: G = (V1 ∪ V2 , E ) wird in vollständigen bipartiten Graphen H = (U1 ∪ U2 , E 0 ) transformiert |U1 | = |U2 | = max{|V1 |, |V2 |}, V1 ⊆ U1 , V2 ⊆ U2 Konstruktion von E 0 = U1 × U2 : Für x ∈ U1 und y ∈ U2 gilt: ( wG (x , y ), falls {x , y } ∈ E wH (x , y ) = 0 sonst 16 Henning Meyerhenke: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen 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: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen 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 |U1 |! perfekten Matchings zu produzieren und daraus eins mit höchstem Gewicht zu wählen, wäre ineffizient. 17 Henning Meyerhenke: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Hilfsmittel: Knotenmarkierungen Definition Sei G = (V1 ∪ V2 , E ) ein gewichteter bipartiter Graph mit Gewichtsfunktion w, wobei |V1 | = |V2 |. Eine Knotenmarkierung l ist eine reellwertige Funktion über der Knotenmenge V1 ∪ V2 . l (v ) wird Markierung des Knotens v genannt. Definition Eine Knotenmarkierung ist genau dann zulässig, wenn l (u ) + l (v ) ≥ w (u , v ) für jede Kante (u , v ) ∈ E gilt. 18 Henning Meyerhenke: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Zulässige Knotenmarkierungen Beobachtung Jeder gewichtete vollständige bipartite Graph hat eine zulässige Knotenmarkierung l mit l (v ) = max{w (v , u ) | u ∈ V2 } für alle v ∈ V1 und l (u ) = 0 für alle u ∈ V2 Beispiel: Siehe Tafel. 19 Henning Meyerhenke: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Kantenteilgraph und zulässige Knotenmarkierungen Definition Ein Kantenteilgraph von G = (V , E ) ist ein Graph H = (V , E 0 ) mit E 0 ⊆ E. Sei der durch l induzierte ungewichtete Kantenteilgraph Hl von G definiert als Hl = (V1 ∪ V2 , El ) mit El = {(u , v ) | l (u ) + l (v ) = w (u , v )}. Theorem Sei l eine zulässige Knotenmarkierung von G = (V1 ∪ V2 , E ). Falls der Graph Hl ein perfektes Matching M 0 enthält, dann ist M 0 ein MWM (maximum weight matching) in G. 20 Henning Meyerhenke: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Algorithmus-Idee (1) Mit zulässiger Knotenmarkierung starten. Den Kantenteilgraphen Hl konstruieren. Unseren bekannten Algorithmus M AXIMUM M ATCHING auf Hl anwenden. Wird ein perfektes Matching in Hl gefunden, gibt es dazu ein MWM in G. Andernfalls liefert M AXIMUM M ATCHING ein nicht-perfektes Matching M ∗. 21 Henning Meyerhenke: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Algorithmus-Idee (2) Nicht-perfektes Matching M ∗ bearbeiten M ∗ -alternierenden Baum T konstruieren, dessen Wurzel ein ungematchter Knoten x ist (mit AUGMENTING PATH I N T REE). Baum T lässt sich nicht erweitern und hat keinen M ∗ -augmentierenden Pfad. 22 Henning Meyerhenke: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Algorithmus-Idee (2) Nicht-perfektes Matching M ∗ bearbeiten M ∗ -alternierenden Baum T konstruieren, dessen Wurzel ein ungematchter Knoten x ist (mit AUGMENTING PATH I N T REE). Baum T lässt sich nicht erweitern und hat keinen M ∗ -augmentierenden Pfad. Knotenmarkierung (KM) l verändern: Neue zulässige KM l 0 erstellen. l 0 so anpassen, dass M ∗ und T in Hl 0 enthalten sind. Insbesondere gilt: Hl 0 enthält mindestens eine neue Kante von V1 ∩ V (T ) nach V2 − V (T ). 22 Henning Meyerhenke: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Algorithmus-Idee (2) Nicht-perfektes Matching M ∗ bearbeiten M ∗ -alternierenden Baum T konstruieren, dessen Wurzel ein ungematchter Knoten x ist (mit AUGMENTING PATH I N T REE). Baum T lässt sich nicht erweitern und hat keinen M ∗ -augmentierenden Pfad. Knotenmarkierung (KM) l verändern: Neue zulässige KM l 0 erstellen. l 0 so anpassen, dass M ∗ und T in Hl 0 enthalten sind. Insbesondere gilt: Hl 0 enthält mindestens eine neue Kante von V1 ∩ V (T ) nach V2 − V (T ). Dann: Neuen M ∗ -alternierenden Baum in Hl 0 mit Wurzel x erstellen. Wiederholen, bis augmentierender Pfad mit x als Endknoten gefunden. 22 Henning Meyerhenke: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Der Algorithmus von Kuhn und Munkres Algorithm 4 Berechnung eines Matchings mit maximalem Gewicht 1: function M AXIMUM W EIGHT M ATCHING (Vollst. bip. Graph G = (V1 ∪ V2 , E ), Gew.fkt. w) . berechnet MWM M für G mit |V1 | = |V2 | 2: for all v ∈ V1 do l (v ) = maxu ∈V2 w (v , u ) 3: end for 4: for all u ∈ V2 do l (u ) = 0 5: end for . Inititale Knotenmarkierung fertig 6: Sei Hl der von l induzierte Kantenteilgraph mit Kantenmenge El 7: M = M AXIMUM M ATCHING(Hl , ∅) 8: while ∃ Knoten x ∈ V1 , der in M nicht saturiert ist do 9: [Hl , l, M] = H ANDLE U NSATURATED(Hl , l, M, x) 10: end while 23 Henning Meyerhenke: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen Nicht-perfektes Matching behandeln Algorithm 5 Unterfunktion zur Behandlung unsaturierter Knoten 1: function H ANDLE U NSATURATED(Spanngraph Hl , KM l, Matching M, Wurzelknoten x) 2: repeat 3: [P, T] = F IND PATH I N T REE(Hl , M, x) 4: if |P | > 0 then Augmentiere M entlang P 5: else 6: ml = min{l (v ) + l (u ) − w (u , v ) | v ∈ V1 ∩ T , u ∈ V2 \ T } 7: l (v ) = l (v ) − ml für alle v ∈ V1 ∩ T 8: l (u ) = l (u ) + ml für alle u ∈ V2 ∩ T 9: Konstruiere neues Hl anhand von l 10: end if 11: until |P | > 0 12: return [Hl , l, M] 24 Henning Meyerhenke: Kombinatorische Optimierung Institut für Theoretische Informatik Paralleles Rechnen