Wiederholungskurs zu den Grundlagen der Diskreten Optimierung von Dipl.-Math. Wolfgang Kinzner im Wintersemester 2009/2010 Zentrum für Mathematik Technische Universität München 7. April 2010 Giederung: • Grundlagen der Graphentheorie • Kürzeste Wege • Minimal aufspannende Bäume und Matroide • MaximalFluss-Problem und bipatites Matching 1 Graphentheorie Grundlagen Übung 1 Sind folgende Aussagen richtig oder falsch? (a) Stabile Mengen sind Wälder, Pfade sind Bäume. (b) Ein Graph ist genau dann ein Baum, wenn je zwei Knoten durch einen Pfad verbunden sind. (c) Ein Graph mit n Knoten und n − 1 Kanten ist ein Baum. (d) Ein Wald mit n Knoten und n − 1 Kanten ist ein Baum. (e) Bäume und Wälder sind bipartit. 2 Speicherung von Graphen Sei G = (V, E) ist ein ungerichteter ungewichteter Graph mit V = [n] (d.h. |V | = n) und |E| = m. (1) Adjazenzmatrix: (n × n)-Matrix A = (aij )1≤i,j≤n mit aij = Vorteil: a11 .. = . an1 . . . a1n .. .. . . . . . ann Nachteil: (2) Adjazenzliste: Feld von n Listen, eine für jeden Knoten in V . 1 → ... .. .. .. . . . v .. . n → .. . → v1 .. . ... → v2 → ... → mit N (v) = Vorteil: Nachteil: 3 vk Übung 2 Sei G ein ungerichteter Graph mit n Knoten, der durch seine Adjazenzmatrix A = (aij ) ∈ Rn×n gegeben ist. Zeigen Sie, dass man mit einer MatrixMultiplikation und O(n2 ) weiteren Schritten überprüfen kann, ob G ein Dreieck besitzt. 4 Tiefen- und Breitensuche Sei G = (V, E) ist ein ungerichteter ungewichteter Graph mit |V | = n und |E| = m. Funktionsweise Tiefensuche/Depth-First Search (DFS): • • • • Laufzeit: Algorithmus 1 (Tiefensuche) Input: Graph G = (V, E) in Form einer Adjazenzliste. Output: Kantenmengen T und B mit B ∪ T = E Alle Knoten seien unmarkiert. 1. Setze T := ∅, B := ∅. 2. Für alle v ∈ V führe aus Ist v unmarkiert, dann CALL SEARCH(v). END 3. Gib T und B aus. Algorithmus 2 (SEARCH(v)) 1. Markiere v. 2. Für alle Knoten w ∈ N (v) führe aus: 3. Ist w markiert und vw ∈ / T ∪ B, setze B := B ∪ {vw}. 4. Ist w unmarkiert, setze T := T ∪ {vw} und CALL SEARCH(w). END END SEARCH 5 Funktionsweise Breitensuche/Breath-First Search (BFS): • • • • Laufzeit: Algorithmus 3 (Breitensuche) Input: Graph G = (V, E) in Form einer Adjazenzliste. Output: Kantenmengen T und B mit B ∪ T = E Alle Knoten seien unmarkiert. 1. Setze T := ∅, B := ∅, W := ∅. 2. Für alle v ∈ V führe aus Ist v unmarkiert , dann markiere v und CALL SEARCH(v). END 3. Gib T und B aus. Algorithmus 4 (SEARCH(v)) 1. Markiere v. 2. Für alle Knoten w ∈ N (v) führe aus: 3. Ist w markiert und vw ∈ / T ∪ B, setze B := B ∪ {vw}. 4. Ist w unmarkiert, dann markiere w, setze T = T ∪ {v, w} und füge es hinten an die Liste W an. END 5. Nimm nun den ersten Knoten u aus der Liste W heraus und CALL SEARCH(u). END SEARCH 6 Modifikationen von DFS/BFS: • Bestimmung des Abstandes zweier Knoten v, w ∈ V (d.h. die Kantenzahl des kürzesten Pfades zwischen v und w): – – – Laufzeit: Bemerkung: • Test auf Bipartitheit: – – – – Laufzeit: 7 Übung 3 Sind die folgenden Aussagen richtig oder falsch? (a) Man kann mit DFS/BFS in O(n) testen, ob G kreisfrei ist. (b) Man kann mit DFS/BFS in O(n) testen, ob G zusammenhängend ist. (c) Man kann mit DFS/BFS in O(n) testen, ob G ein Baum ist. (d) Ist G zusammenhängend, aber kein Baum, so sind die durch BFS und DFS konstruierten Spannbäume immer verschieden. (e) Ist G zusammenhängend, aber kein Baum, so sind die durch BFS und DFS, vom selben Startknoten aus, konstruierten Spannbäume immer verschieden. 8 Kürzeste Wege Problemstellung Gegeben: gewichteter Digraph D = (V, A, c) (|V | = n, |A| = m). Gesucht: Weg W von einem Knoten zu allen anderen oder zu einem bestimmten mit Übung 4 Sei D = (V, A, c) ein gewichteter, stark zusammenhängender Digraph und v, w ∈ V . Sind die folgenden Aussagen richtig oder falsch? (a) Gibt es in einem kürzesten v, w-Weg einen Zyklus negativer Länge, so gilt DIST(v, w) = −∞. Nun sei zusätzlich vorausgesetzt, dass G keine Zyklen negativer Länge enthält. (b) Jeder kürzeste v, w-Weg enthält einen kürzesten v, w-Pfad. (c) Ein kürzester v, w-Weg ist eindeutig. (d) Ist c injektiv, so ist ein kürzester v, w-Weg eindeutig. (e) Ist ṽ Zwischenknoten eines kürzesten v, w-Weges, so sind die beiden Teilwege kürzeste v, ṽ- bzw. ṽ, w-Wege. (f ) Der aus zwei kürzesten v, ṽ- und ṽ, w-Wegen zusammengesetzte Weg ist ein kürzester v, w-Weg. 9 Der Dijkstra-Algorithmus Funktionsweise: • • • • Laufzeit: Algorithmus 5 (Dijkstra-Algorithmus) Input: Digraph D = (V, A, c) mit Gewichten c(a) ≥ 0 für alle a ∈ A, ein Knoten s ∈ V (und ein Knoten t ∈ V \ {s}). Output: Kürzeste gerichtete Wege von s nach v für alle v ∈ V und ihre Länge (bzw. ein kürzester (s, t)-Weg). Datenstrukturen: DIST (v) = Länge des kürzesten (s, v)-Weges. V OR(v) = Vorgänger von v im kürzesten (s, v)-Weg. 0. Setze: DIST (s) := 0, DIST (v) := +∞ für alle v ∈ V \ {s}, V OR(v) := s für alle v ∈ V. 1. Alle Knoten seien unmarkiert. 2. Bestimme einen unmarkierten Knoten u, so dass DIST (u) = min{DIST (v) : v unmarkiert}. Markiere u. (Falls u = t gehe zu 5.) 3. Für alle unmarkierten Knoten v mit vw ∈ A führe aus: Falls DIST (v) > DIST (u) + c(uv) setze: DIST (v) := DIST (u) + c(uv) und V OR(v) := u. 4. Sind noch nicht alle Knoten markiert, gehe zu 2. 5. Für alle markierten Knoten v ist DIST (v) die Länge des kürzesten (s, v)Weges. Falls v markiert ist und DIST (v) < +∞, so ist V OR(v) der Vorgänger von v in einem kürzesten (u, v)-Weg, d.h. durch Rückwärtsgehen bis s kann ein kürzester (s, v)-Weg bestimmt werden. (Brechen wir das Verfahren nicht in Schritt 2 ab und gilt am Ende DIST (v) = +∞, so heißt das, dass es in D keinen (s, v)-Weg gibt.) 10 Übung 5 Für einen Graphen G = (V, A) betrachten wir die Reihenfolge v1 , v2 , ..., vn mit vi ∈ V in der die Knoten von G im Dijkstra-Algorithmus markiert werden. Wir sagen dann, dass v1 , v2 , ..., vn eine (mögliche) Besuchsreihenfolge für Dijkstra(G, v1 ) ist. Sei G der folgende Graph mit Gewichtsfunktion c wie angegeben: v3 v9 111111 000000 0000000 1111111 00 11 00 11 00 11 00000011001111111 111111 0000000 00 11 00 11 000000 111111 000000 111111 00 11 00 11 00 11 000 111 000000 111111 000000 111111 110011001111111 1111111110011111111111111 0000000 10111111 00000000000000 0000000 000 111 000000 00000000000000 11111111111111 0000000 1111111 10111111 000 111 000000 0000000 1111111 000000 000000010111111 1111111 3 1 v4 1 3 4 v8 2 v5 1 3 v2 1 2 v7 3 2 2 4 5 v6 v1 Welche der folgenden Aussagen sind richtig? (a) Eine Besuchsreihenfolge für Dijkstra(G, c, v1 ) ist v1 , v4 , v9 , v8 , v6 , v5 , v2 , v7 , v3 . (b) Eine Besuchsreihenfolge für Dijkstra(G, c, v7 ) ist v7 , v6 , v8 , v5 , v9 , v4 , v2 , v1 , v3 . (c) Beim Ausführen von Dijkstra(G, c, v9 ) ist DIST(v9 ) stets echt kleiner als DIST(v2 ). (“stets“ bedeutet, sobald DIST(v) < ∞ für den besagten Knoten v.) (d) Beim Ausführen von Dijkstra(G, c, v1 ) ist DIST(v3 ) stets echt kleiner als DIST(v8 ). (e) Beim Ausführen von Dijkstra(G, c, v7 ) ist DIST(u8 ) stets echt kleiner als DIST(v9 ). (f ) Beim Ausführen von Dijkstra(G, c, v7 ) enthält ein kürzester v7 , v9 -Pfad immer die Kante {v6 , v9 }. (g) Beim Ausführen von Dijkstra(G, c, v1 ) enthält ein kürzester v1 , v2 -Pfad immer die Kante {v5 , v2 }. 11 Der Floyd-Warshall-Algorithmus Lemma 1 ~ = (V, A, c), c : E ~ → R und i, j ∈ [n] und k ∈ [0, n]. Weiter seien Seien D k Pi,j := {P = (v1 , . . . , vr ) : mki,j := ( P ist gerichteter i, j-Pfad und v2 , . . . , vr−1 ∈ [k]} und k min{c(P ) : P ∈ Pi,j } ∞ k falls Pi,j 6= ∅, sonst. Dann gilt: mki,j = ( falls k = 0 falls k ≥ 1. Funktionsweise: • • • Laufzeit: Algorithmus 6 (Floyd-Warshall) Input: Digraph D = ([n], A, c) ohne negativ gerichtete Kreise, c : A → R. Output: Matrix M = (mij ) ∈ Rn×n mit mij =Länge des kürzesten i, j-Weges. 1. FOR i = 1 TO n 2. 3. FOR j = 1 TO n 0 0 mi,j := ∞ c(i, j) falls i = j, falls i 6= j, (i, j) ∈ A, sonst. 4. FOR k = 1 TO n 5. 6. FOR i = 1 TO n FOR j = 1 TO n 7. 8. RETURN M := (mni,j )1≤i,j≤n 12 Modifikationen: • Berechnung von kürzesten Pfaden. k k Sei wi,j der Vorgänger von j auf einem Pfad P ∈ Pi,j mit c(P ) = mki,j . Dann gilt → − falls i 6= j und (i, j) ∈ E , 0 wi,j := sonst. ( k−1 k−1 k−1 falls mi,j ≤ mi,k + mk,j k k ≥ 1 : wi,j = k−1 k−1 k−1 falls mi,j > mi,k + mk,j . Modifizierter Algorithmus gibt schließlich die Matrix der kürzesten Pfade n W = (wij )1≤i,j≤n aus. • Erkennen von negativen Zyklen. Es gilt: Es gibt einen Zyklus negativer Länge ⇐⇒ Sobald also im Laufe des Algorithmus in M • Kürzeste i, j-Wege auch bei negativen Zyklen. – Tritt bei der Ausführung des Algorithmus ein negatives Diagonalelement auf → – – Am Ende enthält die Matrix M ∗ ∗ ∗ 13 Übung 6 Gegeben sei der folgende gerichtete, gewichtete Graph G = (V, E, c): 2 3 4 2 2 1 -3 -2 6 5 1 3 1 5 (a) Berechnen Sie mithilfe des Floyd-Warshall-Algorithmus einen kürzesten Weg von v1 nach v6 und dessen Länge. (b) Zeigen Sie, dass der Dijkstra-Algorithmus für das gleiche Problem unbrauchbar ist. 14 Minimal aufspannende Bäume, Unabhängigkeitssysteme und Matroide Definition 1 Sei G = (V, E, c) ein zusammenhängender Graph mit c : E → R≥0 . Ein minimal aufspannender Baum (minimal spanning tree=MST) von G ist Bemerkung 1 Die Definition kann problemlos auf Graphen mit allgemeinen Gewichtsfunktionen c : E → R erweitert werden. Problemstellung Gegeben: Gewichteter zusammenhängender Graph G = (V, E, c). Gesucht: MST in G. Übung 7 Sei G = (V, E, c) ein ungerichteter (nicht notwendigerweise zusammenhängender) Graph mit c : E → R. Zeigen Sie, dass das Problem einen Wald maximalen Gewichts in G (d.i. ein Wald W ⊂ G mit c(W ) = max{c(W ′ ) : W ′ ⊂ G ist Wald }) zu finden, auf das MST-Problem zurückgeführt werden kann. 15 Der Algorithmus von Prim Funktionsweise: Laufzeit: Algorithmus 7 (Algorithmus von Prim) Input: Graph G = (V, E, c), c : E → R≥0 , G zusammenhängend Output: Baum T = (V, F ) 1. Wähle beliebigen Knoten s ∈ V 2. W := {s}, F := ∅, d(s) := 0 3. forall v ∈ N (s) do V or(v) := s, d(v) := c({s, v}) 4. forall v ∈ V \ (N (s) ∪ {s}) do V or(v) := N IL, d(v) := ∞ 5. W 6= V 6. y := Knoten mit minimalem d(.)-Wert in V \ W 7. W := W ∪ {y}, F := F ∪ {{V or(y), y}} 8. forall z ∈ N (y) ∩ (V \ W ) mit d(z) > c({y, z}) 9. 10. d(z) := c({y, z}) V or(z) := y 16 Der Algorithmus von Kruskal Funktionsweise: Laufzeit: Algorithmus 8 (Algorithmus von Kruskal) Input: Graph G = (V, E, c), Längenfunktion c : E → R≥0 Output: Baum T = (V, F ) 1. Sortiere alle Kanten in E so, daß c(e1 ) ≤ . . . ≤ c(em ) 2. F := ∅ 3. for i = 1 to m do Bemerkung 2 17 Übung 8 Sei G = (V, E, c) der folgende Graph: v3 v9 11001100 111111 000000 0000000 1111111 00 11 00000011001111111 111111 0000000 1100110011001100 000000 111111 000000 111111 00 11 000 111 000000 111111 000000110011111111111111 111111 110011001111111 10111111 1111111 0000000 00000000000000 0000000 000 111 000000 10111111 00000000000000 11111111111111 0000000 1111111 000 111 000000 0000000 1111111 000000 000000010111111 1111111 3 1 v4 1 3 4 v8 2 v5 1 3 v2 1 5 v7 3 2 2 4 5 v6 v1 Welche der folgenden Aussagen sind richtig? (a) Eine gültige Reihenfolge beim Ablaufen der Knoten im Prim-Algorithmus ist v5 , v4 , v9 , v8 , v1 , v6 , v3 , v7 , v2 . (b) Im Algorithmus von Prim wird der Knoten v2 stets als Letzter in den spannenden Baum eingebunden. (c) Im Algorithmus von Kruskal existieren unmittelbar vor dem letzten Schritt stets die Komponenten {v2 } und V − v2 . (d) Kein minimal spannender Baum enthält die Kanten {v1 , v5 } und {v4 , v5 } gleichzeitig. 18 Übung 9 Betrachten Sie den folgenden Algorithmus: Algorithmus 9 (Reverse Kruskal) Input: Zusammenhängender Graph G = (V, E, c), Längenfunktion c : E → R≥0 Output: Baum T = (V, F ) 1. Sortiere alle Kanten in E so, daß c(e1 ) ≤ . . . ≤ c(em ) 2. for i = m to 1 do 3. if G − ei zusammenhängend then G := G − ei Zeigen Sie: (a) Reverse Kruskal erzeugt einen aufspannenden Baum von G. (b) Sei nun c injektiv, T R der von Reverse Kruskal erzeugte Baum und T der durch den klassischen Algorithmus von Kruskal erzeugte Baum. Beweisen oder widerlegen Sie, dass für die Kante em mit dem größten Gewicht in E gilt: em ist Kante in T R ⇐⇒ em ist Kante in T . 19 Matroide Definition 2 (Unabhängigkeitssystem, Matroid) • Ein Unabhängigkeitssystem ist ein Paar (E, I), wobei E eine endliche Menge ist und (M1) • E heißt , die Mengen A ⊆ E mit A ∈ I heißen die Mengen B ⊆ E mit B 6∈ I heißen • Ein Unabhängigkeitssystem heißt Matroid, wenn außerdem noch die folgende Eigenschaft gilt: (M2) Definition 3 (Basis, Kreis und Rang eines Unabhängigkeitssystems) Sei U = (E, I) ein Unabhängigkeitssystem. Eine Menge in I heißt Basis, wenn sie Eine Menge in I heißt Kreis, wenn sie Weiter ist r+ (U ) := der obere Rang von U , und r− (U ) := Wenn der untere Rang von U . =: r(U ), dann heißt r(U ) Rang von U . Lemma 2 Sei U = (E, I) ein Unabhängigkeitssystem. Dann gilt: U ist genau dann ein Matroid, wenn Proposition 1 Sei (E, I) ein Unabhängigkeitssystem. Dann gilt: (a) (b) (E, I) ist genau dann Matroid, wenn gilt: (M2’) 20 und Beispiele 1 (1) Matrixmatroid: Sei A = (s1 | . . . |sn ) eine Matrix und E = {s1 , . . . , sn } die Menge der Spalten von A. Außerdem sei I := {F ⊆ E : F ist linear unabhängige Familie von Vektoren}. Dann ist U = (E, I) ein Basen: r(U ) = (2) Graphischer Matroid oder Kreismatroid: Sei G = (V, E) ein Graph und sei I := {F ⊆ E : }. Dann ist U = (E, I) ein Unabhängige Mengen: Basen: Kreise: r(U ) = Übung 10 Sei (E, I) das Kreismatroid des Graphen G aus Übung 8. Sind die folgenden Aussagen richtig? (a) {u6 , u7 } ist in jedem Element von I enthalten. (b) {u6 , u7 } ist in einem Element von I enthalten. (c) {u6 , u7 } ist in genau einem Element von I enthalten. (3) Partitionsmatroid: Sei E eine endliche Menge, k ∈ N, (E1 , E2 , . . . , Ek ) eine Partition von E, b1 , b2 , . . . bk ∈ N0 und I := {I ⊆ E : |I ∩ Ei | ≤ bi , i = 1, . . . k}. Dann ist (E, I) ist ein (4) Sei G = (V, E) ein Graph mit E 6= ∅. Wir definieren I := {M ⊆ E : M Matching}. Dann ist U := (E, I) ein Basen: r+ (U ) = 21 Übung 11 Sei G = (V, E) ein Graph und I die Menge aller Teilmengen I von V , sodass ein Matching M in G existiert, das alle Knoten von I überdeckt. Zeigen Sie: (V, I) ist ein Matroid. Bemerkung: (V, I) heißt der Matchingmatroid. 22 Maximierungsprobleme über Unabhängigkeitssystemen Definition 4 Ein Maximierungsproblem über einem Unabhängigkeitssystem (E, I) ist gegeben durch eine Gewichtsfunktion P ℓ : E → R≥0 (und der Vereinbraung, dass für Mengen A ∈ I wieder ℓ(A) := e∈A ℓ(e) sein soll). Gesucht ist eine Menge A∗ ∈ I mit Algorithmus 10 (Greedy-Algo. zur Max. über Unabhsys.) Eingabe: Unabhängigkeitssystem (E, I), Gewichtsfunktion ℓ : E → R≥0 Ausgabe: Ag ∈ I 1. Sortiere E = {e1 , . . . , em } so, daß ℓ(e1 ) ≥ . . . ≥ ℓ(em ) 2. Ag := ∅ 3. for i = 1 to m do Definition 5 Sei U = (E, I) ein Unabhängigkeitssystem. Für F ⊆ E setzen wir wieder UF := (F, IF ) und ( 1 falls r+ (UF ) = 0 κ(F ) := r− (UF ) falls r− (UF ) > 0 r+ (UF ) und nenne ρ(U ) := den Rangquotienten von U . Satz 1 (Hauptsatz) Sei (E, I, ℓ) eine Maximierungsaufgabe über dem Unabhängigkeitssystem U = (E, I) mit Greedy-Lösung Ag ⊆ E und optimaler Lösung A∗ ⊆ E. Dann gilt und es gibt eine Gewichtsfunktion ℓ : E → R≥0 , für die die zweite Ungleichung mit Gleichheit gilt. Korollar 1 (Edmonds-Rado) Sei U = (E, I) ein Unabhängigkeitssystem. Dann gilt: U ist Matroid ⇐⇒ 23 Übung 12 Sei G = (V, E) ein ungerichteter Graph. (a) Weiter sei (E, I) mit I := {F ⊂ E ist ein Teilmenge eines s,t-Pfades in G}, wobei s und t Knoten in V sind und t von s in G erreichbar ist, gegeben. Zeigen sie, dass (E, I) ein Unabhängigkeitssystem, aber im Allgemeinen keine Matroid ist. (b) Berechnen Sie eine straffe untere Schranke für den Rang-Quotienten für das Unabhängigkeitssystem aus (a). 24 Maximalfluss-Problem und bipartites Matching Netzwerke Definition 6 (Netzwerk, Fluss) • Ein Netzwerk ist ein Tupel N = (V, A, s, t, c), wobei G = (V, A, c) ein gerichteter Graph mit Kapazitätsfunktion c : A → R≥0 ist und die s∈ V und die t ∈ V zwei ausgezeichnetene Knoten sind. Für einen Knoten v ∈ V schreiben wir N + (v) := {w ∈ V : ∃(v, w) ∈ A} und N − (v) := {w ∈ V : ∃(w, v) ∈ A}. • Eine Abbildung f : A → R≥0 heisst s-t-Fluss (engl. flow) in N , wenn – – gilt. • Der Wert von f ist definiert als val(f ) := Ein Fluss f hat maximalen Wert in N , falls Flüsse f ′ in N gilt. 25 für alle Übung 13 Sei N = (V, A, s, t, c) ein Netzwerk. Sind die folgenden Aussagen richtig oder falsch? (a) N besitzt einen Fluss mit maximalen Wert. (b) Wenn f : E → R ein maximaler Fluss für N ist, dann gilt entweder f (u, v) = 0 oder f (u, v) = c(u, v) für jede Kante (u, v) ∈ E. (c) N besitzt einen maximalen Fluß für den gilt, dass entweder f (u, v) = 0 oder f (u, v) = c(u, v) für jede Kante (u, v) ∈ E. (d) Ist f ein maximalen Fluss in N , so ist f eindeutig. (e) Ist f ein maximalen Fluss in N und c injektiv, so ist f eindeutig. 26 Max-Fluss-Problem Gegeben: Netzwerk N Gesucht: Fluss f in N mit maximalem Wert. Übung 14 Uberlegen Sie sich, auf welche Weise die folgenden Verallgemeinerungen des Max-Flow-Problems auf das ursprüngliche Problem zurückgeführt werden können: (a) Es existieren mehrere Quellen s1 , . . . , sk und Senken t1 , . . . , tl . (b) Zusätzlich zu den Kantenkapazitäten ci sind Knotenkapazitäten di gegeben, d.h. der Durchfluss eines jeden zulässige s-t-Flusses durch den Knoten i darf di nicht überschreiten. 27 MaxFlowMinCut-Theorem Definition 7 (Schnitt, Kapazität) Eine Menge X ⊆ V heißt s-t-Schnitt (engl. cut), wenn Die Kapazität von X ist definiert durch cap(X) := Lemma 3 Sei N ein Netzwerk und f ein Fluß in N und X ein beliebiger s-t-Schnitt. Dann gilt val(f ) = Satz 2 (MaxFlowMinCut-Theorem) Sei N ein Netzwerk. Dann gilt: Übung 15 Bestimmen Sie einen minimalen Schnitt im folgenden Graphen. Wie groß ist der maximale s,t-Fluss? Können Sie anhand eines oder mehrerer minimaler Schnitte einen maximalen s,t-Fluss bestimmen? 2 v1 2 v4 1 7 5 s v3 3 4 t 4 5 6 6 v2 v5 3 28 Der Algorithmus von Ford-Fulkerson Definition 8 (Restnetzwerk) Sei N = (V, A, s, t, c) ein Netzwerk und f ein Fluss in N . Das Restnetzwerk von N bezüglich f ist definiert als Nf := (V, Af , s, t, cf ), wobei wir zunächst die Kapazitätsfunktion c mittels c(x, y) := 0 für (x, y) ∈ / A auf ganz V × V erweitern. Dann setzen wir ,falls f (x, y) > 0 ,falls f (y, x) > 0 cf (x, y) := ,sonst sowie Af := Lemma 4 Wenn f ein Fluss in N und W ein gerichteter Pfad im Restnetzerk Nf sind, dann sei 0 < δ := mine∈W cf (e) und definiere f ′ wie folgt: 1. Falls (x, y) ∈ W und δ < f (y, x), setze f ′ (x, y) := 0 und f ′ (y, x) := f (y, x) − δ. 2. Falls (x, y) ∈ W und δ ≥ f (y, x), setze f ′ (x, y) := f (x, y) + δ − f (y, x) und f ′ (y, x) := 0. 3. Falls (x, y) 6∈ W und (y, x) 6∈ W , setze f ′ (x, y) := f (x, y). Dann ist f ′ ein Fluss in N mit val(f ′ ) > val(f ). (Wir sagen, dass wir f ′ aus f durch Augmentieren von f entlang von W erhalten haben.) Algorithmus 11 (Ford-Fulkerson) Input: Netzwerk N = (V, A, s, t, c) Output: Fluss f 1. f := 0 2. 3. Laufzeit: 29 Übung 16 Betrachten sie das folgende Netzwerk N mit den angegebenen Flusskapazitäten: 12 v1 v4 20 16 s 4 10 9 t 7 4 13 v2 v3 14 Berechnen Sie mit Hilfe des Algorithmus von Ford-Fulkerson einen maximalen Fluss von N . Geben Sie dabei in jedem Schritt das Restnetzwerk und den augmentierenden Pfad an. 30 Der Algorithmus von Edmond-Karp Dieser ist eine Modifikation des Ford-Fulkerson-Algorithmus. Algorithmus 12 (Edmonds-Karp) ~ s, t, c) Input: Netzwerk N = (V, E, Output: Fluss f 1. f := 0 2. Solange ∃ augmentierenden s-t-Pfad P in Gf 2a. Konstruktion bzw. Aktualisierung von Gf 2b. 3. Für jede Kante e auf P erhöhe den Fluss um cf (P ) = min{Restkapazität auf Kanten in P }. Laufzeit: 31 Übung 17 Sei N = (V, A, s, t, c) ein Netzwerk. Sind die folgenden Aussagen richtig oder falsch? (a) Sind in N alle Kapazitäten ganzzahlig, so gibt es einen Fluss maximalen Wertes, in dem jede Kante einen ganzzahligen Flusswert hat. (b) Sind in N alle Kapazitäten ganzzahlig, so gibt es keinen Fluss maximalen Wertes, in dem eine Kante einen nicht-ganzzahligen Flusswert hat. (c) Wenn jede Kapazität in N mit einer positiven Zahl λ multipliziert wird, dann bleibt jeder minimale Schnitt ein minimaler Schnitt des geänderten Netzwerkes. (d) Wenn zu jeder Kapazität in N eine positive Zahl λ addiert wird, dann bleibt jeder minimale Schnitt ein minimaler Schnitt des geänderten Netzwerkes. (e) Das Restnetzwerk von N zu einem gegebenen Fluss ist eindeutig. 32 Matchings Definition 9 (Matching, maximales, größtes, perfektes, Matchingzahl) Sei G = (V, E) ein Graph. • Eine Menge M ⊆ E heißt Matching, falls • M heißt – maximales Matching, wenn – größtes Matching, wenn – perfektes Matching, wenn Bemerkung 3 Es gilt: M maximales Matching M größtes Matching 33 M perfektes Matching Der Flussalgorithmus Funktionsweise: • • • • Laufzeit: 34 Übung 18 Bestimmen Sie mit Hilfe des Flussalgorithmus ein maximales Matching im folgenden Graphen: 8 6 7 3 4 1 2 35 9 5