4. Übung – Algorithmen II Johannes Singler Institut für Theoretische Informatik, Prof. Sanders Singler: 1 KITJohannes – Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik www.kit.edu Organisatorisches Übungsblätter Musterlösung des zweiten Übungsblatts steht seit heute online. Das dritte Übungsblatt erscheint am Dienstag, 23.11. 2 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Inhalt heute 1 2 3 4 5 Themen-Vorstellung Bachelor-Arbeit (Veit Batz) „Kompression von Routenbeschreibungen“ Umfrageergebnisse Wiederholung Dinitz’ Algorithmus, mit weiteren Beispielen Wiederholung Preflow-Push, mit Beispiel und Video mit 3D-Animation Aufgabe 3 vom 2. Übungsblatt 3 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Themen-Vorstellung Bachelor-Arbeit „Routenkompression“ http://algo2.iti.kit.edu/1315.php 4 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Umfrageergebnisse Wiederholung: Blick über Tellerrand: Beispiele: Applets: Übungsblatt: 5 Johannes Singler: 4. Übung – Algorithmen II 76% 30% 56% 44% 52% 29.5% 11.6% 21.7% 17.1% 20.2% Fakultät für Informatik Institut für Theoretische Informatik Wiederholung Dinitz’ Algorithmus Dinitz = Dinic Was ist der Sinn der Komponenten? Layer Graph des Residualgraphs: nur die Kanten aus Residualgraph, die (einen Schritt) näher ans Ziel führen gerichteter azyklischer Graph (DAG) ändert sich immer wieder, da Kanten zum Residualgraph hinzukommen oder dort wegfallen Blocking Flow ist im Allgemeinen kein maximaler Fluss Beispiel auf Vorlesungsfolie 168 ist allerdings kein Ebenengraph So schwierig wie maximalen Fluss zu finden? Nein! Addiert ein Blocking Flow wirklich immer was? „Rückwärts“kanten im Residualgraph führen zu effektiver Verringerung des Flusses auf entsprechender Kante. Insgesamt erhöht sich der Fluss von s nach t mit jeder Runde 6 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz’ Algorithmus Komplexität Finde statt eines einzelnen augmentierenden Pfades (Ford-Fulkerson) gleich einen (blockierenden) Gesamt-Fluss. wiederholte Tiefensuche jedes Mal wenn Pfad von s nach t gefunden: lösche entweder fluss-beschränkende Kante oder Kante, die in Sackgasse führt höchstens m-mal Tiefensuche ⇒ wäre O m2 Laufzeit genaues Nachrechnen zeigt aber: nur O(mn) Laufzeit Terminierung Mit jeder Runde vergrößert sich der Abstand von s nach t in Lf (um mindestens 1). Augmentierende Pfade werden immer länger. Warum? Alle kürzeren sind schon ausgelastet. 7 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel Eingabe G, ist gleich erster Residualgraph Gf a d 4 1 1 1 2 s c t 4 3 1 2 2 b 8 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel Distanzen von t aus reverseBFS d /1 a/2 4 1 1 1 2 s/2 t /0 c/1 2 4 1 3 2 b/1 8 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel Layer-Graph a d 4 1 s c t 4 2 3 2 b 8 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel Layer-Graph, unnötige Knoten entfernt (optional) s c t 4 2 3 2 b 8 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel Layer-Graph mit Blocking Flow s c 2/4 t 2/2 2/ 3 2/2 b 8 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel G augmentiert a d 0/4 1 s 1 0/ 0/ 2 0/ 0/ c 2/4 1 t 2/ 3 0/ 1 2/2 2/2 b 8 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel neuer Residualgraph Gf a d 4 1 1 1 2 2 2 s c 2 2 t 1 1 2 b 8 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel neue Distanzen von t aus reverseBFS d /1 a/2 4 1 1 1 2 2 2 s/3 t /0 c/3 2 2 1 1 2 b/4 8 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel neuer Layer Graph Lf a d 4 1 1 2 s c t 1 2 b 8 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel neuer Layer Graph Lf , unnötige Knoten entfernt (optional) a d 4 2 s 8 Johannes Singler: 4. Übung – Algorithmen II 1 t Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel neuer Blocking Flow a d 1/4 1/ s 8 Johannes Singler: 4. Übung – Algorithmen II 2 1/ 1 t Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel G nochmal augmentiert a d 1/4 1 s 1 1/ 0/ 2 0/ 1/ c 2/4 1 t 2/ 3 0/ 1 2/2 2/2 b 8 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel neuer Residualgraph Gf , kein Pfad mehr von s nach t 1 a d 3 1 1 1 1 1 2 2 s c 2 2 t 1 1 2 b 8 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik weiteres Dinitz-Beispiel weiteres Beispiel für Dinitz-Algorithmus: http://en.wikipedia.org/wiki/Dinic’s_algorithm#Example 9 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel, Finden eines Blocking Flows p = hs i s c 0/4 t 0/2 0/ 3 0/2 b 10 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel, Finden eines Blocking Flows extend (s, b ) ⇒ p = hs, b i s c 0/4 t 0/2 0/ 3 0/2 b 10 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel, Finden eines Blocking Flows extend (b, t ) ⇒ p = hs, b, t i s c 0/4 t 0/2 0/ 3 0/2 b 10 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel, Finden eines Blocking Flows breakthrough δ = 2 p = hs , b , t i s c 0/4 t 0/2 0/ 3 0/2 b 10 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel, Finden eines Blocking Flows breakthrough δ = 2 p = hs , b , t i s c 0/4 t 0/2 2/ 3 2/2 b 10 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel, Finden eines Blocking Flows breakthrough δ = 2 ⇒ p = hs i s c 0/4 t 0/2 2/ 3 b 10 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel, Finden eines Blocking Flows extend (s, b ) ⇒ p = hs, b i s c 0/4 t 0/2 2/ 3 b 10 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel, Finden eines Blocking Flows retreat ⇒ p = hs i s c 0/4 t 0/2 b 10 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel, Finden eines Blocking Flows extend (s, c ) ⇒ p = hs, c i s c 0/4 t 0/2 b 10 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel, Finden eines Blocking Flows extend (c , t ) ⇒ p = hs, c , t i s c 0/4 t 0/2 b 10 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel, Finden eines Blocking Flows breakthrough δ = 2 p = hs , c , t i s c 0/4 t 0/2 b 10 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel, Finden eines Blocking Flows breakthrough δ = 2 p = hs , c , t i s c 2/4 t 2/2 b 10 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel, Finden eines Blocking Flows breakthrough δ = 2 p = hs i s c t 2/4 b 10 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel, Finden eines Blocking Flows extend (s, c ) ⇒ p = hs, c i s c t 2/4 b 10 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel, Finden eines Blocking Flows retreat ⇒ p = hs i s c t b 10 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Dinitz-Beispiel, Finden eines Blocking Flows v = s ⇒ Terminierung s c t b 10 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Residualgraph bei Kanten in beide Richtungen? Was passiert im Residualgraphen, wenn es zwischen zwei Knoten Kanten in beide Richtungen gibt? 3/5 a b 1/2 11 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Residualgraph bei Kanten in beide Richtungen? Was passiert im Residualgraphen, wenn es zwischen zwei Knoten Kanten in beide Richtungen gibt? 3/5 a b 1/2 Es gibt vier Kanten! zumindest konzeptuell können in der Praxis durch eine Kante repräsentiert werden, die in beide Richtungen mit jeweils verschiedenen Kapazitäten berücksichtigt wird. 3 2 a b 1 1 11 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Wiederholung Preflow-Push-Algorithmus nach Initialisierung: von s ausgehender Fluss ist an Kapazitätsgrenze Fluss fließt entweder weiter Richtung t (bevorzugt durch kleines d) oder zurück nach s. s hat sehr großes d, dorthin wird nur im Notfall Fluss geschickt. Ende des Algorithmus: „Abgrund“ beim minimalen Schnitt, da maximal ausgefüllt Gefälle auf beiden Seiten, Richtung s bzw. Richtung t Steile Kanten im Graph sind voll, existieren also nicht im Residualgraph Varianten unterscheiden sich in Reihenfolge der betrachteten Knoten und Kanten Arbitrary (beliebig): funktioniert auch FIFO Highest Level 12 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Demos Preflow-Push-Algorithmus Video mit 3D-Animation: http://biomaps.rutgers.edu/~schliep//CATBox/PreflowPush.swf Applet: http://courses.cs.tau.ac.il/368-3500/spring99/projects/ preflow2/preflow_push.html 13 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Preflow-Push-Algorithmus Beispiel Highest Level (1) 2 4 (20) (10) (3) (2) 1 6 (5) (2) (3) (4) 3 14 Johannes Singler: 4. Übung – Algorithmen II 5 Fakultät für Informatik Institut für Theoretische Informatik Preflow-Push-Algorithmus Beispiel Highest Level Initialisierung 0 [20] 0 [0] (1) 2 4 (20) 20 6 [23] 1 (10) −20 (3) (2) 6 (5) 3 −3 14 Johannes Singler: 4. Übung – Algorithmen II 0 [0] (2) (3) (4) 3 5 0 [3] 0 [0] Fakultät für Informatik Institut für Theoretische Informatik Preflow-Push-Algorithmus Beispiel Highest Level 1. Relabel(2) 1 [20] 0 [0] (1) 2 4 (20) 20 6 [23] 1 (10) −20 (3) (2) 6 (5) 3 −3 14 Johannes Singler: 4. Übung – Algorithmen II 0 [0] (2) (3) (4) 3 5 0 [3] 0 [0] Fakultät für Informatik Institut für Theoretische Informatik Preflow-Push-Algorithmus Beispiel Highest Level 2. Push(2, 3), ∆ = 2, Push(2, 4), ∆ = 1,Push(2, 5), ∆ = 10 1 [7] 0 [1] 1 (1) 2 4 −1 (20) 20 6 [23] 1 (10) −20 (2) 3 −3 14 Johannes Singler: 4. Übung – Algorithmen II −2 2 (3) 10 −10 (3) 6 (5) 0 [0] (2) (4) 3 5 0 [5] 0 [10] Fakultät für Informatik Institut für Theoretische Informatik Preflow-Push-Algorithmus Beispiel Highest Level 3. Relabel(2) 7 [7] 0 [1] 1 (1) 2 4 −1 (20) 20 6 [23] 1 (10) −20 (2) 3 −3 14 Johannes Singler: 4. Übung – Algorithmen II −2 2 (3) 10 −10 (3) 6 (5) 0 [0] (2) (4) 3 5 0 [5] 0 [10] Fakultät für Informatik Institut für Theoretische Informatik Preflow-Push-Algorithmus Beispiel Highest Level 4. Push(2, 1), ∆ = 7 7 [0] 0 [1] 1 (1) 2 4 −1 (20) 13 6 [16] 1 (10) −13 (2) 3 −3 14 Johannes Singler: 4. Übung – Algorithmen II −2 2 (3) 10 −10 (3) 6 (5) 0 [0] (2) (4) 3 5 0 [5] 0 [10] Fakultät für Informatik Institut für Theoretische Informatik Preflow-Push-Algorithmus Beispiel Highest Level 5. Relabel(3) 7 [0] 0 [1] 1 (1) 2 4 −1 (20) 13 6 [16] 1 (10) −13 (2) 3 −3 14 Johannes Singler: 4. Übung – Algorithmen II −2 2 (3) 10 −10 (3) 6 (5) 0 [0] (2) (4) 3 5 7 [5] 0 [10] Fakultät für Informatik Institut für Theoretische Informatik Preflow-Push-Algorithmus Beispiel Highest Level 6. Push(3, 1), ∆ = 3 7 [0] 0 [1] 1 (1) 2 4 −1 (20) 13 6 [13] 1 (10) −13 (2) 0 0 14 Johannes Singler: 4. Übung – Algorithmen II −2 2 (3) 10 −10 (3) 6 (5) 0 [0] (2) (4) 3 5 7 [2] 0 [10] Fakultät für Informatik Institut für Theoretische Informatik Preflow-Push-Algorithmus Beispiel Highest Level 7. Relabel(3) 7 [0] 0 [1] 1 (1) 2 4 −1 (20) 13 6 [13] 1 (10) −13 (2) 0 0 14 Johannes Singler: 4. Übung – Algorithmen II −2 2 (3) 10 −10 (3) 6 (5) 0 [0] (2) (4) 3 5 8 [2] 0 [10] Fakultät für Informatik Institut für Theoretische Informatik Preflow-Push-Algorithmus Beispiel Highest Level 8. Push(3, 2), ∆ = 2 7 [2] 0 [1] 1 (1) 2 4 −1 (20) 13 6 [13] 1 (10) −13 (2) 0 0 0 14 Johannes Singler: 4. Übung – Algorithmen II 0 (3) 10 −10 (3) 6 (5) 0 [0] (2) (4) 3 5 8 [0] 0 [10] Fakultät für Informatik Institut für Theoretische Informatik Preflow-Push-Algorithmus Beispiel Highest Level 9. Push(2, 1), ∆ = 2 7 [0] 0 [1] 1 (1) 2 4 −1 (20) 11 6 [11] 1 (10) −11 (2) 0 0 0 14 Johannes Singler: 4. Übung – Algorithmen II 0 (3) 10 −10 (3) 6 (5) 0 [0] (2) (4) 3 5 8 [0] 0 [10] Fakultät für Informatik Institut für Theoretische Informatik Preflow-Push-Algorithmus Beispiel Highest Level 10. Relabel(4) 7 [0] 1 [1] 1 (1) 2 4 −1 (20) 11 6 [11] 1 (10) −11 (2) 0 0 0 14 Johannes Singler: 4. Übung – Algorithmen II 0 (3) 10 −10 (3) 6 (5) 0 [0] (2) (4) 3 5 8 [0] 0 [10] Fakultät für Informatik Institut für Theoretische Informatik Preflow-Push-Algorithmus Beispiel Highest Level 11. Push(4, 6), ∆ = 1 7 [0] 1 [0] 1 (1) 2 4 −1 (20) 11 6 [11] 1 (2) 0 0 0 14 Johannes Singler: 4. Übung – Algorithmen II 1 (10) −11 0 −1 10 −10 (3) (3) 6 (5) 0 [1] (2) (4) 3 5 8 [0] 0 [10] Fakultät für Informatik Institut für Theoretische Informatik Preflow-Push-Algorithmus Beispiel Highest Level 12. Relabel(5) 7 [0] 1 [0] 1 (1) 2 4 −1 (20) 11 6 [11] 1 (2) 0 0 0 14 Johannes Singler: 4. Übung – Algorithmen II 1 (10) −11 0 −1 10 −10 (3) (3) 6 (5) 0 [1] (2) (4) 3 5 8 [0] 1 [10] Fakultät für Informatik Institut für Theoretische Informatik Preflow-Push-Algorithmus Beispiel Highest Level 13. Push(5, 6), ∆ = 5 7 [0] 1 [0] 1 (1) 2 4 −1 (20) 11 6 [11] 1 (2) 0 0 0 14 Johannes Singler: 4. Übung – Algorithmen II 1 (10) −11 0 −1 10 −10 (3) (2) (4) 3 5 8 [0] 1 [5] 5 (3) 6 (5) 0 [6] −5 Fakultät für Informatik Institut für Theoretische Informatik Preflow-Push-Algorithmus Beispiel Highest Level 14. Relabel(5) 7 [0] 1 [0] 1 (1) 2 4 −1 (20) 11 6 [11] 1 (2) 0 0 0 14 Johannes Singler: 4. Übung – Algorithmen II 1 (10) −11 0 −1 10 −10 (3) (2) (4) 3 5 8 [0] 2 [5] 5 (3) 6 (5) 0 [6] −5 Fakultät für Informatik Institut für Theoretische Informatik Preflow-Push-Algorithmus Beispiel Highest Level 15. Push(5, 4), ∆ = 2 7 [0] 1 [2] 1 (1) 2 4 −1 (20) 11 6 [11] 1 (2) 0 0 0 14 Johannes Singler: 4. Übung – Algorithmen II 1 (10) −11 0 10 −10 (3) −1 −2 2 (2) (4) 3 5 8 [0] 2 [3] 5 (3) 6 (5) 0 [6] −5 Fakultät für Informatik Institut für Theoretische Informatik Preflow-Push-Algorithmus Beispiel Highest Level 16. Push(4, 6), ∆ = 2 7 [0] 1 [0] 1 (1) 2 4 −1 (20) 11 6 [11] 1 (2) 0 0 0 14 Johannes Singler: 4. Übung – Algorithmen II 3 (10) −11 0 10 −10 (3) −3 −2 2 (2) (4) 3 5 8 [0] 2 [3] 5 (3) 6 (5) 0 [8] −5 Fakultät für Informatik Institut für Theoretische Informatik Preflow-Push-Algorithmus Beispiel Highest Level 17. Relabel(5) 7 [0] 1 [0] 1 (1) 2 4 −1 (20) 11 6 [11] 1 (2) 0 0 0 14 Johannes Singler: 4. Übung – Algorithmen II 3 (10) −11 0 10 −10 (3) −3 −2 2 (2) (4) 3 5 8 [0] 8 [3] 5 (3) 6 (5) 0 [8] −5 Fakultät für Informatik Institut für Theoretische Informatik Preflow-Push-Algorithmus Beispiel Highest Level 18. Push(5, 2), ∆ = 3 7 [3] 1 [0] 1 (1) 2 4 −1 (20) 11 6 [11] 1 (2) 0 0 0 14 Johannes Singler: 4. Übung – Algorithmen II 3 (10) −11 0 7 −7 (3) −3 −2 2 (2) (4) 3 5 8 [0] 8 [0] 5 (3) 6 (5) 0 [8] −5 Fakultät für Informatik Institut für Theoretische Informatik Preflow-Push-Algorithmus Beispiel Highest Level 18. Push(2, 1), ∆ = 3 7 [0] 1 [0] 1 (1) 2 4 −1 (20) 8 6 [8] 1 3 (10) −8 (2) 0 0 0 14 Johannes Singler: 4. Übung – Algorithmen II 0 7 −7 (3) −3 −2 2 (2) (4) 3 5 8 [0] 8 [0] 5 (3) 6 (5) 0 [8] −5 Fakultät für Informatik Institut für Theoretische Informatik Preflow-Push-Algorithmus Beispiel Highest Level Ausgabe 7 [0] 1 [0] 1 (1) 2 4 (20) 8 6 [8] 3 (10) (2) 7 1 0 (2) (3) 6 2 0 (3) 5 (5) 0 [8] (4) 14 Johannes Singler: 4. Übung – Algorithmen II 3 5 8 [0] 8 [0] Fakultät für Informatik Institut für Theoretische Informatik Aufgabe 3a) vom 2. Übungsblatt Zeigen Sie, dass der Algorithmus von Dijkstra in einer Implementierung mit Binären Heaps im Durchschnitt O(m ), d. h. lineare Laufzeit hat, wenn gilt m = Ω (n log n log log n). Beweis folgt durch einsetzen von m in die Gleichung aus der Vorlesung (Folie 101). O m + n log m log n = n n log n log log n kürzen O n log n log log n + n log log n = n log ab =log a+log b O n log n log log n + n log(log n log log n) log n = log log log n=O(log log n) = O n log n log log n + n log n log log n + n log n log log log n O(n log n log log n) = O(m ) 15 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Aufgabe 3b) vom 2. Übungsblatt Eine Prioritätsliste habe folgende Laufzeiten für ihre Operationen: insert delete decreaseKey deleteMin O(log log n) O(1) amortisiert O(log log n) amortisiert O(log log n) Wie ist die Laufzeit für den Algorithmus von Dijkstra bei Verwendung dieser Implementierung im schlimmsten Fall? Unter welcher Bedingung für m läuft dieser Algorithmus in O(m ) Zeit? O m + m · TdecreaseKey(n) + n · (TdeleteMin (n) + Tinsert (n)) = O(m + m + n log log n) n=O(m ) = O(m + n log log n) Unter m = Ω (n log log n) läuft dieser Algorithmus in O(m ) Zeit. 16 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Aufgabe 3c) vom 2. Übungsblatt Finden Sie ein “Gegenbeispiel” zur durchschnittlichen Anzahl decreaseKey-Operationen bei Dijkstra, nämlich einen Familie von Graphen G mit n Knoten und m Kanten sowie einen Startknoten für alle n, m, bei denen immer Ω (m )-mal decreaseKey aufgerufen wird. Dabei soll außerdem m = ω (n) sein. Sei o. B. d. A. n ungerade und ≥ 3, und sei k := (n − 3)/2. G besteht dann aus zwei Spalten mit jeweils k + 1 Knoten, sowie dem Startknoten s. Jeder Knoten ai (i = 0..k ) der linken Spalte hat Kanten zu allen bj (j = 0..k ) mit Gewicht 2k − 2i. s ist mit allen ai über Kosten i verbunden. G hat offensichtlich k + k 2 = Ω n2 ∈ ω (n) Kanten. 17 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik Aufgabe 3c) vom 2. Übungsblatt ak bk 0 s .. . 2k 0 .. . 2k − 2 k 0 1 a1 0 2k a0 18 Johannes Singler: 4. Übung – Algorithmen II b1 2k −2 2k 2k b0 Fakultät für Informatik Institut für Theoretische Informatik Aufgabe 3c) vom 2. Übungsblatt Der endgültige Abstand für alle bi ist k , der kürzeste Weg führt über ak . Allerdings sinkt der vorläufige Abstand von bi von 2k über i + 2k − 2i = 2k − i (Weg über ai ) langsam auf k ab, denn das Scannen der linken Spalte erfolgt von a0 bis ak . Bei jedem Scannen eines ai (außer dem ersten Mal) erfolgt also ein decreaseKey für jedes bi . Das sind insgesamt (k − 1)k = (((n − 1)/2) − 1)(n − 1)/2 = Θ(n2 ) = Ω (m ) decreaseKey-Operationen. 19 Johannes Singler: 4. Übung – Algorithmen II Fakultät für Informatik Institut für Theoretische Informatik