Effiziente Algorithmen Einführung 1 Inhalt 1. Flußprobleme 2. Matching. Lineares Programmieren 4. Ganzzahliges Programmieren 5. NP-Vollständigkeit 6. Approximationsalgorithmen 7. Backtracking und Branch-and-Bound 8. Randomisierte Algorithmen 9. Online-Algorithmen
Effiziente Algorithmen Einführung 2 Literatur Sehr empfehlenswertes Buch. Es enthält einen Überblick über die wichtigsten Entwurfstechniken für Algorithmen und einen sehr vollständigen Überblick über bekannte Algorithmen mit Verweisen. Steven S. Skiena: The Algorithm Design Manual. Springer Verlag. Preis: US $69.95, Hardcover mit CD-ROM.
Effiziente Algorithmen Einführung Literatur Sehr umfangreiches, modernes Buch. Sehr gut geschrieben. Enthält alle wichtigen Algorithmen. Nur ein Buch dieses! Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest: Introduction To Algorithms. MIT Press. Preis: US $69.95, Hardcover, 1028 Seiten!
Effiziente Algorithmen Flußprobleme 4 Netzwerkfluß (Wiederholung der Grundlagen aus DSAL) Gegeben ist ein System von Wasserrohren: Quelle s t Senke Die Kapazität jedes Rohres ist, 5 oder 8l/s. Frage: Wieviel Wasser kann von der Quelle zur Senke fließen?
Effiziente Algorithmen Flußprobleme 5 Netzwerkfluß Antwort: Maximal 11l/s sind möglich. s t
Effiziente Algorithmen Flußprobleme 6 s-t-netzwerke Ein s-t-netzwerk (flow network) ist ein gerichteter Graph G = (V,E), wobei 1. jede Kante (u,v) E eine Kapazität c(u,v) 0 hat, 2. es eine Quelle s V und eine Senke t V gibt. Es ist bequem, anzunehmen daß jeder Knoten auf einem Pfad von s nach t liegt. Falls (u,v) / E setzen wir c(u,v) = 0. Es kann Kanten (u,v) und (v,u) mit verschiedener Kapazität geben.
Effiziente Algorithmen Flußprobleme 7 Beispiel eines s-t-netzwerks v 1 12 v 16 20 s 10 4 9 7 t 1 4 v 2 14 v 4 Die Kanten sind mit den Kapazitäten c(u,v) beschriftet.
Effiziente Algorithmen Flußprobleme 8 Flüsse Ein Fluß ist eine Funktion f: V V R, die Paare von Knoten auf reelle Zahlen abbildet und diese Bedingungen erfüllt: Zulässigkeit: Für u,v V gilt f(u,v) c(u,v). Symmetrie: Für u,v V gilt f(u,v) = f(v,u). Flußerhaltung: Für u V {s,t} gilt v V f(u,v) = 0. Der Wert f eines Flusses ist definiert als f = u V f(s,u). Dies ist gerade der Gesamtfluß aus der Quelle heraus.
Effiziente Algorithmen Flußprobleme 9 Maximale Flüsse Das Problem des maximalen Flusses: Gegeben: Ein s-t-netzwerk. Gesucht: Ein Fluß mit maximalem Wert.
Effiziente Algorithmen Flußprobleme 10 Was ist der maximale Fluß? v 1 12 v 16 20 s 10 4 9 7 t 1 4 v 2 14 v 4
Effiziente Algorithmen Flußprobleme 11 Der maximale Fluß ist 2 v 1 12/12 v 12/16 19/20 s 10 4 9 7/7 t 11/1 4/4 v 2 11/14 v 4 Die Kanten sind mit c(u,v) beschriftet oder mit f(u,v)/c(u,v), falls f(u,v) > 0.
Effiziente Algorithmen Flußprobleme 12 Andere optimale Lösungen 14/16 v 1 12/12 v 19/20 s 2/10 4 9 7/7 t 9/1 v 2 11/14 10/16 v 4 v 1 4/4 12/12 v 19/20 s 10 2/4 9 7/7 t 1/1 v 2 11/14 v 4 4/4
Effiziente Algorithmen Flußprobleme 1 Mehrfache Quellen oder Senken s 10 5 t 6 s 2 10 5 t 2 6 s 1 10 5 t 1 Mehrfache Quellen oder Senken sind eine Verallgemeinerung des Problem des maximalen Flusses.
Effiziente Algorithmen Flußprobleme 14 Mehrfache Quellen oder Senken s 10 5 t 6 s s 2 10 5 t 2 t 6 s 1 10 5 t 1 Neue Superquelle und Supersenke hinzufügen
Effiziente Algorithmen Flußprobleme 15 Existenz des maximalen Flusses Existiert stets der maximale Fluß max { f f ist ein s-t-fluß in G }? Ja, denn die Menge aller Flüsse ist abgeschlossen im R m und sie ist nicht leer. Die stetige Funktion, die einen Fluß auf ihren Wert abbildet, hat daher ein Maximum: f = u V f(s, u) ist stetig!
Effiziente Algorithmen Flußprobleme 16 Einige Notationen Es ist bequem einige Abkürzungen zu verwenden: f(x,y) = f(x,y) für X,Y V x X y Y f(x,y) = y Y f(x,y) für Y V f(x,y) = x Xf(x,y) für X V X y statt X {y}
Effiziente Algorithmen Flußprobleme 17 Lemma A Falls f ein s-t-fluß für G = (V,E) ist, dann gilt: 1. f(x,x) = 0 für X V 2. f(x,y) = f(y,x) für X,Y V. f(x Y,Z) = f(x,z)+f(y,z) für X,Y,Z V mit X Y = 4. f(z,x Y) = f(z,x)+f(z,y) für X,Y,Z V mit X Y = Dieses Lemma ist sehr nützlich, um wichtige Eigenschaften über Flüsse abzuleiten.
Effiziente Algorithmen Flußprobleme 18 Lemma A Um Lemma A zu beweisen, dürfen wir nur die Eigenschaften eines s-t-flusses verwenden, also Zulässigkeit, Symmetrie und Flußerhaltung. Beweis für f(x,x) = 0: f(x,x) = 1 ( 2 = 1 ( 2 = 1 2 x 1 X x 1 X x 1 X x 2 X x 2 X x 2 X f(x 1,x 2 )+ x 1 X f(x 1,x 2 )+ x 1 X x 2 X x 2 X ( ) f(x 1,x 2 )+f(x 2,x 1 ) ) f(x 1,x 2 ) ) f(x 2,x 1 ) = 0 Hier genügt die Symmetrie allein! (Rest als Übungsaufgabe.)
Effiziente Algorithmen Flußprobleme 19 Anwendung des Lemmas Der Fluß in die Senke sollte intuitiv dem Fluß aus der Quelle entsprechen: Beweis mit Lemma A: f(s,v) = f(v,t) f(s,v) = f(v,v) f(v s,v) = f(v s,v) = f(v,v s) = f(v,t)+f(v,v s t) = f(v, t) wegen Flußerhaltung
Effiziente Algorithmen Flußprobleme 20 Definition: Residualnetzwerke Netzwerk minus Fluß = Residualnetzwerk Gegeben ist ein Netzwerk G = (V,E) und ein Fluß f. Das Residualnetzwerk G f = (V,E f ) zu G und f ist definiert vermöge E f = {(u,v) V V c f (u,v) > 0}, wobei c f (u,v) = c(u,v) f(u,v). c f ist die Restkapazität. Das s-t-netzwerk G f hat die Kapazitäten c f.
Effiziente Algorithmen Flußprobleme 21 Beispiel 11/16 v 1 12/12 v 15/20 s 10 1/4 4/9 7/7 t s-t-netzwerk mit Fluß f 8/1 v 2 11/14 v 4 4/4 v 1 12 v 11 15 Residualnetzwerk G f s 5 5 8 11 v 2 5 11 4 v 4 7 5 4 t
Effiziente Algorithmen Flußprobleme 22 Augmentierende Pfade Ein s-t-pfad p in G f heißt augmentierender Pfad. c f (p) = min{c f (u,v) (u,v) ist auf p} heißt Restkapazität von p. Beispiel: s 11 5 v 1 5 11 8 v 2 12 5 4 11 v v 4 7 5 15 4 t Die Restkapazität dieses Pfades ist 4.
Effiziente Algorithmen Flußprobleme 2 Die Ford Fulkerson Methode Initialisiere Fluß f zu 0 while es gibt einen augmentierenden Pfad p do augmentiere f entlang p return f f p (u,v) = Augmentiere f entlang p: f := f +f p f p ist ein Fluß in G f c f (p) falls (u,v) auf p c f (p) falls (v,u) auf p 0 sonst
Effiziente Algorithmen Flußprobleme 24 Die Ford Fulkerson Methode s t Anfangs ist der Fluß 0. Der augmentierende Pfad ist rot eingezeichnet.
Effiziente Algorithmen Flußprobleme 25 Die Ford Fulkerson Methode s t Der augmentierende Pfad hat Kapazität 5.
Effiziente Algorithmen Flußprobleme 26 Die Ford Fulkerson Methode s t Der augmentierende Pfad hat Kapazität.
Effiziente Algorithmen Flußprobleme 27 Die Ford Fulkerson Methode s t Jetzt gibt es keinen augmentierenden Pfad mehr. Der Fluß ist maximal.
Effiziente Algorithmen Flußprobleme 28 Lemma B Korrektheit Set G = (V,E) ein s-t-netzwerk und f ein Fluß in G. Sei f ein Fluß in G f. Dann ist f +f ein Fluß in G. Konsequenz: Die Ford Fulkerson Methode berechnet einen Fluß. Beweis: Wir müssen zeigen, daß f +f zulässig, symmetrisch und flußerhaltend ist.
Effiziente Algorithmen Flußprobleme 29 Beweis (Symmetrie) (f +f )(u,v) = f(u,v)+f (u,v) = f(v,u) f (v,u) = (f(v,u)+f (v,u)) = (f +f )(v,u)
Effiziente Algorithmen Flußprobleme 0 Beweis (Flußerhaltung) Sei u V {s,t}. (f +f )(u,v) = f(u,v)+f (u,v) = 0+0 = 0
Effiziente Algorithmen Flußprobleme 1 Beweis (Zulässigkeit) (f +f )(u,v) = f(u,v)+f (u,v) f(u,v)+c f (u,v) = f(u,v)+(c(u,v) f(u,v)) = c(u, v) Der Beweis verwendet, daß f ein Fluß in G f ist, aber nicht, daß f ein Fluß in G ist.
Effiziente Algorithmen Flußprobleme 2 Laufzeit der Ford Fulkerson Methode s t
Effiziente Algorithmen Flußprobleme Laufzeit der Ford Fulkerson Methode s t
Effiziente Algorithmen Flußprobleme 4 Laufzeit der Ford Fulkerson Methode s t
Effiziente Algorithmen Flußprobleme 5 Laufzeit der Ford Fulkerson Methode s t
Effiziente Algorithmen Flußprobleme 6 Laufzeit der Ford Fulkerson Methode s t
Effiziente Algorithmen Flußprobleme 7 Laufzeit der Ford Fulkerson Methode s t
Effiziente Algorithmen Flußprobleme 8 Laufzeit der Ford Fulkerson Methode s t
Effiziente Algorithmen Flußprobleme 9 Laufzeit der Ford Fulkerson Methode s t
Effiziente Algorithmen Flußprobleme 40 Laufzeit der Ford Fulkerson Methode s t
Effiziente Algorithmen Flußprobleme 41 Laufzeit der Ford Fulkerson Methode Ein Flußproblem ist integral, wenn alle Kapazitäten ganzzahlig sind. Theorem. Die Ford Fulkerson Methode benötigt nur O(f ) Iterationen, um ein integrales Flußproblem zu lösen, falls der Wert eines maximalen Flusses f ist. Beweis. In jeder Iteration wird der Wert des Flusses um c f (p) 1 erhöht. Er ist anfangs 0 und am Ende f. Korollar. Bei rationalen Kapazitäten terminiert die Ford Fulkerson Methode.
Effiziente Algorithmen Flußprobleme 42 Schnitte in Netzwerken Ein Schnitt (S, T) in einem s-t-netzwerk G = (V, E) ist eine Partition S T = V, S T = mit s S und t T. Wenn f ein Fluß in G ist, dann ist f(s,t) der Fluß über (S,T). Die Kapazität von (S, T) ist c(s, T). Ein minimaler Schnitt ist ein Schnitt mit minimaler Kapazität.
Effiziente Algorithmen Flußprobleme 4 Schnitte in Netzwerken s v S 1 v 2 11/16 8/1 12/12 10 1/4 4/9 11/14 v Tt 7/7 t 4/4 v 4 15/20 Der Fluß über (S,T) ist 19. Die Kapazität von (S,T) ist 26.
Effiziente Algorithmen Flußprobleme 44 Schnitte in Netzwerken v 1 S11/16 T s 10 1/4 7/7 4/9 8/1 v 2 12/12 11/14 v v 4 15/20 t 4/4 Der Fluß über (S,T) ist 19. Die Kapazität von (S,T) ist 29.
Effiziente Algorithmen Flußprobleme 45 Schnitte in Netzwerken 11/16 v 1 12/12 v 15/20 s 8/1 10 1/4 STt v 2 4/9 11/14 v 4 7/7 4/4 t Der Fluß über (S,T) ist 19. Die Kapazität von (S,T) ist 2.
Effiziente Algorithmen Flußprobleme 46 Lemma C Fluß über einen Schnitt Der Fluß über einen Schnitt und der Wert des Flusses sind identisch, d.h. f(s,t) = f. Beweis f(s,t) = f(s,v) f(s,v T) = f(s,v) f(s,s) Spezialfälle = f(s,v) = f(s,v)+f(s s,v) = f(s,v) = f f = f(s,v s) = f(v t,t)
Effiziente Algorithmen Flußprobleme 47 Theorem Max-flow Min-cut Theorem Sei f ein Fluß im s-t-netzwerk G = (V,E). Dann sind äquivalent: 1. f ist ein maximaler Fluß 2. In G f gibt es keinen augmentierenden Pfad. f = c(s,t) für einen Schnitt (S,T) Folgerungen Falls die Ford Fulkerson Methode terminiert, berechnet sie einen maximalen Fluß. Die Kapazität eines kleinsten Schnittes gleicht dem Wert eines größten Flusses.
Effiziente Algorithmen Flußprobleme 48 Beweis 1. 2. Sei f ein maximaler Fluß. Nehmen wir an, es gebe einen augmentierenden Pfad p. Dann ist f +f p ein Fluß in G mit f +f p > f. Das ist ein Widerspruch zur Maximalität von f.
Effiziente Algorithmen Flußprobleme 49 Beweis 2.. G f hat keinen s-t-pfad. S := {v V es gibt einen s-v-pfad in G f } T := V S Dann ist (S, T) ein Schnitt und es gilt f(u, v) = c(u, v) für alle u S, v T. Nach Lemma C gilt dann f(s,t) = c(s,t) = f.
Effiziente Algorithmen Flußprobleme 50 Beweis. 1. Sei f ein beliebiger Fluß. f = f(s,t) = u S v T u S v T = c(s,t) f(u,v) c(u, v) Der Wert jedes Flusses ist also höchstens c(s,t). Erreicht er sogar c(s,t) ist er folglich maximal.
Effiziente Algorithmen Flußprobleme 51 Wo ist ein minimaler Schnitt? 6 8 7 8 1 5 2 6 4 2 7 1 8 8 4 1 1 5 4 4 1 6 6 8 1 8 1
Effiziente Algorithmen Flußprobleme 52 Wie findet man einen minimalen Schnitt? 1. Einen maximalen Fluß berechnen. 2. Eine Kante (u, v) ist kritisch, wenn c(u, v) = f(u, v).. S besteht aus Knoten, die von s aus über unkritische Kanten erreicht werden können. 4. T besteht aus allen anderen Knoten. Es gibt aber bessere, direkte Methoden!