4. Übung – Algorithmen II - Johannes Singler

Werbung
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
Herunterladen