SS11 Effiziente Algorithmen 5. Kapitel: Dynamische Programmierung

Ähnliche Dokumente
5.2 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) Kürzeste Wege zwischen allen Knoten. Eingabe: Gerichteter Graph G =(V, E, c)

WS18 Algorithmen und Datenstrukturen 11. Kapitel Dynamische Programmierung

5.4 Das Rucksackproblem

Algorithmen und Datenstrukturen 2

6.1. Ein Approximationsalgorithmus für das Rucksackproblem

2. Das single-source-shortest-path-problem

Algorithmen & Komplexität

Kap. 6.6: Kürzeste Wege

Kap. 6.6: Kürzeste Wege

8.4 Digraphen mit negativen Kantengewichten Grundsätzliches Betrachte Startknoten s und einen Kreis C mit Gesamtlänge < 0.

4.2 Minimale Spannbäume: Der Algorithmus von Jarník/Prim Definition 4.2.1

Vorlesung Datenstrukturen

Kürzeste (billigste) Wege

Datenstrukturen und Algorithmen (SS 2013)

Informatik II, SS 2014

10 Kürzeste Pfade SSSP-Problem

2.4 Starke Zusammenhangskomponenten in Digraphen

Vorlesung 2 KÜRZESTE WEGE

Algo&Komp. - Wichtige Begriffe Mattia Bergomi Woche 6 7

Lernmodul 7 Algorithmus von Dijkstra

Effiziente Algorithmen

Fortgeschrittene Netzwerk- und Graph-Algorithmen

2. November Gradfolgen Zusammenhang Kürzeste Wege. H. Meyerhenke: Algorithmische Methoden zur Netzwerkanalyse 37

Grundlagen: Algorithmen und Datenstrukturen

Teil 2: Graphenalgorithmen

12. Der Algorithmus von Dijkstra. Informatik II für Verkehrsingenieure

Folien aus der Vorlesung Optimierung I SS2013

Technische Universität München Zentrum Mathematik. Optimierung 2, WS 2008/09 Übungsblatt 12

Kürzeste Wege in Graphen

Gliederung. Algorithmen und Datenstrukturen II. Graphen: All-pairs shortest paths. Graphen: All-pairs shortest paths. Graphen: Kürzeste Pfade III

Kürzeste Wege. Ein Startknoten, nichtnegative Gewichte

Datenstrukturen & Algorithmen Lösungen zu Blatt 11 FS 14

Wintersemester 2004/ Februar 2005

1 Kürzeste Pfade in Graphen

p = (v 0, v 1,..., v k )

lässt sich auch ableiten, dass es einen augmentierenden Pfad der Länge höchstens

Das Problem des Handlungsreisenden

Fortgeschrittene Netzwerk- und Graph-Algorithmen

Algorithmen und Datenstrukturen Kapitel 9. und

Algorithmen und Datenstrukturen

Algorithmen I. Prof. Jörn Müller-Quade Institut für Theoretische Informatik Web:

21. Greedy Algorithmen. Aktivitätenauswahl, Fractional Knapsack Problem, Huffman Coding Cormen et al, Kap. 16.1, 16.3

WS 2009/10. Diskrete Strukturen

Die Klasse NP und die polynomielle Reduktion. Prof. Dr. Berthold Vöcking Lehrstuhl Informatik 1 Algorithmen und Komplexität RWTH Aachen

Die Klasse NP und die polynomielle Reduktion

16. All Pairs Shortest Path (ASPS)

EDM, Algorithmen und Graphenspeicherung

Vorlesung 2 KÜRZESTE WEGE

Datenstrukturen und Algorithmen. Christian Sohler FG Algorithmen & Komplexität

Bemerkung: Es gibt Algorithmen für minimale Spannbäume der Komplexität O(m + n log n) und, für dünnbesetzte Graphen, der Komplexität O(m log n), wobei

Kapitel 4: Netzplantechnik Gliederung der Vorlesung

Graphentheorie. Kürzeste Wege. Kürzeste Wege. Kürzeste Wege. Rainer Schrader. 25. Oktober 2007

Aufgaben zur Klausurvorbereitung

Theoretische Grundlagen der Informatik

Kürzeste-Wege-Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Tutorium Übungsaufgaben

Übersicht. Datenstrukturen und Algorithmen. Das Rechenproblem: kürzeste Pfade. Übersicht. Vorlesung 17: Kürzeste Pfade (K24) Bellman-Ford Dijkstra

2. Klausur Datenstrukturen und Algorithmen SS 2014

Klausur Algorithmentheorie

21. Dynamic Programming III

Datenstrukturen und Algorithmen 2. Klausur SS 2001

Klausur Algorithmentheorie

Grundlagen: Algorithmen und Datenstrukturen

ADS: Algorithmen und Datenstrukturen 2

Algorithmen II Vorlesung am

Algorithmen und Datenstrukturen Kapitel 9. und

3.3 Optimale binäre Suchbäume

Single Source Sortest Path Negative Kreise All-Pair Shortest Path Problem Minimum Mean Cycle Zusammenfassung. Shortest Paths

Von Aachen nach Halle...

Kürzeste Pfade. Organisatorisches. VL-17: Kürzeste Pfade. (Datenstrukturen und Algorithmen, SS 2017) Walter Unger

Effiziente Algorithmen I

Algorithmen II Vorlesung am

Datenstrukturen & Algorithmen Lösungen zu Blatt 10 FS 16

Algorithmen und Datenstrukturen 2

Teil 2: Graphenalgorithmen

Algorithmen und Datenstrukturen

Vorlesung Datenstrukturen

Aufgabe 8. 1 Arbeitsweise illustrieren. 2 Korrektheitsbeweis führen. 3 Laufzeitanalyse durchführen.

1.Aufgabe: Minimal aufspannender Baum

Algorithmen und Datenstrukturen 2-1. Seminar -

Wiederholung. Divide & Conquer Strategie

Theoretische Grundlagen der Informatik

Algorithmen und Datenstrukturen 2 VU 3.0 Nachtragstest SS Oktober 2016

ADS: Algorithmen und Datenstrukturen 2

Kap. 7.3 Enumerationsverfahren Kap. 7.4 Branch-and-Bound Kap. 7.5 Dynamische Programmierung

Berechnung von Abständen

Effiziente Algorithmen und Datenstrukturen: Kürzeste Wege

5. Bäume und Minimalgerüste

4. Kreis- und Wegeprobleme Abstände in Graphen

Lösungen von Übungsblatt 12

Erinnerung VL

NAME, VORNAME: Studiennummer: Matrikel:

Probleme aus NP und die polynomielle Reduktion

Algorithmen und Komplexität Lösungsvorschlag zu Übungsblatt 8

3 Klassifikation wichtiger Optimierungsprobleme

Algorithmen & Komplexität

Transkript:

SS11 Effiziente Algorithmen 5. Kapitel: Dynamische Programmierung Martin Dietzfelbinger Juni/Juli 2011 FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5

Kapitel 5: Dynamische Programmierung Typische Eigenschaften des Ansatzes sind: Dynamische Programmierung Identifizierung von (vielen) Teilproblemen. Identifizierung einfacher Basisfälle. Formulierung einer Version der Eigenschaft Substrukturen optimaler Strukturen müssen optimal sein Daraus: Rekursionsgleichungen für Werte optimaler Lösungen: Bellman sche Optimalitätsgleichungen Iterative Berechnung der optimalen Werte (und Strukturen). FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 1

5.1 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) (Zentrales Beispiel) Kürzeste Wege zwischen allen Knoten. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 2

5.1 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) (Zentrales Beispiel) Kürzeste Wege zwischen allen Knoten. Eingabe: Gerichteter Graph G = (V, E, c) mit V = {1,..., n} und E {(v, w) 1 v, w n, v w}. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 2

5.1 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) (Zentrales Beispiel) Kürzeste Wege zwischen allen Knoten. Eingabe: Gerichteter Graph G = (V, E, c) mit V = {1,..., n} und E {(v, w) 1 v, w n, v w}. c: E R {+ }: Gewichts-/Kosten-/Längenfunktion. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 2

5.1 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) (Zentrales Beispiel) Kürzeste Wege zwischen allen Knoten. Eingabe: Gerichteter Graph G = (V, E, c) mit V = {1,..., n} und E {(v, w) 1 v, w n, v w}. c: E R {+ }: Gewichts-/Kosten-/Längenfunktion. 2 1 6 3 2 3 1 1 4 3 4 FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 2

Länge eines Weges p = (v = v 0, v 1,..., v r = w) ist c(v s 1, v s ). 1 s r FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 3

Länge eines Weges p = (v = v 0, v 1,..., v r = w) ist 1 s r c(v s 1, v s ). Gesucht: für jedes Paar (v, w), 1 v, w n: Länge S(v, w) eines kürzesten Weges von v nach w. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 3

Länge eines Weges p = (v = v 0, v 1,..., v r = w) ist 1 s r c(v s 1, v s ). Gesucht: für jedes Paar (v, w), 1 v, w n: Länge S(v, w) eines kürzesten Weges von v nach w. Algorithmus von Dijkstra löst das Single-Source-Shortest-Paths-Problem (SSSP-Problem) im Fall nicht negativer Kantengewichte. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 3

Länge eines Weges p = (v = v 0, v 1,..., v r = w) ist 1 s r c(v s 1, v s ). Gesucht: für jedes Paar (v, w), 1 v, w n: Länge S(v, w) eines kürzesten Weges von v nach w. Algorithmus von Dijkstra löst das Single-Source-Shortest-Paths-Problem (SSSP-Problem) im Fall nicht negativer Kantengewichte. Hier: Algorithmus von Floyd-Warshall. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 3

Länge eines Weges p = (v = v 0, v 1,..., v r = w) ist 1 s r c(v s 1, v s ). Gesucht: für jedes Paar (v, w), 1 v, w n: Länge S(v, w) eines kürzesten Weges von v nach w. Algorithmus von Dijkstra löst das Single-Source-Shortest-Paths-Problem (SSSP-Problem) im Fall nicht negativer Kantengewichte. Hier: Algorithmus von Floyd-Warshall. Wir verlangen: Es darf keine Kreise mit negativem Gesamtgewicht geben: ( ) v = v 0, v 1,..., v r = v Kreis 1 s r c(v s 1, v s ) 0. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 3

Grund: Wenn es einen solchen Kreis von v nach v gibt, und irgendein Weg von v nach w existiert, dann gibt es Wege von v nach w mit beliebig stark negativer Länge die Frage nach einem kürzesten Weg ist sinnlos. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 4

Grund: Wenn es einen solchen Kreis von v nach v gibt, und irgendein Weg von v nach w existiert, dann gibt es Wege von v nach w mit beliebig stark negativer Länge die Frage nach einem kürzesten Weg ist sinnlos. Konsequenzen: (1) Wenn p Weg von v nach w ist, dann existiert ein Weg p von v nach w, der nicht länger ist als p und auf dem sich keine Knoten wiederholen. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 4

Grund: Wenn es einen solchen Kreis von v nach v gibt, und irgendein Weg von v nach w existiert, dann gibt es Wege von v nach w mit beliebig stark negativer Länge die Frage nach einem kürzesten Weg ist sinnlos. Konsequenzen: (1) Wenn p Weg von v nach w ist, dann existiert ein Weg p von v nach w, der nicht länger ist als p und auf dem sich keine Knoten wiederholen. ((u,..., u)-segmente aus p herausschneiden, gegebenenfalls wiederholt. Hierdurch kann sich der Weg nicht verlängern.) FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 4

Grund: Wenn es einen solchen Kreis von v nach v gibt, und irgendein Weg von v nach w existiert, dann gibt es Wege von v nach w mit beliebig stark negativer Länge die Frage nach einem kürzesten Weg ist sinnlos. Konsequenzen: (1) Wenn p Weg von v nach w ist, dann existiert ein Weg p von v nach w, der nicht länger ist als p und auf dem sich keine Knoten wiederholen. ((u,..., u)-segmente aus p herausschneiden, gegebenenfalls wiederholt. Hierdurch kann sich der Weg nicht verlängern.) (2) Wenn es einen Weg von v nach w gibt, dann auch einen mit minimaler Länge (einen kürzesten Weg ). FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 4

Grund: Wenn es einen solchen Kreis von v nach v gibt, und irgendein Weg von v nach w existiert, dann gibt es Wege von v nach w mit beliebig stark negativer Länge die Frage nach einem kürzesten Weg ist sinnlos. Konsequenzen: (1) Wenn p Weg von v nach w ist, dann existiert ein Weg p von v nach w, der nicht länger ist als p und auf dem sich keine Knoten wiederholen. ((u,..., u)-segmente aus p herausschneiden, gegebenenfalls wiederholt. Hierdurch kann sich der Weg nicht verlängern.) (2) Wenn es einen Weg von v nach w gibt, dann auch einen mit minimaler Länge (einen kürzesten Weg ). Grund: Wegen (1) muss man nur Wege mit nicht mehr als n 1 Kanten betrachten; davon gibt es nur endlich viele. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 4

Grund: Wenn es einen solchen Kreis von v nach v gibt, und irgendein Weg von v nach w existiert, dann gibt es Wege von v nach w mit beliebig stark negativer Länge die Frage nach einem kürzesten Weg ist sinnlos. Konsequenzen: (1) Wenn p Weg von v nach w ist, dann existiert ein Weg p von v nach w, der nicht länger ist als p und auf dem sich keine Knoten wiederholen. ((u,..., u)-segmente aus p herausschneiden, gegebenenfalls wiederholt. Hierdurch kann sich der Weg nicht verlängern.) (2) Wenn es einen Weg von v nach w gibt, dann auch einen mit minimaler Länge (einen kürzesten Weg ). Grund: Wegen (1) muss man nur Wege mit nicht mehr als n 1 Kanten betrachten; davon gibt es nur endlich viele. Es kann aber mehrere kürzeste Wege von v nach w geben! FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 4

Ausgabe: Matrix S = (S(v, w)) 1 v,w n mit: S(v, w) = Länge eines kürzesten Weges von v nach w. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 5

Ausgabe: Matrix S = (S(v, w)) 1 v,w n mit: S(v, w) = Länge eines kürzesten Weges von v nach w. (, falls kein solcher Weg existiert.) FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 5

O.B.d.A.: E = V V {(v, v) v V } Nichtvorhandene Kanten (v, w) werden mit c(v, w) = repräsentiert. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 6

O.B.d.A.: E = V V {(v, v) v V } Nichtvorhandene Kanten (v, w) werden mit c(v, w) = repräsentiert. Erster Schritt: Identifiziere geeignete Teilprobleme. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 6

O.B.d.A.: E = V V {(v, v) v V } Nichtvorhandene Kanten (v, w) werden mit c(v, w) = repräsentiert. Erster Schritt: Identifiziere geeignete Teilprobleme. Gegeben ein k, 0 k n, betrachte Wege von v nach w, die unterwegs (also vom Start- und Endpunkt abgesehen) nur Knoten in {1,..., k} besuchen. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 6

O.B.d.A.: E = V V {(v, v) v V } Nichtvorhandene Kanten (v, w) werden mit c(v, w) = repräsentiert. Erster Schritt: Identifiziere geeignete Teilprobleme. Gegeben ein k, 0 k n, betrachte Wege von v nach w, die unterwegs (also vom Start- und Endpunkt abgesehen) nur Knoten in {1,..., k} besuchen. k = 0: Kein Knoten darf unterwegs besucht werden; es handelt sich nur um die Kanten (v, w) mit c(v, w) <, oder um Wege (v, v) der Länge 0. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 6

O.B.d.A.: E = V V {(v, v) v V } Nichtvorhandene Kanten (v, w) werden mit c(v, w) = repräsentiert. Erster Schritt: Identifiziere geeignete Teilprobleme. Gegeben ein k, 0 k n, betrachte Wege von v nach w, die unterwegs (also vom Start- und Endpunkt abgesehen) nur Knoten in {1,..., k} besuchen. k = 0: Kein Knoten darf unterwegs besucht werden; es handelt sich nur um die Kanten (v, w) mit c(v, w) <, oder um Wege (v, v) der Länge 0. k = 1: Es kommen nur Wege in Frage, die aus der Kante (v, w) bestehen oder aus den Kanten (v, 1) und (1, w). usw. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 6

S(v, w, k) := Länge eines kürzesten Weges von v nach w, der nur Zwischenknoten in {1,..., k} benutzt. (Falls kein solcher Weg existiert: S(v, w, k) := ) FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 7

S(v, w, k) := Länge eines kürzesten Weges von v nach w, der nur Zwischenknoten in {1,..., k} benutzt. (Falls kein solcher Weg existiert: S(v, w, k) := ) Beispiel: (Die nicht eingezeichneten Kanten haben Länge.) 2 1 3 S(2,4,0) = 6 2 4 6 1 S(2,4,1) = 5 S(2,4,2) = 5 monoton fallend 1 3 4 S(2,4,3)= 2 FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 7

Bellman sche Optimalitätsgleichungen : Betrachte Weg p von v nach w; dabei seien die Zwischenknoten v 1,..., v l 1 aus {1,..., k}: v v 1 v 2 v l 1 w FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 8

Bellman sche Optimalitätsgleichungen : Betrachte Weg p von v nach w; dabei seien die Zwischenknoten v 1,..., v l 1 aus {1,..., k}: v v 1 v 2 v l 1 w Angenommen, dieser Weg ist optimal. Dann gilt: 1) (O.B.d.A.) Der Knoten k kommt auf dem Weg höchstens einmal vor. Sonst: streiche im Weg u k k v FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 8

Bellman sche Optimalitätsgleichungen : Betrachte Weg p von v nach w; dabei seien die Zwischenknoten v 1,..., v l 1 aus {1,..., k}: v v 1 v 2 v l 1 w Angenommen, dieser Weg ist optimal. Dann gilt: 1) (O.B.d.A.) Der Knoten k kommt auf dem Weg höchstens einmal vor. Sonst: streiche im Weg u k k v das Teilstück zwischen erstem und letzten k weg: v k w FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 8

Bellman sche Optimalitätsgleichungen : Betrachte Weg p von v nach w; dabei seien die Zwischenknoten v 1,..., v l 1 aus {1,..., k}: v v 1 v 2 v l 1 w Angenommen, dieser Weg ist optimal. Dann gilt: 1) (O.B.d.A.) Der Knoten k kommt auf dem Weg höchstens einmal vor. Sonst: streiche im Weg u k k v das Teilstück zwischen erstem und letzten k weg: v k w Wegen ( ) ist der neue Weg ist nicht länger als p. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 8

2) Falls der Knoten k auf dem Weg nicht vorkommt, FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 9

2) Falls der Knoten k auf dem Weg nicht vorkommt, ist p für Zwischenknoten 1,..., k 1 optimal. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 9

2) Falls der Knoten k auf dem Weg nicht vorkommt, ist p für Zwischenknoten 1,..., k 1 optimal. 3) Falls der Knoten k auf p vorkommt, FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 9

2) Falls der Knoten k auf dem Weg nicht vorkommt, ist p für Zwischenknoten 1,..., k 1 optimal. 3) Falls der Knoten k auf p vorkommt, zerfällt p in zwei Teile v k k w }{{} Zwischenknoten k 1 }{{} Zwischenknoten k 1 die beide bezüglich der Zwischenknotenmenge {1,..., k 1} optimal sind FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 9

2) Falls der Knoten k auf dem Weg nicht vorkommt, ist p für Zwischenknoten 1,..., k 1 optimal. 3) Falls der Knoten k auf p vorkommt, zerfällt p in zwei Teile v k k w }{{} Zwischenknoten k 1 }{{} Zwischenknoten k 1 die beide bezüglich der Zwischenknotenmenge {1,..., k 1} optimal sind (sonst könnte ein Teilweg durch einen billigeren ersetzt werden, Widerspruch zur Optimalität von p). FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 9

Punkte 2) und 3) drücken aus, dass Substrukturen einer optimalen Lösung selbst wieder optimal sind. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 10

Punkte 2) und 3) drücken aus, dass Substrukturen einer optimalen Lösung selbst wieder optimal sind. Die Bellman schen Optimalitätsgleichungen für den Algorithmus von Floyd-Warshall lauten dann: FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 10

Punkte 2) und 3) drücken aus, dass Substrukturen einer optimalen Lösung selbst wieder optimal sind. Die Bellman schen Optimalitätsgleichungen für den Algorithmus von Floyd-Warshall lauten dann: S(v, w, k) = min{s(v, w, k 1), S(v, k, k 1) + S(k, w, k 1)}, für 1 v, w n, 1 k n. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 10

Punkte 2) und 3) drücken aus, dass Substrukturen einer optimalen Lösung selbst wieder optimal sind. Die Bellman schen Optimalitätsgleichungen für den Algorithmus von Floyd-Warshall lauten dann: S(v, w, k) = min{s(v, w, k 1), S(v, k, k 1) + S(k, w, k 1)}, für 1 v, w n, 1 k n. Basisfälle: S(v, v, 0) = 0. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 10

Punkte 2) und 3) drücken aus, dass Substrukturen einer optimalen Lösung selbst wieder optimal sind. Die Bellman schen Optimalitätsgleichungen für den Algorithmus von Floyd-Warshall lauten dann: S(v, w, k) = min{s(v, w, k 1), S(v, k, k 1) + S(k, w, k 1)}, für 1 v, w n, 1 k n. Basisfälle: S(v, v, 0) = 0. S(v, w, 0) = c(v, w), für v w. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 10

Wir beschreiben einen iterativen Algorithmus. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 11

Wir beschreiben einen iterativen Algorithmus. Zur Aufbewahrung der Zwischenergebnisse benutzen wir ein Array S[1..n,1..n,0..n], das durch S[v,w,0] := c(v, w), 1 v, w n, v w; S[v,v,0] := 0, 1 v n initialisiert wird. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 11

Wir beschreiben einen iterativen Algorithmus. Zur Aufbewahrung der Zwischenergebnisse benutzen wir ein Array S[1..n,1..n,0..n], das durch S[v,w,0] := c(v, w), 1 v, w n, v w; S[v,v,0] := 0, 1 v n initialisiert wird. Unser Algorithmus füllt das Array S gemäß wachsendem k aus: FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 11

Wir beschreiben einen iterativen Algorithmus. Zur Aufbewahrung der Zwischenergebnisse benutzen wir ein Array S[1..n,1..n,0..n], das durch S[v,w,0] := c(v, w), 1 v, w n, v w; S[v,v,0] := 0, 1 v n initialisiert wird. Unser Algorithmus füllt das Array S gemäß wachsendem k aus: for k from 1 to n do for v from 1 to n do for w from 1 to n do S[v,w,k] min{s[v,w,k-1], S[v,k,k-1] + S[k,w,k-1]}. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 11

Korrektheit: Folgt aus der Vorüberlegung. Es werden genau die Werte S(v, w, k) gemäß den Bellman schen Optimalitätsgleichungen ausgerechnet. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 12

Korrektheit: Folgt aus der Vorüberlegung. Es werden genau die Werte S(v, w, k) gemäß den Bellman schen Optimalitätsgleichungen ausgerechnet. Laufzeit: Drei geschachtelte Schleifen: Θ(n 3 ). FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 12

Korrektheit: Folgt aus der Vorüberlegung. Es werden genau die Werte S(v, w, k) gemäß den Bellman schen Optimalitätsgleichungen ausgerechnet. Laufzeit: Drei geschachtelte Schleifen: Θ(n 3 ). Bei dieser simplen Implementierung wird noch Platz verschwendet, da für den k-ten Schleifendurchlauf offenbar nur die (k 1)-Komponenten des Arrays S benötigt werden. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 12

Korrektheit: Folgt aus der Vorüberlegung. Es werden genau die Werte S(v, w, k) gemäß den Bellman schen Optimalitätsgleichungen ausgerechnet. Laufzeit: Drei geschachtelte Schleifen: Θ(n 3 ). Bei dieser simplen Implementierung wird noch Platz verschwendet, da für den k-ten Schleifendurchlauf offenbar nur die (k 1)-Komponenten des Arrays S benötigt werden. Man überlegt sich leicht, dass man mit zwei Matrizen auskommt, eine alte ((k 1)-Version) und eine neue (k-version), zwischen denen dann immer passend umzuschalten ist. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 12

Korrektheit: Folgt aus der Vorüberlegung. Es werden genau die Werte S(v, w, k) gemäß den Bellman schen Optimalitätsgleichungen ausgerechnet. Laufzeit: Drei geschachtelte Schleifen: Θ(n 3 ). Bei dieser simplen Implementierung wird noch Platz verschwendet, da für den k-ten Schleifendurchlauf offenbar nur die (k 1)-Komponenten des Arrays S benötigt werden. Man überlegt sich leicht, dass man mit zwei Matrizen auskommt, eine alte ((k 1)-Version) und eine neue (k-version), zwischen denen dann immer passend umzuschalten ist. Der Platzaufwand beträgt damit O(n 2 ), der Zeitbedarf offensichtlich immer noch O(n 3 ). FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 12

Dieser Spezialfall des Ansatzes dynamische Programmierung lässt noch eine weitere Verbesserung zu. Es gilt S(v, k, k) = S(v, k, k 1) und ( ) S(k, w, k) = S(k, w, k 1), für 1 v, w, k n, da wiederholtes Benutzen des Knotens k den Weg von v nach k bzw. von k nach w nicht verkürzen kann (keine Kreise mit negativer Gesamtlänge). FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 13

Dieser Spezialfall des Ansatzes dynamische Programmierung lässt noch eine weitere Verbesserung zu. Es gilt S(v, k, k) = S(v, k, k 1) und ( ) S(k, w, k) = S(k, w, k 1), für 1 v, w, k n, da wiederholtes Benutzen des Knotens k den Weg von v nach k bzw. von k nach w nicht verkürzen kann (keine Kreise mit negativer Gesamtlänge). Man kann also für die Berechnung von S(v, w, k) den alten oder den neuen Wert im S-Array benutzen. Damit erübrigt es sich, altes und neues Array zu unterscheiden, und der dritte Index k kann wegfallen: for k from 1 to n do for v from 1 to n do for w from 1 to n do S[v,w] min{s[v,w], S[v,k] + S[k,w]}. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 13

Man möchte nicht nur den Wert des kürzesten Weges kennenlernen, sondern auch zu gegebenen v, w diesen Weg konstruieren können. Hierfür benutzt man ein Hilfsarray I[1..n,1..n], in dem für jedes Paar v, w die Information gehalten wird, welches der bis zur Runde k gefundene größte Knoten ist, der für die Konstruktion eines kürzesten Weges von v nach w benötigt worden ist. Dies liefert den Floyd-Warshall-Algorithmus. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 14

5.1.1 Algorithmus Floyd-Warshall(C[1..n,1..n]) Eingabe: C[1..n,1..n]: Matrix der Kantenkosten/längen Ausgabe: S[1..n,1..n]: Kosten der kürzesten Wege I[1..n,1..n]: Hilfsarray zur Konstruktion der kürzesten Wege Datenstruktur: Matrizen S[1..n,1..n], I[1..n,1..n] Ziel: ( S[v,w] enthält S(v, w) ) ( I[v,w]: möglichst kleiner max. Knoten auf kürzestem (v, w)-weg ) (1) for v from 1 to n do (2) for w from 1 to n do (3) if v = w then S[v,w] 0; I[v,w] 0 (4) else S[v,w] C[v,w]; (5) if S[v,w] < then I[v,w] 0 else I[v,w] 1; (6) for k from 1 to n do (7) for v from 1 to n do (8) for w from 1 to n do (9) if S[v,k] + S[k,w] < S[v,w] then (10) S[v,w] S[v,k] + S[k,w]; I[v,w] k; (11) Ausgabe: S[1..n,1..n] und I[1..n,1..n]. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 15

Korrektheit: Es gilt folgende Schleifeninvariante: Nach dem Schleifendurchlauf k ist S[v, w] = S(v, w, k). (Beweis durch vollständige Induktion, unter Ausnutzung der Bellman-Gleichungen und von ( ).) Zudem: I[v, w] ist das kleinste l mit der Eigenschaft, dass es unter den kürzesten Wegen von v nach w über 1,..., k einen gibt, dessen maximaler Eintrag l ist. (Beweis durch Induktion über k.) Ein kürzester Weg von v nach w kann dann mit einer einfachen rekursiven Prozedur printpathinner rekonstruiert werden (Übung). FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 16

5.1.2 Satz Der Algorithmus von Floyd-Warshall löst das All-Pairs- Shortest-Paths- Problem in Zeit O(n 3 ) und Platz O(n 2 ). FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 17

5.2 Der Bellman-Ford-Algorithmus Zweck: Kürzeste Wege von einem Startknoten aus (SSSP: single source shortestst paths ). FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 18

5.2 Der Bellman-Ford-Algorithmus Zweck: Kürzeste Wege von einem Startknoten aus (SSSP: single source shortestst paths ). Im Unterschied zum Algorithmus von Dijkstra dürfen negative Kanten vorhanden sein. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 18

5.2 Der Bellman-Ford-Algorithmus Zweck: Kürzeste Wege von einem Startknoten aus (SSSP: single source shortestst paths ). Im Unterschied zum Algorithmus von Dijkstra dürfen negative Kanten vorhanden sein. Algorithmus liefert Fehlermeldung, wenn vom Startknoten s aus ein Kreis mit negativer Gesamtlänge erreichbar ist. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 18

5.2 Der Bellman-Ford-Algorithmus Zweck: Kürzeste Wege von einem Startknoten aus (SSSP: single source shortestst paths ). Im Unterschied zum Algorithmus von Dijkstra dürfen negative Kanten vorhanden sein. Algorithmus liefert Fehlermeldung, wenn vom Startknoten s aus ein Kreis mit negativer Gesamtlänge erreichbar ist. Wenn (s = v 0, v 1,..., v r,..., v t ) ein Weg ist mit v r = v t und c(v r, v r+1 ) +... + c(v t 1, v t ) < 0 dann kann man durch wiederholtes Durchlaufen dieses Kreises Wege mit beliebig stark negativen Kosten von s nach v t erhalten die Frage nach einem kürzesten Weg ist sinnlos. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 18

Knotenmenge: V = {1,..., n}. Menge E c: E R. von gerichteten Kanten, mit Kantengewichten Das Format des Inputs ist recht frei: Adjazenzlisten oder auch nur eine große Liste aller Kanten. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 19

Knotenmenge: V = {1,..., n}. Menge E c: E R. von gerichteten Kanten, mit Kantengewichten Das Format des Inputs ist recht frei: Adjazenzlisten oder auch nur eine große Liste aller Kanten. Datenstrukturen: Distanzarray d[1..n] Vorgängerarray p[1..n] FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 19

Knotenmenge: V = {1,..., n}. Menge E c: E R. von gerichteten Kanten, mit Kantengewichten Das Format des Inputs ist recht frei: Adjazenzlisten oder auch nur eine große Liste aller Kanten. Datenstrukturen: Distanzarray d[1..n] Vorgängerarray p[1..n] Idee: d[v] enthält einen Schätzwert (eine obere Schranke) für die Länge eines kürzesten Weges. p[v] enthält einen Vorgänger von v auf einem Weg von s nach v der Länge höchstens d[v]. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 19

Knotenmenge: V = {1,..., n}. Menge E c: E R. von gerichteten Kanten, mit Kantengewichten Das Format des Inputs ist recht frei: Adjazenzlisten oder auch nur eine große Liste aller Kanten. Datenstrukturen: Distanzarray d[1..n] Vorgängerarray p[1..n] Idee: d[v] enthält einen Schätzwert (eine obere Schranke) für die Länge eines kürzesten Weges. p[v] enthält einen Vorgänger von v auf einem Weg von s nach v der Länge höchstens d[v]. Durch eine Reihe von Operationen sollen Werte und Vorgänger so gesetzt werden, dass sie zu kürzesten Wegen gehören. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 19

Grundoperation, schon aus dem Dijkstra-Algorithmus bekannt: relax(u, v) FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 20

Grundoperation, schon aus dem Dijkstra-Algorithmus bekannt: relax(u, v) (1) if d[u] + c(u, v) < d[v] (2) then (3) p[v] u; (4) d[v] d[u] + c(u, v) ; FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 20

Grundoperation, schon aus dem Dijkstra-Algorithmus bekannt: relax(u, v) (1) if d[u] + c(u, v) < d[v] (2) then (3) p[v] u; (4) d[v] d[u] + c(u, v) ; Idee: Durch Verwenden eines s-u-weges der Länge d[u] und (u, v) als letzter Kante kann der bisherige Wert d[u] verbessert werden. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 20

5.2.1 Algorithmus Bellman-Ford(((V, E, c), s)) Eingabe: (V, E, c): Digraph mit Kantengewichten in R, Startknoten s V. Ausgabe: Wenn G keine Kreise mit negativem Gewicht hat: Ausgabe: In d, p: Baum von kürzesten Wegen; FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 21

5.2.1 Algorithmus Bellman-Ford(((V, E, c), s)) Eingabe: (V, E, c): Digraph mit Kantengewichten in R, Startknoten s V. Ausgabe: Wenn G keine Kreise mit negativem Gewicht hat: Ausgabe: In d, p: Baum von kürzesten Wegen; Datenstruktur: d[1..n]: real; p[1..n]: integer; FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 21

5.2.1 Algorithmus Bellman-Ford(((V, E, c), s)) Eingabe: (V, E, c): Digraph mit Kantengewichten in R, Startknoten s V. Ausgabe: Wenn G keine Kreise mit negativem Gewicht hat: Ausgabe: In d, p: Baum von kürzesten Wegen; Datenstruktur: d[1..n]: real; p[1..n]: integer; Initialisierung: (1) for v from 1 to n do (2) d[v] ; p[v] 1; (3) d[s] 0; p[s] s ; FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 21

5.2.1 Algorithmus Bellman-Ford(((V, E, c), s)) Eingabe: (V, E, c): Digraph mit Kantengewichten in R, Startknoten s V. Ausgabe: Wenn G keine Kreise mit negativem Gewicht hat: Ausgabe: In d, p: Baum von kürzesten Wegen; Datenstruktur: d[1..n]: real; p[1..n]: integer; Initialisierung: (1) for v from 1 to n do (2) d[v] ; p[v] 1; (3) d[s] 0; p[s] s ; Hauptschleife: (4) for i from 1 to n 1 do (5) forall (u, v) E do relax(u, v); FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 21

5.2.1 Algorithmus Bellman-Ford(((V, E, c), s)) Eingabe: (V, E, c): Digraph mit Kantengewichten in R, Startknoten s V. Ausgabe: Wenn G keine Kreise mit negativem Gewicht hat: Ausgabe: In d, p: Baum von kürzesten Wegen; Datenstruktur: d[1..n]: real; p[1..n]: integer; Initialisierung: (1) for v from 1 to n do (2) d[v] ; p[v] 1; (3) d[s] 0; p[s] s ; Hauptschleife: (4) for i from 1 to n 1 do (5) forall (u, v) E do relax(u, v); Zyklentest: (6) forall (u, v) E do (7) if d[u] + c(u, v) < d[v] then return Neg. Kreis ; FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 21

5.2.1 Algorithmus Bellman-Ford(((V, E, c), s)) Eingabe: (V, E, c): Digraph mit Kantengewichten in R, Startknoten s V. Ausgabe: Wenn G keine Kreise mit negativem Gewicht hat: Ausgabe: In d, p: Baum von kürzesten Wegen; Datenstruktur: d[1..n]: real; p[1..n]: integer; Initialisierung: (1) for v from 1 to n do (2) d[v] ; p[v] 1; (3) d[s] 0; p[s] s ; Hauptschleife: (4) for i from 1 to n 1 do (5) forall (u, v) E do relax(u, v); Zyklentest: (6) forall (u, v) E do (7) if d[u] + c(u, v) < d[v] then return Neg. Kreis ; Ergebnis: (8) return d[1..n], p[1..n]. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 21

Satz 5.2.2 Der Bellman-Ford-Algorithmus hat folgendes Verhalten: FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 22

Satz 5.2.2 Der Bellman-Ford-Algorithmus hat folgendes Verhalten: (a) Wenn es keinen von s aus erreichbaren Kreis mit negativer Gesamtlänge gibt ( negativer Kreis ), steht am Ende des Algorithmus in d[v] die Länge eines kürzesten Weges von s nach v; die Kanten (p[v], v) (mit p[v] 1) bilden einen Baum der kürzesten Wege von s aus zu den erreichbaren Knoten. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 22

Satz 5.2.2 Der Bellman-Ford-Algorithmus hat folgendes Verhalten: (a) Wenn es keinen von s aus erreichbaren Kreis mit negativer Gesamtlänge gibt ( negativer Kreis ), steht am Ende des Algorithmus in d[v] die Länge eines kürzesten Weges von s nach v; die Kanten (p[v], v) (mit p[v] 1) bilden einen Baum der kürzesten Wege von s aus zu den erreichbaren Knoten. (b) Der Algorithmus gibt Neg. Kreis aus genau dann wenn es einen von s aus erreichbaren negativen Kreis gibt. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 22

Satz 5.2.2 Der Bellman-Ford-Algorithmus hat folgendes Verhalten: (a) Wenn es keinen von s aus erreichbaren Kreis mit negativer Gesamtlänge gibt ( negativer Kreis ), steht am Ende des Algorithmus in d[v] die Länge eines kürzesten Weges von s nach v; die Kanten (p[v], v) (mit p[v] 1) bilden einen Baum der kürzesten Wege von s aus zu den erreichbaren Knoten. (b) Der Algorithmus gibt Neg. Kreis aus genau dann wenn es einen von s aus erreichbaren negativen Kreis gibt. (c) Die Laufzeit ist O( V E ). FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 22

Beweis: (c) ist klar. (a) Da es keine negativen Kreise gibt, die von s aus erreichbar sind, kann durch Herausschneiden von Kreisen aus solchen Wegen die Länge nicht steigen. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 23

Beweis: (c) ist klar. (a) Da es keine negativen Kreise gibt, die von s aus erreichbar sind, kann durch Herausschneiden von Kreisen aus solchen Wegen die Länge nicht steigen. Für jeden Weg von s nach v der Länge d gibt es einen, der keinen Kreis enthält und Länge d hat. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 23

Beweis: (c) ist klar. (a) Da es keine negativen Kreise gibt, die von s aus erreichbar sind, kann durch Herausschneiden von Kreisen aus solchen Wegen die Länge nicht steigen. Für jeden Weg von s nach v der Länge d gibt es einen, der keinen Kreis enthält und Länge d hat. Bei der Frage nach kürzesten Wegen von s aus müssen wir nur kreisfreie Wege berücksichtigen. Davon gibt es nur endlich viele. Also: d(s, v) = Länge eines Weges von s nach v mit minimalen Kosten ist wohldefiniert. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 23

Eine Runde im Algorithmus ist ein Durchlauf durch die Hauptschleife. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 24

Eine Runde im Algorithmus ist ein Durchlauf durch die Hauptschleife. Beh. 1: Es gilt stets d(s, v) d[v]. (Durch Induktion über Runden zeigt man: Wenn d[v] <, dann existiert ein Weg von s nach v der Länge d[v].) FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 24

Eine Runde im Algorithmus ist ein Durchlauf durch die Hauptschleife. Beh. 1: Es gilt stets d(s, v) d[v]. (Durch Induktion über Runden zeigt man: Wenn d[v] <, dann existiert ein Weg von s nach v der Länge d[v].) Sei nun (s = v 0, v 1,..., v r = v) ein Weg kürzester Länge von s nach v, mit r n 1. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 24

Eine Runde im Algorithmus ist ein Durchlauf durch die Hauptschleife. Beh. 1: Es gilt stets d(s, v) d[v]. (Durch Induktion über Runden zeigt man: Wenn d[v] <, dann existiert ein Weg von s nach v der Länge d[v].) Sei nun (s = v 0, v 1,..., v r = v) ein Weg kürzester Länge von s nach v, mit r n 1. Genau wie in 5.1 überlegt man sich, dass (v 0,..., v i ) ein kürzester Weg von s nach v i ist, für i = 0,..., r. ( Optimale Substruktur ). D. h.: d(s, v i ) = c(v 0, v 1 ) +... + c(v i 1, v i ), für i = 0,..., r. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 24

Beh. 2: Nach Runde i gilt d[v i ] = d(s, v i ). FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 25

Beh. 2: Nach Runde i gilt d[v i ] = d(s, v i ). Beweis durch Induktion über i. Der Fall i = 0 ist klar. Ind.-Ann.: Nach Runde i 1 gilt d[v i 1 ] = d(s, v i 1 ). Schritt: In Runde i wird irgendwann relax(v i 1, v i ) ausgeführt. Die dabei betrachtete Summe d[v i 1 ] + c(v i 1, v i ) = d(s, v i 1 ) + c(v i 1, v i ) ist genau c(v 0, v 1 ) +... + c(v i 1, v i ) = d(s, v i ). FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 25

Beh. 2: Nach Runde i gilt d[v i ] = d(s, v i ). Beweis durch Induktion über i. Der Fall i = 0 ist klar. Ind.-Ann.: Nach Runde i 1 gilt d[v i 1 ] = d(s, v i 1 ). Schritt: In Runde i wird irgendwann relax(v i 1, v i ) ausgeführt. Die dabei betrachtete Summe d[v i 1 ] + c(v i 1, v i ) = d(s, v i 1 ) + c(v i 1, v i ) ist genau c(v 0, v 1 ) +... + c(v i 1, v i ) = d(s, v i ). Wenn nicht vorher schon d[v i ] = d(s, v i ) war, wird dieser Wert jetzt eingesetzt, und p[v i ] = v i 1 gesetzt. (Wegen Beh. 1 kann nie kleinerer Wert in d[v i ] stehen.) FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 25

Beh. 2: Nach Runde i gilt d[v i ] = d(s, v i ). Beweis durch Induktion über i. Der Fall i = 0 ist klar. Ind.-Ann.: Nach Runde i 1 gilt d[v i 1 ] = d(s, v i 1 ). Schritt: In Runde i wird irgendwann relax(v i 1, v i ) ausgeführt. Die dabei betrachtete Summe d[v i 1 ] + c(v i 1, v i ) = d(s, v i 1 ) + c(v i 1, v i ) ist genau c(v 0, v 1 ) +... + c(v i 1, v i ) = d(s, v i ). Wenn nicht vorher schon d[v i ] = d(s, v i ) war, wird dieser Wert jetzt eingesetzt, und p[v i ] = v i 1 gesetzt. (Wegen Beh. 1 kann nie kleinerer Wert in d[v i ] stehen.) (Beachte: Wenn es mehrere Wege von s nach v i mit minimaler Länge gibt, kann natürlich auch p[v i ] v i 1 sein.) FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 25

Beweis von (b): : FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 26

Beweis von (b): : Annahme: Von s aus ist kein negativer Kreis erreichbar, aber in Zeile (7) wird ein v mit d[u] + c(u, v) < d[v] gefunden. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 26

Beweis von (b): : Annahme: Von s aus ist kein negativer Kreis erreichbar, aber in Zeile (7) wird ein v mit d[u] + c(u, v) < d[v] gefunden. Nach (a) folgt d(s, u) + c(u, v) < d(s, v), was offensichtlich unmöglich ist. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 26

: Sei (s = v 0,..., v r,..., v t ) mit r < t und v r = v t der Weg zu einem erreichbaren Kreis. Wenn der Test in Zeile (7) stets ergibt, gilt: d[v r ] + c(v r, v r+1 ) d[v r+1 ] d[v r+1 ] + c(v r+1, v r+2 ) d[v r+2 ] d[v t 1 ] + c(v t 1, v t ) d[v t ]. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 27

: Sei (s = v 0,..., v r,..., v t ) mit r < t und v r = v t der Weg zu einem erreichbaren Kreis. Wenn der Test in Zeile (7) stets ergibt, gilt: d[v r ] + c(v r, v r+1 ) d[v r+1 ] d[v r+1 ] + c(v r+1, v r+2 ) d[v r+2 ] d[v t 1 ] + c(v t 1, v t ) d[v t ]. Addition dieser Ungleichungen und Vereinfachen liefert, unter Benutzung von v r = v t : was zu zeigen war. c(v r, v r+1 ) +... + c(v t 1, v t ) 0, FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 27

Dass die p[v]-werte die gewünschte Bedeutung haben, zeigt man nun leicht. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 28

Problemstellung: 5.3 Das 0-1-Rucksackproblem Eingabe: Ganzzahlige Volumina a 1,..., a n > 0, Nutzenwerte c 1,..., c n > 0, ganzzahlige Volumenschranke b. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 29

Problemstellung: 5.3 Das 0-1-Rucksackproblem Eingabe: Ganzzahlige Volumina a 1,..., a n > 0, Nutzenwerte c 1,..., c n > 0, ganzzahlige Volumenschranke b. Ausgabe: I {1,..., n} derart, dass i I a i i I c i möglichst groß. b und FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 29

Problemstellung: 5.3 Das 0-1-Rucksackproblem Eingabe: Ganzzahlige Volumina a 1,..., a n > 0, Nutzenwerte c 1,..., c n > 0, ganzzahlige Volumenschranke b. Ausgabe: I {1,..., n} derart, dass i I a i i I c i möglichst groß. b und Im Gegensatz zum fraktionalen Rucksackproblem (Kap. 3.1) ist es hier nicht erlaubt, Objekte zu teilen. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 29

Problemstellung: 5.3 Das 0-1-Rucksackproblem Eingabe: Ganzzahlige Volumina a 1,..., a n > 0, Nutzenwerte c 1,..., c n > 0, ganzzahlige Volumenschranke b. Ausgabe: I {1,..., n} derart, dass i I a i i I c i möglichst groß. b und Im Gegensatz zum fraktionalen Rucksackproblem (Kap. 3.1) ist es hier nicht erlaubt, Objekte zu teilen. Der Lösungsvektor (x 1,..., x n ) muss also 0-1-wertig sein. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 29

Ansatz: Dynamische Programmierung. Identifizierung von nützlichen Teilproblemen: FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 30

Ansatz: Dynamische Programmierung. Identifizierung von nützlichen Teilproblemen: Für 1 k n und 0 v b definieren wir { m(k, v) := max c i I {1,..., k} i I i I a i v }. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 30

Ansatz: Dynamische Programmierung. Identifizierung von nützlichen Teilproblemen: Für 1 k n und 0 v b definieren wir { m(k, v) := max c i I {1,..., k} i I i I a i v }. Das Teilproblem P(k, v) besteht darin, ein I {1,..., k} mit i I a i v zu finden, das i I c i maximiert. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 30

Ansatz: Dynamische Programmierung. Identifizierung von nützlichen Teilproblemen: Für 1 k n und 0 v b definieren wir { m(k, v) := max c i I {1,..., k} i I i I a i v }. Das Teilproblem P(k, v) besteht darin, ein I {1,..., k} mit i I a i v zu finden, das i I c i maximiert. Wir suchen also nach einer Auswahl, die nur Objekte Nummer 1,..., k benutzt, eine modifizierte Gewichtsschranke v einhält, und den Nutzen maximiert. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 30

Ansatz: Dynamische Programmierung. Identifizierung von nützlichen Teilproblemen: Für 1 k n und 0 v b definieren wir { m(k, v) := max c i I {1,..., k} i I i I a i v }. Das Teilproblem P(k, v) besteht darin, ein I {1,..., k} mit i I a i v zu finden, das i I c i maximiert. Wir suchen also nach einer Auswahl, die nur Objekte Nummer 1,..., k benutzt, eine modifizierte Gewichtsschranke v einhält, und den Nutzen maximiert. Trivial: m(0, v) = 0 für alle v. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 30

Ansatz: Dynamische Programmierung. Identifizierung von nützlichen Teilproblemen: Für 1 k n und 0 v b definieren wir { m(k, v) := max c i I {1,..., k} i I i I a i v }. Das Teilproblem P(k, v) besteht darin, ein I {1,..., k} mit i I a i v zu finden, das i I c i maximiert. Wir suchen also nach einer Auswahl, die nur Objekte Nummer 1,..., k benutzt, eine modifizierte Gewichtsschranke v einhält, und den Nutzen maximiert. Trivial: m(0, v) = 0 für alle v. P(n, b) ist das Gesamtproblem. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 30

Eigenschaft Optimale Substruktur : FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 31

Eigenschaft Optimale Substruktur : Sei I optimale Lösung für P(k, v), d. h.: m(k, v) = i I c i, I {1,..., k}, i I a i v. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 31

Eigenschaft Optimale Substruktur : Sei I optimale Lösung für P(k, v), d. h.: m(k, v) = i I c i, I {1,..., k}, i I a i v. Dann tritt einer der folgenden Fälle ein. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 31

Eigenschaft Optimale Substruktur : Sei I optimale Lösung für P(k, v), d. h.: m(k, v) = i I c i, I {1,..., k}, i I a i v. Dann tritt einer der folgenden Fälle ein. 1. Fall: k I. Dann ist I {k} optimale Lösung für P(k 1, v a k ), d. h.: m(k, v) c k = i I {k} c i = m(k 1, v a k ). FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 31

Eigenschaft Optimale Substruktur : Sei I optimale Lösung für P(k, v), d. h.: m(k, v) = i I c i, I {1,..., k}, i I a i v. Dann tritt einer der folgenden Fälle ein. 1. Fall: k I. Dann ist I {k} optimale Lösung für P(k 1, v a k ), d. h.: m(k, v) c k = i I {k} c i = m(k 1, v a k ). 2. Fall: k I. Dann ist I optimale Lösung für P(k 1, v), d. h.: m(k, v) = m(k 1, v). FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 31

Beweis: Indirekt. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 32

Beweis: Indirekt. 1. Fall: k I. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 32

Beweis: Indirekt. 1. Fall: k I. Annahme: I {k} nicht optimal für P(k 1, v a k ). FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 32

Beweis: Indirekt. 1. Fall: k I. Annahme: I {k} nicht optimal für P(k 1, v a k ). Dann gäbe es eine bessere Teilmenge J {1,..., k 1} FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 32

Beweis: Indirekt. 1. Fall: k I. Annahme: I {k} nicht optimal für P(k 1, v a k ). Dann gäbe es eine bessere Teilmenge J {1,..., k 1} mit i J a i v a k und i J c i > i I {k} c i. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 32

Beweis: Indirekt. 1. Fall: k I. Annahme: I {k} nicht optimal für P(k 1, v a k ). Dann gäbe es eine bessere Teilmenge J {1,..., k 1} mit i J a i v a k und i J c i > i I {k} c i. Dann wäre aber J {k} eine bessere Lösung für P(k, v) als I FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 32

Beweis: Indirekt. 1. Fall: k I. Annahme: I {k} nicht optimal für P(k 1, v a k ). Dann gäbe es eine bessere Teilmenge J {1,..., k 1} mit i J a i v a k und i J c i > i I {k} c i. Dann wäre aber J {k} eine bessere Lösung für P(k, v) als I, Widerspruch. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 32

Beweis: Indirekt. 1. Fall: k I. Annahme: I {k} nicht optimal für P(k 1, v a k ). Dann gäbe es eine bessere Teilmenge J {1,..., k 1} mit i J a i v a k und i J c i > i I {k} c i. Dann wäre aber J {k} eine bessere Lösung für P(k, v) als I, Widerspruch. 2. Fall: k I. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 32

Beweis: Indirekt. 1. Fall: k I. Annahme: I {k} nicht optimal für P(k 1, v a k ). Dann gäbe es eine bessere Teilmenge J {1,..., k 1} mit i J a i v a k und i J c i > i I {k} c i. Dann wäre aber J {k} eine bessere Lösung für P(k, v) als I, Widerspruch. 2. Fall: k I. Annahme: I nicht optimal für P(k 1, v). FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 32

Beweis: Indirekt. 1. Fall: k I. Annahme: I {k} nicht optimal für P(k 1, v a k ). Dann gäbe es eine bessere Teilmenge J {1,..., k 1} mit i J a i v a k und i J c i > i I {k} c i. Dann wäre aber J {k} eine bessere Lösung für P(k, v) als I, Widerspruch. 2. Fall: k I. Annahme: I nicht optimal für P(k 1, v). Dann gäbe es eine bessere Teilmenge J {1,..., k 1}. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 32

Beweis: Indirekt. 1. Fall: k I. Annahme: I {k} nicht optimal für P(k 1, v a k ). Dann gäbe es eine bessere Teilmenge J {1,..., k 1} mit i J a i v a k und i J c i > i I {k} c i. Dann wäre aber J {k} eine bessere Lösung für P(k, v) als I, Widerspruch. 2. Fall: k I. Annahme: I nicht optimal für P(k 1, v). Dann gäbe es eine bessere Teilmenge J {1,..., k 1}. Dann wäre aber J auch besser als I für P(k, v) FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 32

Beweis: Indirekt. 1. Fall: k I. Annahme: I {k} nicht optimal für P(k 1, v a k ). Dann gäbe es eine bessere Teilmenge J {1,..., k 1} mit i J a i v a k und i J c i > i I {k} c i. Dann wäre aber J {k} eine bessere Lösung für P(k, v) als I, Widerspruch. 2. Fall: k I. Annahme: I nicht optimal für P(k 1, v). Dann gäbe es eine bessere Teilmenge J {1,..., k 1}. Dann wäre aber J auch besser als I für P(k, v), Widerspruch. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 32

Die optimale Lösung für P(k, v) enthält also eine optimale Lösung für P(k 1, v ) für ein v v. Eigenschaft Optimale Substruktur! FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 33

Die optimale Lösung für P(k, v) enthält also eine optimale Lösung für P(k 1, v ) für ein v v. Eigenschaft Optimale Substruktur! Bellman sche Optimalitätsgleichungen: FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 33

Die optimale Lösung für P(k, v) enthält also eine optimale Lösung für P(k 1, v ) für ein v v. Eigenschaft Optimale Substruktur! Bellman sche Optimalitätsgleichungen: m(k 1, v a k ) + c k, m(k, v) = m(k 1, v), für 1 k n, 0 v b; m(0, v) = 0, für 0 v b. falls v a k und diese Summe größer als m(k 1, v) ist; sonst. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 33

Die optimale Lösung für P(k, v) enthält also eine optimale Lösung für P(k 1, v ) für ein v v. Eigenschaft Optimale Substruktur! Bellman sche Optimalitätsgleichungen: m(k 1, v a k ) + c k, m(k, v) = m(k 1, v), für 1 k n, 0 v b; m(0, v) = 0, für 0 v b. falls v a k und diese Summe größer als m(k 1, v) ist; sonst. In diesem Fall ist k Element jeder optimalen Lösung von P(k, v). FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 33

Die optimale Lösung für P(k, v) enthält also eine optimale Lösung für P(k 1, v ) für ein v v. Eigenschaft Optimale Substruktur! Bellman sche Optimalitätsgleichungen: m(k 1, v a k ) + c k, m(k, v) = m(k 1, v), für 1 k n, 0 v b; m(0, v) = 0, für 0 v b. falls v a k und diese Summe größer als m(k 1, v) ist; sonst. In diesem Fall ist k Element jeder optimalen Lösung von P(k, v). Wir berechnen alle m(k, v) mittels einer iterativen Prozedur. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 33

5.3.1 Algorithmus DP-Zero-One-Knapsack(a 1,..., a n, c 1,..., c n, b) Eingabe: a 1,..., a n : Volumina; c 1,..., c n : Nutzenwerte; b: Schranke Ausgabe: I {1,..., n}: Optimale legale Auswahl. Datenstrukturen: m[0..n,0..b]: integer; (1) for v from 0 to b do m[0,v] 0; (2) for k from 1 to n do (3) for v from 0 to b do (4) if v a k 0 (5) then s m[k 1,v a k ] + c k else s 0; (6) if s > m[k 1,v] (7) then m[k,v] s; (8) else m[k,v] m[k 1,v]; ( Konstruktion der optimalen Menge: ) (9) I ; r m[n,b]; (10) for k from n downto 1 do (11) if m[k 1,r a k ] + c k > m[k 1,r] (12) then r r a k ; I I {k}; (13) return I. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 34

Korrektheit des ermittelten Wertes m[n,b] ergibt sich aus den Bellman schen Optimalitätsgleichungen durch Induktion über k. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 35

Korrektheit des ermittelten Wertes m[n,b] ergibt sich aus den Bellman schen Optimalitätsgleichungen durch Induktion über k. Korrektheit der ausgegebenen Menge I folgt aus der obigen Überlegung, dass die Bedingung m(k 1, v a k ) + c k > m(k 1, v) entscheidend ist für die Frage, ob k in der optimalen Lösung von P(k, v) enthalten ist oder nicht, und mit Induktion. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 35

Korrektheit des ermittelten Wertes m[n,b] ergibt sich aus den Bellman schen Optimalitätsgleichungen durch Induktion über k. Korrektheit der ausgegebenen Menge I folgt aus der obigen Überlegung, dass die Bedingung m(k 1, v a k ) + c k > m(k 1, v) entscheidend ist für die Frage, ob k in der optimalen Lösung von P(k, v) enthalten ist oder nicht, und mit Induktion. Laufzeit des Algorithmus: O(n b). FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 35

Korrektheit des ermittelten Wertes m[n,b] ergibt sich aus den Bellman schen Optimalitätsgleichungen durch Induktion über k. Korrektheit der ausgegebenen Menge I folgt aus der obigen Überlegung, dass die Bedingung m(k 1, v a k ) + c k > m(k 1, v) entscheidend ist für die Frage, ob k in der optimalen Lösung von P(k, v) enthalten ist oder nicht, und mit Induktion. Laufzeit des Algorithmus: O(n b). Bemerkung: Die Nutzen- und Volumenwerte können auch rationale Zahlen sein; die Volumenschranke b muss ganzzahlig sein. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 35

Korrektheit des ermittelten Wertes m[n,b] ergibt sich aus den Bellman schen Optimalitätsgleichungen durch Induktion über k. Korrektheit der ausgegebenen Menge I folgt aus der obigen Überlegung, dass die Bedingung m(k 1, v a k ) + c k > m(k 1, v) entscheidend ist für die Frage, ob k in der optimalen Lösung von P(k, v) enthalten ist oder nicht, und mit Induktion. Laufzeit des Algorithmus: O(n b). Bemerkung: Die Nutzen- und Volumenwerte können auch rationale Zahlen sein; die Volumenschranke b muss ganzzahlig sein. (Gegebenenfalls: Mit Nenner durchmultiplizieren.) FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 35

Die Größe, nicht die Bitlänge der Gewichtsschranke b geht in die Laufzeit ein. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 36

Die Größe, nicht die Bitlänge der Gewichtsschranke b geht in die Laufzeit ein. Wir nennen Algorithmen mit einer Laufzeit O(p(n, B)), wo n die (strukturelle) Größe der Eingabe und B eine obere Schranke für einige oder alle Zahlenkomponenten der Eingabe, und p ein Polynom in zwei Variablen ist, pseudopolynomiell. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 36

Die Größe, nicht die Bitlänge der Gewichtsschranke b geht in die Laufzeit ein. Wir nennen Algorithmen mit einer Laufzeit O(p(n, B)), wo n die (strukturelle) Größe der Eingabe und B eine obere Schranke für einige oder alle Zahlenkomponenten der Eingabe, und p ein Polynom in zwei Variablen ist, pseudopolynomiell. Die Existenz eines pseudopolynomiellen Algorithmus für das Rucksackproblem widerspricht nicht der Tatsache, dass das 0-1-Rucksackproblem wahrscheinlich keinen Polynomialzeitalgorithmus hat (nächstes Semester: NP-Vollständigkeit!): Die natürliche Eingabegröße berücksichtigt log b und nicht b. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 36

Beispiel: b = 6: i 1 2 3 4 a i 3 4 2 1 c i 4 6 2 5 m[k, v]: v: 0 1 2 3 4 5 6 k = 0 0 0 0 0 0 0 0 1 0 0 0 4 4 4 4 2 0 0 0 4 6 6 6 3 0 0 2 4 6 6 8 4 0 5 5 7 9 11 11 FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 37

Ablesen von I aus dem Array m[0..n,0..b]: Benutze m(k 1, v a k ) + c k > m[k 1, v] als Kriterium. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 38

Ablesen von I aus dem Array m[0..n,0..b]: Benutze m(k 1, v a k ) + c k > m[k 1, v] als Kriterium. (Eingerahmte Einträge der Tabelle.) m[4, 6] = 11 > 8 = m[3, 6], also I := {4}, v := 6-1 = 5 m[3, 5] = 6 6 = m[2, 5], m[2, 5] = 6 > 4 = m[1, 5], also I := I {2}, v := 5-4 = 1 m[1, 1] = 0 0 = m[0, 1]. Resultat: Optimale Menge ist I = {2, 4}. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 38

Man kann auf die Speicherung des gesamten Arrays m verzichten. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 39

Man kann auf die Speicherung des gesamten Arrays m verzichten. Man hält immer nur die letzte Zeile, und aktualisiert die Einträge von rechts nach links. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 39

Man kann auf die Speicherung des gesamten Arrays m verzichten. Man hält immer nur die letzte Zeile, und aktualisiert die Einträge von rechts nach links. (Rechts vom Arbeitspunkt v: Einträge m(k, v ), links davon: Einträge m(k 1, v ).) FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 39

Man kann auf die Speicherung des gesamten Arrays m verzichten. Man hält immer nur die letzte Zeile, und aktualisiert die Einträge von rechts nach links. (Rechts vom Arbeitspunkt v: Einträge m(k, v ), links davon: Einträge m(k 1, v ).) Eine Bitmatrix b[1..n,0..b] führt mit, ob Objekt k für eine optimale Bepackung notwendig ist oder nicht. FG KTuEA, TU Ilmenau Effiziente Algorithmen SS11 Kapitel 5 39