Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 23.05.2017 13:41 Inhaltsverzeichnis Wofür . . . . . . . . . . . . . . . . . . . . . . . . . Das Königsberger Brückenproblem . . . . . . . . . Gerichteter Graph . . . . . . . . . . . . . . . . . . Speicherung eines Graphen in einer Adjazenzmatrix Beispiel: Graph als Adjazenzmatrix . . . . . . . . . Speicherung in Adjazenzlisten . . . . . . . . . . . . Doppelt verkettete Pfeilliste . . . . . . . . . . . . . Weitere Definitionen . . . . . . . . . . . . . . . . . Weitere Definitionen (2) . . . . . . . . . . . . . . . Wälder und Bäume . . . . . . . . . . . . . . . . . . Ungerichtete Graphen . . . . . . . . . . . . . . . . Durchlaufen von Graphen . . . . . . . . . . . . . . Gerüst eines Knotenbesuchsalgorithmus . . . . . . Verfeinerung des Knotenbesuchsalgorithmus . . . . Einfache Zusammenhangskomponenten . . . . . . . Tiefen- und Breitensuche . . . . . . . . . . . . . . . Tiefen- und Breitensuche (2) . . . . . . . . . . . . . Kürzeste Wege . . . . . . . . . . . . . . . . . . . . Definition bewerteter Graph und Kostenfunktion . Definition Entfernung . . . . . . . . . . . . . . . . Definition Bewerteter Digraph . . . . . . . . . . . . Definition Distanzgraph . . . . . . . . . . . . . . . Kürzeste Wege in Distanzgraphen . . . . . . . . . . Optimalitätsprinzip . . . . . . . . . . . . . . . . . . 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 3 4 4 5 5 6 6 6 7 7 7 8 8 8 8 8 9 9 10 10 10 10 Algorithmen und Datenstrukturen II: Graphenalgorithmen Kürzeste Wege durch Hinzunahme einzelner Kanten Idee zur Realisierung . . . . . . . . . . . . . . . . . Idee zur Realisierung (2) . . . . . . . . . . . . . . . Dijkstras Algorithmus . . . . . . . . . . . . . . . . Aufgabe . . . . . . . . . . . . . . . . . . . . . . . . Kürzeste Wege in beliebig bewerteten Graphen . . Auswahlverfahren von Ford . . . . . . . . . . . . . Rand verschieben bei v . . . . . . . . . . . . . . . . Aufgabe . . . . . . . . . . . . . . . . . . . . . . . . Minimal spannende Bäume . . . . . . . . . . . . . Verfahren zur Lösung . . . . . . . . . . . . . . . . . Algorithmus-Gerüst . . . . . . . . . . . . . . . . . . Auswahlverfahren für die Kanten . . . . . . . . . . Definition Schnitt . . . . . . . . . . . . . . . . . . . Entscheidungsregeln . . . . . . . . . . . . . . . . . Algorithmus von Boruvka . . . . . . . . . . . . . . Algorithmus von Kruskal . . . . . . . . . . . . . . . Algorithmus von Jarník, Prim, Dijkstra . . . . . . . Aufgabe . . . . . . . . . . . . . . . . . . . . . . . . Prof. Dr. Oliver Braun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 11 11 12 12 13 13 14 14 14 15 15 15 16 16 16 16 17 17 Flüsse in Netzwerken Flüsse in Netzwerken . . . . . . . . . . . . . . . . . . Flüsse in Netzwerken (2) . . . . . . . . . . . . . . . . Fluss . . . . . . . . . . . . . . . . . . . . . . . . . . . Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . Algorithmen zur Berechnung des maximalen Flusses . Maximaler Fluss durch zunehmende Wege . . . . . . Abändern von Flüssen . . . . . . . . . . . . . . . . . Restgraph . . . . . . . . . . . . . . . . . . . . . . . . Suche des zunehmenden Weges . . . . . . . . . . . . Maximaler Fluss . . . . . . . . . . . . . . . . . . . . Algorithmus: Beliebig zunehmende Wege . . . . . . . Kürzeste zunehmende Wege . . . . . . . . . . . . . . Alle kürzesten zunehmenden Wegen . . . . . . . . . . Beispiel: Fluss- und Restgraph . . . . . . . . . . . . . Niveaugraph . . . . . . . . . . . . . . . . . . . . . . . Abänderung Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 17 18 18 18 19 19 19 20 20 21 21 21 21 22 22 23 . . . . . 23 23 23 24 24 25 Zuordnungsprobleme Zuordnungsprobleme . . . . . . . . . . . Zuordnungsproblem formalisiert . . . . . Maximale Zuordnung . . . . . . . . . . . Zuordnung mit maximaler Zufriedenheit Maximale gewichtete Zuordnung . . . . Letzte Änderung: 23.05.2017 13:41 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Algorithmen und Datenstrukturen II: Graphenalgorithmen Bipartiter Graph . . . . . . . . . . . . . . Beispiel . . . . . . . . . . . . . . . . . . . Fortsetzung Beispiel . . . . . . . . . . . . Zuordnungsproblem in bipartiten Graphen Beispiel als Flussgraph . . . . . . . . . . . Zunehmende Wege . . . . . . . . . . . . . Zurück zu G . . . . . . . . . . . . . . . . . Alternierender Weg . . . . . . . . . . . . . Vergrößernder alternierender Weg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Prof. Dr. Oliver Braun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 25 26 26 26 27 28 28 29 Wofür • wie komme ich am schnellsten von München nach Hamburg? • wie teile ich die Arbeitskräfte in meinem Team am Besten den Tätigkeiten zu für die sie am Besten geeignet sind? • wann kann der Hausbau frühestens fertig sein, wenn die einzelnen Arbeiten in der richtigen Reihenfolge ausgeführt werden? • wie besuche ich alle meine Kunden mit einer kürzest möglichen Rundreise? • … Das Königsberger Brückenproblem Über alle Brücken genau einmal laufen und am Ausgangspunkt ankommen. Unmöglich (1736, Euler). Gerichteter Graph • ein gerichteter Graph (engl: digraph) besteht aus – einer Menge V = {1, 2, ...., |V |} von Knoten (engl: vertices) und Letzte Änderung: 23.05.2017 13:41 3 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun – einer Menge von E ⊆ V × V von Pfeilen (engl: edges, arcs) • ein Paar (v, v ′ ) ∈ E heißt Pfeil von v nach v ′ – v heißt Anfangsknoten von (v, v ′ ) – v ′ heißt Endknoten von (v, v ′ ) – dann heißen v und v ′ auch adjazent • Frage: Kann es nach obiger Definition parallele Pfeile geben? Speicherung eines Graphen in einer Adjazenzmatrix Ein Graph G = (V, E) wird in einer Boole’schen |V | × |V |-Matrix AG = (aij ) mit 1 ≤ i ≤ |V |, 1 ≤ j ≤ |V | gespeichert, wobei { aij = 0 1 falls (i, j) ̸∈ E falls (i, j) ∈ E Beispiel: Graph als Adjazenzmatrix Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen Speicherung relativ ineffizient (quadratischer Aufwand) Letzte Änderung: 23.05.2017 13:41 4 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun Speicherung in Adjazenzlisten • für jeden Knoten eine lineare, verkettete Liste der von diesem ausgehenden Pfeile • Beispiel: Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen Doppelt verkettete Pfeilliste doubly connected arc list (DCAL) Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen Letzte Änderung: 23.05.2017 13:41 5 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun Weitere Definitionen • Eingangsgrad indeg(v) ist Anzahl der in v einmündenen Pfeile • Ausgangsgrad outdeg(v) ist Anzahl der von v ausgehenden Pfeile • Ein Digraph G′ = (V ′ , E ′ ) ist ein Teilgraph von G = (V, E), geschrieben G′ ⊆ G falls – V ′ ⊆ V und E ′ ⊆ E • für V ′ ⊆ V induziert V ′ den Teilgraphen (V ′ , E ∩ (V ′ × V ′ )), auch Untergraph genannt • ein Weg von v nach v ′ mit v, v ′ ∈ V ist der durch eine Folge von (v0 , v1 , ..., vk ) von Knoten mit v0 = v, vk = v ′ und (vi , vi+1 ) ∈ E für 0 ≤ i < k beschriebene Teilgraph (V ′ , E ′ ) – die Anzahl der Pfeile in E ′ sind die Länge des Weges – ein Weg heißt einfach, wenn kein Knoten mehrfach besucht wird Weitere Definitionen (2) • ein Zyklus ist ein Weg von v nach v • triviale Wege die aus einem Knoten und keinem Pfeil bestehen, werden nicht betrachtet • ein Digraph heißt zyklenfrei oder azyklisch wenn er keine Zyklen enthält • gibt es einen Weg von v nach v ′ , ist v ′ von v erreichbar Wälder und Bäume • ein Digraph heißt gerichteter Wald, wenn E zyklenfrei und jeder Knoten einen Eingangsgrad von höchstens 1 hat – jeder Knoten mit indeg(v) = 0 heißt Wurzel – ein gerichteter Wald mit genau einer Wurzel heißt gerichteter Baum (Wurzelbaum) • für einen Digraphen G = (V, E) ist ein gerichteter Wald W = (V, F ) mit F ⊆ E ein spannender Wald von G – falls W ein Baum ist, heißt er spannender Baum (spanning tree) Letzte Änderung: 23.05.2017 13:41 6 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun Ungerichtete Graphen • wenn wir erzwingen, dass zwischen zwei Knoten entweder kein Pfeil oder in jeder Richtung ein Pfeil ist, können wir die Richtung weglassen • ein solcher Graph G = (V, E) für den gilt (v, v ′ ) ∈ E ⇔ (v ′ , v) ∈ E heißt ungerichteter Graph oder einfach Graph • ein Paar ((v, v ′ ), (v ′ , v)) heißt Kante • der Grad deg(v) ist dann gleich indeg(v) und auch outdeg(v) • ein ungerichteter Graph heißt zyklenfrei oder azyklisch, falls er keinen einfachen Zyklus mit wenigstens 3 Pfeilen enthält – Erinnerung: Bei einem einfachen Pfad darf kein Knoten mehrfach besucht werden Durchlaufen von Graphen • für manche Probleme ist es wichtig alle Knoten eines Graphen zu betrachten (zu besuchen) • z.B. in einem Labyrinth, Kreuzungen sind Knoten, Wege dazwischen sind Kanten • verschiedene Suchstrategien, z.B. im Labyrinth – einer alleine: erst einen Weg bis zum Ende und dann zurück (Tiefensuche) – mehrere: ausschwärmen an einer Kreuzung (in die Breite) Gerüst eines Knotenbesuchsalgorithmus • gegeben Graph G = (V, E), Menge B von bereits besuchten Knoten • beginne bei beliebigem Knoten b, B = {b} • markiere alle Pfeile/Kanten e ∈ E als unbenutzt • solange es unbenutzten Pfeil/Kante (v, v ′ ) ∈ E mit v ∈ B gibt – markiere (v, v ′ ) als benutzt – B = B ∪ {v ′ } • B enthält alle von b aus erreichbaren Knoten Letzte Änderung: 23.05.2017 13:41 7 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun Verfeinerung des Knotenbesuchsalgorithmus • zusätzlich Menge R, mit R ⊆ B, von Knoten von denen noch unbenutzte Pfeile/Kanten ausgehen können – R heisst Rand von B • Bedingung zum Abbruch ist wenn R leer Einfache Zusammenhangskomponenten • eine der einfachsten Anwendungen des linearen Knotenbesuchsalgorithmus • suche Zusammenhangskomponenten Tiefen- und Breitensuche • wird ein neuer Knoten besucht, so werden seine ausgehenden Pfeile/Kanten in die Datenstruktur der unbenutzen Kanten eingefügt – Stapel/Stack (last in first out) – Schlange/Queue (first in first out) • was führt zur Tiefensuche, was zu Breitensuche? Tiefen- und Breitensuche (2) • Stapel ⇒ Tiefensuche – depth first search, DFS • Schlange ⇒ Breitensuche – breadth first search, BFS • zu was führt ein rekursiver Knotenbesuchsalgorithmus? Kürzeste Wege • bei der Modellierung realer Probleme reicht oft das Vorhandensein oder Fehlen von Knoten und Kanten nicht aus • Knoten und Kanten bekommen Eigenschaften zugeordnet, die für die Lösung des Problems wesentlich sind Letzte Änderung: 23.05.2017 13:41 8 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun • Beispiele – Kanalrohre mit maximaler Transportkapazität – Arbeiten an einem Haus haben minimale, maximale und erwartete Dauer – Bahnstrecken haben Länge und (je nach Tarif) einen Preis • Pfeil/Kante werden Kostenwerte zugeordnet, wir interessieren uns für kostengünstigste Wege – wird in der Regel dann auch kürzester Weg genannt – um Verluste modellieren zu können, dürfen Pfeile/Kanten auch negative Länge haben Definition bewerteter Graph und Kostenfunktion • ein ungerichteter Graph G = (V, E) mit einer reelwertigen Bewertungsfunktion c : E → R heißt bewerteter Graph • für eine Kante e ∈ E heißt c(e) Bewertung (Länge, Gewicht, Kosten) • die Länge c(G) des Graphen ist die Summe der Längen aller Kanten, also c(G) = ∑ e∈E c(e) • für einen Weg p = (v0 , v1 , ..., vk ) ist die Länge des Weges c(p) = ∑k−1 i=0 c((vi , vi+1 )) – für unbewertete Graphen setzen wir c(e) = 1, ∀e ∈ E Definition Entfernung • die Entfernung d (Distanz, distance) von einem Konten v zu einem Knoten v ′ ist definiert als d(v, v ′ ) = min{c(p)|p ist Weg von v nach v ′ } falls es überhaupt einen Weg von v nach v ′ gibt sonst ist d(v, v ′ ) = ∞ • ein Weg p zwischen v und v ′ mit c(p) = d(v, v ′ ) heißt kürzester Weg (shortest path) zwischen v und v ′ – wird mit sp(v, v ′ ) bezeichnet Letzte Änderung: 23.05.2017 13:41 9 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun Definition Bewerteter Digraph • ein Digraph G = (V, E) mit Bewertungsfunktion c : E → R heißt bewerteter Digraph • wenn er keine Knoten ohne inzidente Pfeile hat (Pfeile die in einem Knoten beginnen oder Enden), heißt er Netzwerk Definition Distanzgraph • ist die Länge jeder Kante nicht negativ, also c : E → R+ 0 , so heißt G = (V, E) mit c Distanzgraph Kürzeste Wege in Distanzgraphen • Problem: zu einem gegebenen Distanzgraphen und gegebenen Anfangsknoten s einen kürzesten Weg zu jedem anderen Knoten im Graph finden, Beispiel Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen • Idee: Wege in einer Art äquidistanter Welle um den Anfangsknoten solange wachsen lassen, bis Zielknoten erreicht ist Optimalitätsprinzip • für jeden kürzesten Weg p = (v0 , v1 , ..., vk ) von v0 nach vk • ist auch jeder Teilweg p′ = (vi , ..., vj ), 0 ≤ i < j ≤ k ein kürzester Weg von vi nach vj • warum? Letzte Änderung: 23.05.2017 13:41 10 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun Kürzeste Wege durch Hinzunahme einzelner Kanten • länger werdende kürzeste Wege durch Hinzunahme einzelnen Kanten zu bereits bekannten kürzesten Wegen • dabei gilt die Invariante 1. Für alle kürzesten Wege sp(s, v) und Kanten (v, v ′ ) gilt: c(sp(s, v)) + c((v, v ′ )) ≥ c(sp(s, v ′ )) 2. Für wenigstens einen kürzesten Weg sp(s, v) und eine Kante (v, v ′ ) gilt: c(sp(s, v)) + c((v, v ′ )) = c(sp(s, v ′ )) Idee zur Realisierung • jeder Knoten gehört zu einer der Klassen – gewählte Knoten: kürzester Weg von s ist bereits bekannt – Randknoten: ein Weg von s bekannt – unerreichte Knoten: kein Weg von s bekannt Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen Idee zur Realisierung (2) • wir merken uns zu jedem Knoten v – die bisher berechnete, vorläufige Entfernung zum Anfangsknoten s, – den Vorgänger von v auf dem bisher berechneten, vorläufig kürzesten Weg von s nach v und Letzte Änderung: 23.05.2017 13:41 11 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun – eine Markierung, ob der Knoten bereits gewählt ist • außerdem speichern wir die Menge R der Randknoten Dijkstras Algorithmus zur Berechnung kürzester Wege von einem Knoten zu allen anderen (1959, Buch S. 622f) • Initialisierung – setze s gewählt, Entfernung zu s = 0, Vorgänger = 0 – für alle anderen Knoten setze nicht gewählt, Entfernung zu s = ∞, Vorgänger undefiniert – alle zu s adjazenten Knoten gehören zum Rand R • berechne Wege ab s solange R ̸= ∅ wiederhole – wähle v ∈ R mit minimaler Entfernung zu s und entferne v aus R – setze v gewählt – ergänze Rand R bei v * nehme alle unerreichten Knoten mit zu R * passe möglicherweise kürzer gewordene Entfernungen an Aufgabe Berechnen Sie die kürzesten Wege vom Knoten a nach Dijkstras Algorithmus: Letzte Änderung: 23.05.2017 13:41 12 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun Distanzgraph Kürzeste Wege in beliebig bewerteten Graphen • wenn wir auch negative Kantenbewertungen zulassen, ändert sich die Berechnung kürzester Wege erheblich – ein Weg wird kürzer(!) wenn eine Kante mit einer negativen Länge dazu genommen wird! – d.h. wenn man zuläßt das negative Zyklen enthalten sein dürfen, wird der Weg immer kürzer • Zusatzbedingung: kürzeste Wege dürfen keine Zyklen enthalten Auswahlverfahren von Ford kürzeste Wege in G = (V, E) mit c : E → R von einem Knoten s ∈ V . 1. Initialisierung 1. setze für alle Knoten v ∈ V \{s} Vorgänger auf undefiniert und Entfernung auf ∞. 2. setze für s Vorgänger auf s und Entfernung auf 0 3. alle zu s adjazenten Knoten gehören zu R 2. Berechne Wege ab s Solange R ̸= ∅ Letzte Änderung: 23.05.2017 13:41 13 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun • wähle v ∈ R und entferne v aus R • verschiebe R bei v Rand verschieben bei v • Für alle (v, v ′ ) ∈ E wird überprüft v.Entf ernung + c((v, v ′ )) < v ′ .Entf ernung • wenn das gilt, ist v ′ (kürzer) über v erreichbar – setze Vorgänger von v ′ auf v und Entfernung entsprechend – füge v ′ zum Rand hinzu, falls noch nicht enthalten Aufgabe Berechnen Sie die kürzesten Wege vom Knoten a nach dem Auswahlverfahren nach Ford: Distanzgraph Minimal spannende Bäume • ein minimaler spannender Baum (minimal spanning tree, MST) – eines Graphen G – ist ein spannender Baum von G von Letzte Änderung: 23.05.2017 13:41 14 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun – minimaler Gesamtlänge unter allen spannenden Bäumen von G • Ziel: aus einer Vielzahl von Kanten nur diese auszuwählen, – die die Knoten mit kürzester Gesamtlänge verbinden • notwendige Voraussetzung – zusammenhängender, ungerichteter Graph Verfahren zur Lösung • gieriges (greedy) Verfahren – Entscheidungen, die den Rechnenprozess der Lösung näher bringt * auf Basis der bis dahin gesammelten Informationen * werden nicht mehr revidiert – vergleichsweise effizient Algorithmus-Gerüst • berechne – zu zusammenhängenden, ungerichteten, bewerteten Graphen G = (V, E) – mit c : E → R – einen minimalen spannenden Baum T ′ = (V, E ′ ) von G • setze E ′ = ∅ • solange noch nicht fertig – wähle geeignete Kante und füge diese zu E ′ hinzu Auswahlverfahren für die Kanten • alle Kanten sind entweder gewählt, verworfen oder unentschieden • zu Beginn alle Kanten unentschieden • am Ende des Auswahlverfahrens bilden die gewählten einen minimalen spannenden Baum • Auswahlinvariante – es gibt einen MST der alle gewählten und keine verworfenen Kanten enthält • im Laufe der Jahre verschiedene effiziente Algorithmen vorgeschlagen Letzte Änderung: 23.05.2017 13:41 15 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun Definition Schnitt • ein Schnitt in einem Graphen G = (V, E) • ist eine Zerlegung von V in S und S = V − S • eine Kante kreuzt einen Schnitt, wenn sie mit einem Knoten aus S und einem Knoten aus S inzident ist Entscheidungsregeln • die folgenden Regeln entscheiden darüber ob eine unentschiedene Kante gewählt oder verworfen wird Regel 1 (Wähle eine Kante) Wähle einen Schnitt, den keine gewählte Kante kreuzt. Wähle eine kürzeste unter den unentschiedenen Kanten, die den Schnitt kreuzen. Regel 2 (Verwirf eine Kante) Wähle einen einfachen Zyklus, der keine verworfenen Kanten enthält. Verwirf eine längste unter den unentschiedenen Kanten im Zyklus. • die verschiedenen Algorithmen unterscheiden sich zum einen – in der Reihenfolge in der die beiden Regeln angewandt werden und zum anderen – in der Art, wie ein Schnitt oder ein Zyklus gewählt werden Algorithmus von Boruvka • ältester Algorithmus • für G = (V, E) ist am Anfang jeder einzelne Knoten ein gewählter Baum • in einem Auswahlschritt wird für jeden gewählten Baum eine kürzeste Kante zu einem anderen Baum gewählt – gibt es zu einem Baum mehr als eine kürzeste Kante, wird diejenige gewählt, die mit einem Knoten kleinster Nummer indiziert – dadurch wird vermieden, dass durch ungeschickte Wahl ein Zyklus entsteht Algorithmus von Kruskal • für G = (V, E) ist am Anfang jeder einzelne Knoten ein gewählter Baum • dann wird für jede Kante e ∈ E in aufsteigender Kantenlänge folgender Auswahlschritt angewandt: – falls e beide Endknoten im selben gewählten Baum hat, verwirf e – sonst, wähle e Letzte Änderung: 23.05.2017 13:41 16 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun Algorithmus von Jarník, Prim, Dijkstra • ähnlich Dijkstras kürzeste Wege Algorithmus • zu jedem Zeitpunkt bilden die gewählten Kanten einen gewählten Baum • wir beginnen mit einem beliebigen Anfangsknoten s ∈ V und führen folgenden Auswahlschritt (|V | − 1)-mal aus: – wähle eine Kante mit minimaler Länge zu der genau ein Endknoten zum gewählten Baum gehört Aufgabe Berechnen Sie den MST nach den drei verschiedenen Algorithmen: Distanzgraph Flüsse in Netzwerken Flüsse in Netzwerken • Wieviele Fahrzeuge pro Minute kann ich höchstens durch eine Stadt leiten? • Welche Wassermenge verkraftet die Kanalisation? Letzte Änderung: 23.05.2017 13:41 17 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun Flüsse in Netzwerken (2) • sei G = (V, E) ein gerichteter Graph – mit einer Kapazitätsfunktion c : E → R+ – und zwei ausgezeichneten Knoten, einer Quelle q und einer Senke s • Ziel: maximaler Fluß von q nach s Fluss • ein Fluss durch einen Pfeil muss die Kapazitätsbeschränkung dieses Pfeils einhalten • an jedem Knoten muss der Fluß erhalten bleiben, also gleich viel hinein- und hinausfließen (außer an q und s) • ein Fluss ist eine Funktion f : E → R+ 0 , wobei gilt: – Kapazitätsbeschränkung: Für alle e ∈ E ist f (e) ≤ c(e) – Flusserhaltung: für alle v ∈ V − {q, s} ist ∑ (v ′ ,v)∈E f ((v ′ , v)) − ∑ (v,v ′′ )∈E f ((v, v ′′ )) = 0 Beispiel • an jedem Pfeil ist c(e)/f (e) angegeben • der Wert w(f ) eines Flusses f ist die Summe der Flußwerte aller q verlassenden Pfeile, also im Beispiel w(f ) = 3 Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen Letzte Änderung: 23.05.2017 13:41 18 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun Algorithmen zur Berechnung des maximalen Flusses • es kann nicht mehr fließen wie unmittelbar aus q heraus und in s hinein • genauso begrenzt jeder Schnitt durch den Graphen der q und s teilt • ein (q von s trennender) Schnitt ist – eine Zerlegung der Knotenmenge V in zwei Teilmengen Q und S, so dass q ∈ Q und s ∈ S • die Kapazität c(Q, S) eines Schnittes Q, S ist die Summe der Kapazitäten der Pfeile die von Q nach S führen • ein Schnitt mit kleinster Kapazität unter allen möglichen Schnitten heißt minimaler Schnitt • für jeden Fluss f und jeden Schnitt Q, S gilt: f (Q, S) = w(f ) • der Fluß über einen beliebigen Schnitt kann dessen Kapazität nicht überschreiten Maximaler Fluss durch zunehmende Wege • Fluss erhöhen, durch Hinzunahme eines Weges Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen • Fluss ist aber nur 8, obwohl Kapazität des minimalen Schnitts {q, a, b}, {c, d, s} 10 beträgt • durch schrittweises Abändern der Flüsse maximieren Abändern von Flüssen • Ausdrücken in Wegen von q nach s Letzte Änderung: 23.05.2017 13:41 19 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun – Erhöhen eines Flusses entlang eines Pfeiles mit noch freier Restkapazität rest(e) = c(e) − f (e) – Verringern eines Flusses entlang eines Pfeiles, bzw. Erhöhen in Gegenrichtung • Weg ohne Rücksicht auf die Pfeilrichtung wird zunehmender Weg genannt – in Pfeilrichtung gilt f (e) > c(e), also rest(e) > 0 – entgegen gilt f (e) > 0 Restgraph • der Restgraph beschreibt die Flussvergrößerungsmöglichkeiten – er enthält einen Pfeil e, wenn rest(e) > 0 – er enthält den zu e entgegengesetzten Pfeil, wenn f (e) > 0 • Beispiel für den letzten Fluss Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen Suche des zunehmenden Weges • der einzige zunehmende Weg in dem Beispiel, ist der einzige einfache Weg im Restgraphen von q nach s: – q, b, a, c, d, s – Flussvergrößerung um 2 auf diesem Weg – anschließend kein Weg mehr von q nach s im zugehörigen Restgraphen Letzte Änderung: 23.05.2017 13:41 20 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun Maximaler Fluss • Ein Fluss f ist genau dann maximal, • wenn es für f keinen zunehmenden Weg mehr gibt. • Der Wert des Flusses entspricht dann der Kapazität eines minimalen Schnitts. Algorithmus: Beliebig zunehmende Wege • Initialisiere mit Nullfluss – ∀e ∈ E : f (e) := 0 • solange es einen zunehmenden Weg p gibt: – wähle r := min{rest(e)|e liegt auf Weg p im Restgraphen} – erhöhe f entlang p um r Kürzeste zunehmende Wege • die Laufzeit kann durch weitere Bedingung eingeschränkt werden • hängt nur von der Größe des Graphen ab • wähle aus allen zunehmenden Wegen immer einen mit möglichst wenigen Pfeilen Alle kürzesten zunehmenden Wegen • zur Bestimmung eines kürzesten zunehmenden Weges von q nach s sind nicht alle Pfeile im Restgraphen von Interesse Letzte Änderung: 23.05.2017 13:41 21 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun • es genügt für jeden von q aus erreichbaren Knoten v im Restgraph einen kürzesten Weg von q nach v zu kennen • die Länge (Anzahl der Pfeile) eines kürzesten Weges von q nach v heisst dann Niveau von v Beispiel: Fluss- und Restgraph Niveaugraph • der Niveaugraph enthält nur – die von q aus erreichbaren Knoten – Pfeile die auf einem kürzesten Weg liegen • mit einer Breitensuche kann der Niveaugraph in Zeit O(|E|) konstruiert werden • Beispiel Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen Letzte Änderung: 23.05.2017 13:41 22 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun Abänderung Algorithmus • der zweite Schritt zur iterierten Flussvergrößerung im Algorithmus Maximaler Fluss durch zunehmende Wege kann ersetzt werden durch: • solange s zum Niveaugraphen für f gehört – setze fb := ein blockierender Fluss im Niveaugraphen für f – setze f := f ⊕ fb • ein Fluss der einen gesätigten (nicht mehr vergrößerbaren) Pfeil enthält, heisst blockierender Fluss • die Operation ⊕ bezeichnet das bereits erläuterte Addieren zweier Flüsse unter Berücksichtigung der Pfeilrichtung Zuordnungsprobleme Zuordnungsprobleme • Zuordnungsprobleme bei denen es um eine insgesamt bestmögliche Bildung von Paaren geht • die Elemente der Grundmenge sind die Knoten • alle möglichen Paarbildungen beschreiben die Kanten • Beispiel – Knotenmenge: alle Teilnehmer einer Gruppenreise – Kanten: Bereitschaft der beiden Teilnehmer in einem Doppelzimmer zu übernachten – Fragestellung: Wieviele Doppelzimmer werden insgesamt benötigt? – d.h. größtmögliche Kantenmenge, so dass jeder Knoten mit höchstens einer Kante inzidiert Zuordnungsproblem formalisiert • für einen ungerichteten Graphen G = (V, E) ist eine Zuordnung Z (matching) – eine Teilmenge der Kanten von G – so dass keine zwei Kanten in Z den selben Endknoten haben • die Anzahl |Z| von Kanten in Z heisst Größe der Zuordnung Letzte Änderung: 23.05.2017 13:41 23 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun • ein Knoten ist bezüglich einer Zuordnung Z alleine (unmatched), wenn er nicht Endknoten einer Kante in Z ist • Z ist eine perfekte Zuordnung (perfect matching), wenn mit Z kein Knoten alleine bleibt Maximale Zuordnung • in folgendem Graphen gibt es mehrere perfekte Zuordnungen Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen • da es nicht immer eine perfekte Zuordnungen geben muss, definiert man eine Zuordnung Z als nicht erweiterbar (maximal), wenn es keine Kante e ∈ E gibt, die man noch hinzu nehmen könnte, z.B. {(Adam, Eva), (Dick, Doof )} • eine Zuordnung mit maximaler Größe |Z| heisst maximale Zuordnung (maximum matching) Zuordnung mit maximaler Zufriedenheit • ordnet man den Kanten noch Werte zu, die die jeweilige Zufriedenheit mit dem Partner ausdrücken, kann nach einer Zuordnung gesucht werden, die die Summe der Zufriedenheiten maximiert Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen Letzte Änderung: 23.05.2017 13:41 24 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun • anderes Anwendungsbeispiel – Mitarbeiter sind verschieden gut geeignet für verschiedene Tätigkeiten, ausgedrückt durch das Kantengewicht – Tätigkeiten sollen so Mitarbeitern zugeordnet werden, dass die Summe der Kantengewicht maximal wird Maximale gewichtete Zuordnung • ungerichteter, bewerteter Graph G = (V, E) • mit Kantenbewertung w : E → R • dann ist Gewicht einer Zuordnung Z die Summe der Gewichte der Kanten in Z • wir suchen eine maximale gewichtetet Zuordnung (maximal weight matching) Bipartiter Graph • ein Graph G = (V, E) heisst bipartit (bipartite), wenn sich die Knotenmenge so – in zwei Teilmengen X und Y zerlegen lässt, also V = X ∪ Y und X ∩ Y = ∅ – das gilt E ⊆ X × Y , also keine Kante zwei Knoten in X oder zwei Knoten in Y verbindet Beispiel • Graph G mit X = {x1 , ..., x6 } und Y = {y1, ..., y6 } Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen • Zuordnung {(x1 , y2), (x2 , y4 ), (x4 , y5 ), (x5 , y6 )} ist nicht maximal • besser z.B. statt der Kante (x1 , y2 ) die beiden Kanten (x1 , y1 ) und (x3 , y2 ) Letzte Änderung: 23.05.2017 13:41 25 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun Fortsetzung Beispiel • es müssen also zum Maximieren u.U. Kanten aus einer Zuordnung wieder herausgenommen werden Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen • manchmal reicht es nicht eine Kante herauszunehmen, z.B. bei (x2 , y4 ) und (x4 , y5 ) • erinnert an das Konzept der zunehmenden Flüsse Zuordnungsproblem in bipartiten Graphen • Zuordnungsproblem in bipartiten Graphen kann als Flussproblem formuliert werden • wir erweitern V mit zwei Knoten q und s zu V ′ • wir ändern E zu E ′ – jede Kante (xi , yj ) mit xi ∈ X, yj ∈ Y wird zu einem Pfeil von xi nach yj – es gibt für jeden Knoten xi ∈ X einen Pfeil (q, xi ) – es gibt für jeden Knoten yj ∈ Y einen Pfeil (yj , s) • der Graph G′ = (V ′ , E ′ ) ist ein Flussgraph Beispiel als Flussgraph • als Kapazitätsfunktion wählen wir c : E ′ → {1} • jede Zuordnung entspricht einem Fluss und umgekehrt Letzte Änderung: 23.05.2017 13:41 26 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen Zunehmende Wege • Ersetzen der Kante (x1 , y2 ) durch die beiden Kanten (x1 , y1 ) und (x3 , y2 ) entspricht dem zunehmenden Weg q, x3 , y2 , x1 , y1 , s Letzte Änderung: 23.05.2017 13:41 27 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun Quelle: Ottmann & Widmayer, Algorithmen und Datenstrukturen Zurück zu G • wir können das Konzept der zunehmenden Flüsse in folgendes Konzept für G übertragen: • auf einem zunehmenden Weg transportiert – ein Vorwärtspfeil e den aktuellen Fluss f (e) = 0 – ein Rückwärtspfeil e′ den aktuellen Fluss f (e′ ) = 1 • einem zunehmenden Weg q, xi , ..., yj , s in G′ – entspricht ein ein Weg xi , ..., yj in G • Zahl der Vorwärtspfeile ist stets um 1 größer als Zahl der Rückwärtspfeile • Weg in G ist Weg in dem abwechselnd Kanten zur Zuordnung gehören bzw. nicht zur Zuordnung gehören Alternierender Weg • für eine gegebenen Zuordnung Z nennen wir – die für Z verwendeten Kanten e ∈ Z heissen gebunden – die Kanten e′ ∈ E \ Z heissen frei Letzte Änderung: 23.05.2017 13:41 28 Algorithmen und Datenstrukturen II: Graphenalgorithmen Prof. Dr. Oliver Braun • jeder Knoten – der mit einer gebundenen Kante inzidiert ist, heisst gebundener Knoten – jeder andere Knoten ist frei • ein Weg in G dessen Kanten abwechselnd gebunden und frei sind, heisst alternierender Weg • die Länge des alternierenden Wegs ist die Anzahl seiner Kanten Vergrößernder alternierender Weg • ein alternierender Weg kann nur dann zur Vergrößerung der Zuordnung benützt werden, wenn – die beiden Knoten an den Enden frei sind • der alternierende Weg heisst dann vergrößernd • Beweis, dass man mit vergrößernden Wegen schließlich auch wirklich eine maximale Zuordnung erreicht, steht in Ottmann & Widmayer S. 653ff Letzte Änderung: 23.05.2017 13:41 29