Kap. 7: Dynamische Algorithmen
für kürzeste Wege
Professor Dr. Petra Mutzel
Lehrstuhl für Algorithm Engineering, LS11
Fakultät für Informatik, TU Dortmund
27./28. VO
A&D
WS 08/09 3./5. Februar 2009
Petra Mutzel
Alg. & Dat.
WS 08/09
1
Ankündigung für SS09
• LVAs von Petra Mutzel
– (VO DAP2)
– SE Algorithm Engineering
• LVAs von Christian Sohler (NEU an LS2,
Nachfolge Fritz Eisenbrand)
– VO Sublineare Algorithmen 4VO+2UE
– SE Datenstromalgorithmen
Petra Mutzel
Alg. & Dat.
WS 08/09
2
Ankündigung für SS09
• Beate Bollig (LS2)
– Effiziente Algorithmen für den Primzahltest
(2 VO)
– SE OBDD-basierte Graphalgorithmen
• Jan Vahrenhold, LS11
– Erst im WS09/10: Algorithmische
Geometrie 4VO+2UE
Petra Mutzel
Alg. & Dat.
WS 08/09
3
Überblick
7.1 Einführung
– Dynamische Graphalgorithmen
– Dynamische Komplexitätsmaße
– Dijkstra´s SSSP-Algorithmus
– Analyse: Korrektheit und Laufzeit
7.2 SSSP von Ramalingam & Reps
– Einführung SP-Teilgraph für SSSP
– Algorithmus Dynamic SSSP
– Laufzeit-Analyse
Petra Mutzel
Alg. & Dat.
WS 08/09
4
Literatur für diese VO
• G. Ramalingam und T. Reps: On the
computational complexity of dynamic graph
problems. Theoretical Computer Science 158,
1996, 233-277
Petra Mutzel
Alg. & Dat.
WS 08/09
5
Literatur für Experimente
• C. Demetrescu, S. Emiliozzi und G.F. Italiano:
Experimental Analysis of Dynamic All Pairs Shortest
Path Algorithms, Proc. 15th ACM-SIAM Symposium
on Discrete Algorithms (SODA 2004), New Orleans,
369-378.
• Zeitschriftenversion: C. Demetrescu und G.F.
Italiano: Experimental Analysis of Dynamic All Pairs
Shortest Path Algorithms, ACM Trans-actions on
Algorithms, vol. 2 (4), 2006, S. 578-601.
Petra Mutzel
Alg. & Dat.
WS 08/09
6
Dynamische Graphalgorithmen
Ein dynamischer Algorithmus erhält eine gegebene
Eigenschaft P eines gewichteten Graphen während
dynamischer Änderungen des Graphen, z.B.
– Einfügen neuer Kanten,
– Entfernen von Kanten und
– Kosten-Änderungen der Kanten
Anforderungen an einen dynamischen Algorithmus:
• schnelle Beantwortung von Anfragen auf Eigenschaft P
• schnelle Bearbeitung von Update-Operationen, d.h.
schneller als ein statischer Algorithmus, der jedesmal alles
von vorn berechnen muss
Petra Mutzel
Alg. & Dat.
WS 08/09
7
Dynamische Graphalgorithmen
• Wir betrachten o.E. nur (Kosten-)Änderungen der Kanten.
• Dies
läßt
sich
leicht
auf
Knoten(kosten)
änderungen
übertragen.
• Ein dynamischer Algorithmus heißt voll-dynamisch (full
dynamic) wenn er für Erhöhungen von Kantenkosten bzw.
Entfernungen von Kanten als auch für Verminderungen von
Kantenkosten bzw. Hinzufügen neuer Kanten geeignet ist.
• Sonst heißt er teil-dynamisch (partially dynamic).
Petra Mutzel
Alg. & Dat.
WS 08/09
8
Dynamische Komplexitätsmaße
• Amortisiert: Worst-Case in Größe des Inputs, wobei der
Durchschnitt über eine Folge von Operationen genommen
wird.
• Alternativ: Worst-Case in Größe der Änderungen bzgl.
des Inputs und des Outputs
Petra Mutzel
Alg. & Dat.
WS 08/09
9
Worst Case bzgl. der I/O-Änderungen
• Ein Knoten heißt modifiziert (modified), wenn er oder
eine inzidente Kante einen neuen Input-Wert bekommen
hat oder eingefügt oder entfernt wurde.
• Ein Knoten heißt betroffen (affected), wenn er entweder
neu eingefügt wurde oder er durch die Änderung einen
neuen Output-Wert bekommen hat.
• CHANGED:={Menge aller modifizierten oder betroffenen
Knoten}
• Sei |δ|=|CHANGED|
• Sei ||δ||=|δ|+Anzahl der zu CHANGED inzidenten Kanten
• So viele Änderungen sind mindestens notwendig
• → notwendige Laufzeit
Worst Case bzgl. der I/O-Änderungen
• Ein dynamischer Algorithmus heißt beschränkt (bounded),
wenn die benötigte Zeit für einen Update Schritt durch eine
Funktion in ||δ|| beschränkt ist.
• Sonst heißt er unbeschränkt (unbounded).
• Ein dynamisches Problem heißt unbeschränkt
(unbounded), wenn kein dynamischer beschränkter
Algorithmus existiert.
• HIER: ein beschränkter dynamischer SSSP Algorithmus
Petra Mutzel
Alg. & Dat.
WS 08/09
11
Kürzeste Wege Probleme
Single-Source Shortest Path (SSSP)
• Geg.: Graph G=(V,E) mit Kantenkosten c∈R, keine
negativen Kreise, s∈V
• Gesucht: Kürzeste (s,v)-Wege in G für alle v∈V
All-Pairs Shortest Path (APSP)
• Geg.: Graph G=(V,E) mit Kantenkosten c∈R, keine
negativen Kreise
• Gesucht: Kürzeste Wege zwischen allen Knotenpaaren
(Distanzmatrix)
Petra Mutzel
Alg. & Dat.
WS 08/09
12
Dijkstra´s Algorithmus
•
•
•
•
Graph G gerichtet mit Kantenkosten c≥0
Sei M =„große Zahl“
Sei dist(v) die Distanzmatrix
Q sei Prioritätswarteschlange mit Operationen
– InsertPrioQ(v,dist(v)): fügt v ein mit Priorität dist(v)
– ExtractMinQ(): Gibt das Minimum zurück und entfernt
es aus Q
– DecreasePrioQ(v, dist(v)): Aktualisiert die Priorität von
v in Q auf dist(v)
Petra Mutzel
Alg. & Dat.
WS 08/09
13
Dijkstra´s Algorithmus
• Q←∅;
dist[s]=0; InsertPrioQ(s,0)
//
S←{s}
• Für alle Knoten v≠s:
– Setze
dist[v]=M;
InsertPrioQ(v,M)
• Solange
Q≠∅:
– u←ExtractMinQ()
//
Addiere
u
zu
S
– Für
alle Kanten
(u,v), die u verlassen:
• Falls
dist[v] > dist[u]+c[u,v]:
– Setze dist[v] ← dist[u]+c(u,v)
– DecreasePrioQ(v,dist[v])
• Return
dist[]
: edge relaxation. edge scanning
Analyse: Korrektheit
• Induktion: Nach jeder Iteration ist V in 2 Mengen aufgeteilt: S
und T:=V\S
• Ind.-Ann. (Invariante)
– (1) Für v∈S
ist
dist(v)=Länge des kürzesten (s,v)-Weges
– (2) für v∈T
ist
dist(v)=Länge des kürzesten (s,v)-Weges bei
dem jeder Knoten außer v zu S gehört.
• Ind.-Schritt: (Ind.Ann. gilt bis Knoten u aufgenommen wird)
– Knoten u mit kleinstem dist-Wert wird in S aufgenommen.
(1) ist korrekt, denn: Falls ein kürzerer Weg existieren
würde, dann würde dieser einen ersten Knoten in T
benutzen; aber dieser müßte weiter weg von s sein, denn
sein dist-Wert ist größer als der von u. Die „edge
relaxation“ sorgt dafür, dass (2) erfüllt ist.
Petra Mutzel
Alg. & Dat.
WS 08/09
15
Analyse: Laufzeit
• Sei n=|V| und m=|E|
• T = n*T(InsertPrioQ()) + n*T(ExtractMinQ())
+ m*T(DecreasePrioQ())
• Binärer Heap für Q: O( (n+m) log n )
– T(InsertPrioQ())=O(log n)
– T(ExtractMinQ())=O(log n)
– T(DecreasePrioQ())=O(log n)
• Fibonacci Heap für Q: O(m+n log n)
– T(InsertPrioQ())=O(1)
– T(ExtractMinQ())=O(log n) amortisiert
– T(DecreasePrioQ())=O(1) amortisiert
Petra Mutzel
Alg. & Dat.
WS 08/09
16
5.2 Algorithmus von Ramalingam & Reps
Betrachte folgendes kürzestes Wegeproblem:
Single-Source Shortest Path (SSSP)
• Geg.: Graph G=(V,E) mit Kantenkosten w∈R,
c >0
keine negativen Kreise, ts∈V
• Gesucht: Kürzeste (s,v)-Wege
in G für alle v∈V
(v,t)
Petra Mutzel
Alg. & Dat.
WS 08/09
17
5.2 Algorithmus von Ramalingam & Reps
Geg.: Gerichteter Graph G=(V,E) mit positiven Kantenkosten
c(e)∊R, t∈V,
sowie Sequenz der folgenden Operationen:
– delete_edge(v,w): entferne die Kante (v,w) aus GG´
– insert_edge(v,w,c): füge die Kante (v,w) in G einG´
– dist(v): gib die Distanz zwischen Knoten v und t zurück
– path(v): gib den kürzesten Weg von v nach t aus, falls
einer existiert.
Damit sind auch die folgenden Operationen simulierbar:
– increase_weight(e,c‘): erhöhe die Kosten von Kante e
auf c‘
– decrease_weight(e,c‘): reduziere Kosten von e auf c‘
(jeweils durch delete_edge und insert_edge)
Petra Mutzel
Alg. & Dat.
WS 08/09
18
Definitionen
• Ein Teilgraph T von G heißt kürzester-Wege-Baum für G
mit Senke t, falls
– T ist ein gerichteter Baum mit Wurzel t
– V(T) ist die Menge aller Knoten, die t erreichen können,
und
– für jede Kante (u,v) in T gilt: dist(u) = dist(v)+c(u,v)
Petra Mutzel
Alg. & Dat.
WS 08/09
19
Definitionen
• Eine Kante heißt SP-Kante, wenn sie auf einem kürzesten
Weg von v nach t liegt für ein v∈V.
• Eine Kante ist also genau dann SP-Kante, wenn gilt:
dist(u) = dist(v)+c(u,v)
• Sei SP(G) der durch die Menge aller SP-Kanten induzierte
Teilgraph von G (der kürzeste-Wege Teilgraph).
• Jeder kürzeste Weg in G ist in SP(G) enthalten und
umgekehrt:
• Jeder Weg in SP(G) ist ein kürzester Weg in G.
• Da die Kantengewichte alle positiv sind, ist SP(G) ein
gerichteter, azyklischer Graph.
Petra Mutzel
Alg. & Dat.
WS 08/09
20
Delete_edge(v,w): G→G´
• Ein Knoten in G´ heißt betroffen, wenn der Wert
distG(v) ≠ distG‘(v) ist.
• Eine SP-Kante (x,y) heißt betroffen durch die
delete_edge(v,w) Operation, wenn kein Pfad in G´ von x
nach t existiert, der die Kante (x,y) benutzt und Länge
distalt(x) besitzt.
SP(G):
G:
1
w
4
5
8
2
4
2
4
v
3
7
t
4
1
Petra Mutzel
Alg. & Dat.
WS 08/09
21
Delete_edge(v,w): G→G´
• Ein Knoten in G´ heißt betroffen, wenn der Wert
distG(v) ≠
distG‘(v) ist.
• Eine SP-Kante (x,y) heißt betroffen durch die
delete_edge(v,w) Operation, wenn kein Pfad in G´ von x
nach t existiert, der die Kante (x,y) benutzt und Länge
distalt(x) besitzt.
Beobachtungen in SP(G)
• (x,y) ist betroffen ⇔ y ist betroffen
• Knoten x≠v ist betroffen ⇔ alle ausgehenden SP-Kanten
von x sind betroffen
• Knoten v selbst ist betroffen ⇔ (v,w) die einzige
ausgehende SP-Kante ist
Algorithmus Delete_edge(v,w)
Phase 1:
• Bestimme die Menge aller betroffenen Knoten und Kanten
• Entferne die betroffenen Kanten von SP(G)
Phase 2:
• Berechne neue dist-Werte aller betroffenen Knoten
• Aktualisiere SP(G)
Petra Mutzel
Alg. & Dat.
WS 08/09
23
Phase 1 von Delete_edge(v,w)
• Menge der betroffenen Knoten = Menge der Knoten, die im
Graphen SP(G)-(v,w) keine Verbindung zur Senke t
besitzen.
Algorithmus-Idee:
• Aufruf von Top-Sort, wenn outdegree von v in SP(G´) = 0.
• Speichere SP(G) durch Adjazenzlisten: in(v) und out(v),
• oder nicht explizite Speicherung, sondern durch Test:
dist(x) == dist(y)+c(x,y)
Petra Mutzel
Alg. & Dat.
WS 08/09
24
Phase 2 von Delete_edge(v,w)
• Sei A die Menge der nicht-betroffenen Knoten
• Ziel: Berechne dist(x) für alle Knoten in B=V \ A
Algorithmus-Idee:
• Kontrahiere A zu einem Knoten t´ und ersetze die Kanten
(x,y) durch (x,t´) mit Kosten c(x,y)+dist(y)
• Aufruf von Dijkstra für den neuen Graphen
SP(G): 1
G:
4
v
3
5
8 2
4
2
4
w
c(5,7)+dist(7)
7
t
4
1
5 c(5,2)+dist(2) A
v 3
c(3,1)+dist(1)
Algorithmus Delete_edge(v,w)
1. Falls (v,w)∈SP(G)
dann:
2.
Entferne (v,w) aus SP(G) und E; dekrementiere
outdegSP(v)
3.
Falls outdegSP(v)==0 dann: // Phase 1
4.
WorkSet={v}; AffectVert=∅
5. Solange WorkSet≠∅ do:
6.
Wähle und entferne Knoten u aus WorkSet
7.
AffectVert = AffectVert ⋃ {u}
8.
Für jeden Knoten x mit (x,u)∈SP(G):
9.
Entferne (x,u) aus SP(G); dekrement. outdegSP(x)
10.
Falls outdegSP(x)==0 dann:
11.
WorkSet = WorkSet ⋃ {x}
Petra Mutzel
Alg. & Dat.
WS 08/09
26
Algorithmus Delete_edge(v,w) ff
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Q=∅ // Phase 2
Für jeden Knoten a∈AffectVert do {
dist(a) = min({c(a,b)+dist(b)|(a,b)∈E und b∉AffectVert)} ⋃ M
Falls dist(a)≠M
dann InsertPrioQ(a,dist(a))
}
Solange Q≠∅ do:
a←ExtractMinQ()
Für jeden Knoten b∈Succ(a) mit c(a,b)+dist(b)==dist(a)
Füge (a,b) in SP(G) ein; inkrementiere outdegSP(a)
Für jeden Knoten b∈Pred(a) mit c(b,a)+dist(a)<dist(b)
dist(b) = c(b,a)+dist(a)
DecreasePrioQ/InsertPrioQ(b,dist(b))
Petra Mutzel
Alg. & Dat.
WS 08/09
27
Korrektheit zu Phase 1
• Falls v betroffen ist, wird Zeile 4-11 ausgeführt
• Diese realisiert TopSort mit Startknoten v auf dem SPTeilgraphen
• Wenn ein Knoten x betroffen ist, dann existiert kein (x,t)Weg im SP-Graphen und auch alle seine SP-Nachfolger
sind betroffen
• TopSort findet alle betroffenen Knoten, denn: v hatte vor
der Deletion nur eine Verbindung zur Senke; die SPVorgänger von v, die aus der Queue entfernt werden sind
genau diejenigen, deren einzige Verbindung zu t über
(v,w) lief.
Petra Mutzel
Alg. & Dat.
WS 08/09
28
Korrektheit zu Phase 2
• Wenn betroffene Knoten existieren, dann ist Q in
Zeile 17 nicht leer
• Zeile 18-23 führt Dijkstra aus, das ist also wegen der
Korrektheit von Dijkstra korrekt
• Alle betroffenen Knoten werden irgendwann in Q
aufgenommen, ihre Distanz wird also neu gesetzt
• Laufzeitbetrachtungen: Nicht betroffene Knoten
werden nicht in Q aufgenommen (wegen Zeile 21)
• Die SP-Kanten werden korrekt gesetzt
Petra Mutzel
Alg. & Dat.
WS 08/09
29
Laufzeitanalyse
• Phase 1:
– Anzahl der Iterationen: |δ|
– Eine Iteration für Knoten u benötigt O(|Pred(u)|)
– Gesamt: O(||δ|| )
• Phase 2: mit Fibonacci Heaps
– InsertPrioQ() + DecreasePrioQ(): O(1) amortisiert
– ExtractMinQ() O(log p) mit p=Anzahl der Elemente im
Heap
– Anzahl der Iterationen: höchstens |δ|
– Gesamt: O(||δ||+|δ| log |δ|)
– Laufzeit: O(||δ||+|δ| log |δ|)
Petra Mutzel
Alg. & Dat.
WS 08/09
30
Insert_edge(v,w): G→G´
Beobachtung:
• Wenn u betroffen ist, dann sehen alle kürzesten Wege in G´
von u nach t folgendermaßen aus:
• (kürzester (u,v)-Weg, Kante (v,w), kürzester (w,t)-Weg)
u ist betroffen ⇔
distG‘(u,v)+c(v,w)+distG(w) < distG(u)
4
SP(G):
G:
5
1
8
2
4
2
betroffene Knoten:
1
4
w
7
v 1
1
3 4
1
1
1
t
Algorithmus Insert_edge(v,w)
Betrachte neuen kürzesten-Wege Baum Tv für Knoten v:
• Sei x beliebiger Knoten, u: Elter von x in Tv
• Wenn x betroffen ist, dann muß auch u betroffen sein, denn
sonst: ex. kürzester Weg P von u nach t ohne Kante (v,w);
dann ist Weg ((x,u),P) auch kürzester Weg; x wäre nicht
betroffen.
• ⇒
Menge der betroffenen Knoten bilden zusammenhängenden Teilbaum von Tv mit Wurzel v
4
SP(G):
G:
5
1
8
2
4
2
betroffene Knoten:
1
4
w
7
v 1
1
3 4
1
1
1
Tv
t
v
u
x
w
t
Algorithmus Insert_edge(v,w)
Idee: Benutze Dijkstra‘s Algorithmus für Menge der
betroffenen Knoten mit Priorität: dist(x)-dist(v) für alle x
Betrachte neuen kürzesten-Wege Baum Tv für Knoten v:
• Sei x beliebiger Knoten, u: Elter von x in Tv
• Wenn x betroffen ist, dann muß auch u betroffen sein, denn
sonst: ex. kürzester Weg P von u nach t ohne Kante (v,w);
dann ist Weg ((x,u),P) auch kürzester Weg; x wäre nicht
betroffen.
• ⇒
Menge der betroffenen Knoten bilden zusammenhängenden Teilbaum von Tv mit Wurzel v
4
SP(G):
G:
5
1
8
2
4
2
betroffene Knoten:
1
4
w
7
v 1
1
3 4
1
1
1
Tv
t
v
u
x
w
t
Algorithmus Insert_edge((v,w),c)
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Insert_edge (v,w) in G, setze Kosten c(v,w)
Q=∅
Falls c(v,w)+dist(w)<dist(v) dann {
dist(v)= c(v,w)+dist(w)
InsertPrioQ(v,0)
}
Sonst Falls c(v,w)+dist(w) == dist(v) dann {
Füge (v,w) in SP(G) ein
outdeg(v)++
}
Petra Mutzel
Alg. & Dat.
WS 08/09
34
Algorithmus Insert_edge((v,w),c) ff
9. Solange Q≠∅:
10. u←ExtractMinQ()
11. Entferne alle ausgehenden Kanten von u in SP(G) und
update outdeg(u)
12. Für jeden Knoten x∈Succ(u):
13.
Falls c(u,x)+dist(x) == dist(u) dann:
14.
Füge (u,x) in SP(G) ein und aktualisiere outdeg(u)
15. Für jeden Knoten x∈Pred(u):
16.
Falls c(x,u)+dist(u) < dist(x) dann {
17.
dist(x)= c(x,u)+dist(u)
18.
DecreasePrioQ/InsertPrioQ(x,dist(x)-dist(v)) }
19.
Sonst Falls c(x,u)+dist(u) == dist(x)
20.
Füge (x,u) in SP(G) ein und aktualisiere outdeg(x)
Bemerkungen
• Falls also v betroffen ist, dann wird Dijkstra von v aus
gestartet, jedoch mit den dist[]-Werten zu t.
• Alle Wege der betroffenen Knoten führen über Knoten v.
• Da nur die betroffenen Knoten in die Priority Queues
eingefügt werden und dist(v) konstant ist, könnten wir
diese genauso gut mit Priorität dist(x) statt dist(x)-dist(v)
in Q einfügen.
• Da die Menge der betroffenen Knoten zusammenhängend ist, werden alle betroffenen Knoten in Q
aufgenommen und auch gescanned.
• Die Distanzen werden korrekt berechnet, wegen der
Korrektheit von Dijkstra
Petra Mutzel
Alg. & Dat.
WS 08/09
36
Laufzeitanalyse
• mit Fibonacci Heaps
– InsertPrioQ() + DecreasePrioQ(): O(1) amortisiert
– ExtractMinQ(): O(log p) mit p=Anzahl der Elemente im
Heap
– Anzahl der Iterationen: höchstens |δ|
– Gesamt: O(||δ|| + |δ| log |δ|)
– Laufzeit: O(||δ|| + |δ| log |δ|)
Petra Mutzel
Alg. & Dat.
WS 08/09
37
Zusammenfassung
• Theorem: Es gibt einen beschränkten
dynamischen Algorithmus für das SSSP-Problem mit
Laufzeit O(||δ||+|δ| log |δ|) für jede Update-Operation
delete_edge(v,w) und insert_edge(v,w,c).
Petra Mutzel
Alg. & Dat.
WS 08/09
38
Experimenteller Vergleich
• Test Sets
• Algorithmen
• Experimentelle Resultate
von Demetrescu und Italiano 2006
Petra Mutzel
Alg. & Dat.
WS 08/09
39
Experimentelles Setup: Test Sets
• Zufällig erzeugte Graphen mit zufälliger Update Sequenz
• Real-World Graphen
– US Road Networks: ftp://edcftp.cr.usgs.gov
• 148 – 952 Knoten, 434 – 2896 Kanten, Kosten:
≤200.000 (physik. Distanzen)
– Internet Graphen (AS): http://www.routeviews.org
• 500 – 3000 Knoten, 2406 – 13.734 Kanten, Kosten:
≤20.000
• Synthetisch erzeugte Graphen (Bottleneck): Zwei bipartite
Komponenten, die über eine einzige Kante miteinander
verbunden sind. Experimentelles Setup:
Plattformen
• AMD Athlon – 1.8 GHz, 256KB L2 cache, 512MB RAM
• AMD Athlon – 2.1 GHz, 256KB L2 cache, 768MB RAM
• Intel Xeon – 500 MHz, 512KB L2 cache, 512MB RAM
• Intel Pentium 4 – 2.0 GHz, 512KB L2 cache, 2GB RAM
• Sun UltraSPARC IIi – 440 MHz, 2MB L2 cache, 256MB
RAM
• IBM Power 4 – 1.1 GHz, 1.4MB L2 cache, 32MB L3
cache, 64GB RAM
Petra Mutzel
Alg. & Dat.
WS 08/09
41
Experimentelles Setup:
Algorithmen
• D-RRL: dynamischer SSSP von Ramalingam und Reps
• D-KIN: dynamischer APSP von King
• D-LHP: dynamischer APSP-LHP von Demetrescu und
Italiano
• S-LSP: statischer APSP-LSP von Demetrescu und
Italiano
• S-DIJ: statischer SSSP von Dijkstra (als Referenzcode)
• Gleiche Datenstrukturen für alle C-Implementierungen
verwendet: (z.B. Heaps, dynamische Arrays, Hashtabellen, Graphen)
Petra Mutzel
Alg. & Dat.
WS 08/09
42
Experimentelles Setup:
Algorithmen
Algorithmus Update Zeit
S-DIJ
O(mn+n2 log n)
Query Speicherplatz
Zeit
O(1)
O(n2)
S-LSP
O(|LSP|+n2 log n)
O(1)
O(n2)
D-RRL
O(mn+n2 log n)
O(1)
O(n2)
D-KIN
O(n2.5√(Clog n)),
C=max Kosten
O(n2 log3n)
O(1)
O(n2.5√C(log n))
O(1)
O(mn log n)
D-LHP
Petra Mutzel
Alg. & Dat.
WS 08/09
44
Laufzeitvergleich für zufällige Graphen
Laufzeit per Update (in msec)
500 Knoten,1000 Updates, Gewichte ∈[1,1000]
Sieger: D-RRL und D-LHP
bei steigender Dichte: D-LHP
Anzahl der Kanten (x 1000)
Speicherplatz für zufällige Graphen
Speicherplatz (in MB)
500 Knoten,1000 Updates, Gewichte∈[1,1000]
Speicher von D-LHP:steigt mit Dichte
Speicher von D-RRL: unabhängig von Dichte
Anzahl der Kanten (x 1000)
Laufzeit für Real-World Graphen (IBM)
Laufzeit per Update (in msec)
US Road Networks,1000 Updates
Anzahl der Knoten
Laufzeit für Real-World Graphen (Sun)
Laufzeit per Update (in msec)
US Road Networks,1000 Updates
Anzahl der Knoten
Laufzeit für Real-World Graphen (IBM)
Laufzeit per Update (in msec)
US Road Networks,1000 Updates
IBM Power 4:
1.4 MB L2 cache,
32 MB L3 cache,
64 GB RAM
Anzahl der Knoten
Laufzeit für Real-World Graphen (Sun)
Laufzeit per Update (in msec)
US Road Networks,1000 Updates
Sun UltraSPARC IIi:
2 MB L2 cache,
512 MB RAM
Anzahl der Knoten
Speicherplatz für Real-World Graphen
Speicherplatz (in MB)
US Road Networks,1000 Updates
Anzahl der Knoten
Laufzeit für Real-World Graphen (IBM)
Laufzeit per Update (in msec)
Internet Networks,1000 Updates
IBM Power 4:
1.4 MB L2 cache,
32 MB L3 cache,
64 GB RAM
Relative Laufzeit D-RRL/D-LHP
Relative Laufzeit auf verschiedenen Plattformen
US Road Networks,1000 Updates
Anzahl der Kanten (x100)
Cache miss ratio D-RRL/D-LHP
Cache Effekte auf dem Colorado Road Network
Cache Größe
Relative Laufzeit auf Bottleneck Graphen
Synthetische Graphen, 500 Knoten, 1000 Up
Laufzeit per Update (in sec)
D-LHP so langsam wie S-LSP
D-RRL langsamer als S-DIJ
IBM Power 4
Anzahl der Kanten (x1000)
ENDE Kap. 7
Und wie geht es weiter?
Prüfungen?
Petra Mutzel
Alg. & Dat.
WS 08/09
56
Prüfungselemente
• Modulprüfung bzw. Mündliche Fachprüfung:
– Über VO 4 inkl Ü 2: 9LP
– Anforderungen:
• Zusammenhänge des Gebiets
• Spezielle Fragestellungen einordnen und
bearbeiten
• Regelmäßige aktive Mitarbeit in Übungen, u.a.
erfolgreiche Präsentationen und bearbeitete
Übungsblätter
• Mündliche Prüfung: Stoff der VO und Ü (20 Min.)
Petra Mutzel
Alg. & Dat.
WS 08/09
57
Prüfungselemente
• Leistungsnachweis:
– Über VO 4 inkl. Ü 2: 9LP
– Anforderungen:
• Regelmäßige aktive Mitarbeit in Übungen, u.a.
erfolgreiche Präsentationen und bearbeitete
Übungsblätter
Petra Mutzel
Alg. & Dat.
WS 08/09
58
Themen der Vorlesung
1.
2.
3.
4.
5.
6.
7.
8.
Priority Queues: 1.1 Fibonacci Heaps (2-3)
1.2 Externe Array Heaps (4-6)
2. Amortisierte Analyse von Algorithmen (6)
2,5: Suffix Arrays (8-9)
3. String Matching: 3.2 Knuth-Morris-Pratt 3.3 Boyer-Moore (7/10)
3.4 Aho-Corasick 3.5 Bit-Parallelismus (12/13)
(Gastvorlesung J. Singler: Multi-Core using STL (11))
4. Lineare Programmierung (13,14-17) 4.1 Einführung 4.2
Simplex-Algorithmus 4.3 Dualitätstheorem (18) (*)
9. (Gastvorlesung M. Jünger: Geometrische Dualität (19))
10. 5. Approximationsalgorithmen (18/20)
11. 5,5: Zusammenhang in Graphen (21)
12. 6. Geometrische Algorithmen 6.1 Mehrdimensionale Suchstrukturen
(23-26)
13. 7. Dynamische kürzeste Wege (27/28)
60
Fachprüfung: Ein Thema streichbar; * = nicht streichbar!
Ihre Lieblingsthemen sind:
1.
2.
3.
4.
5.
6.
7.
8.
Priority Queues: 1.1 Fibonacci Heaps (2-3)
1.2 Externe Array Heaps (4-6)
2. Amortisierte Analyse von Algorithmen (6)
Suffix Arrays (8-9)
String Matching: 3.2 Knuth-Morris-Pratt 3.3 Boyer-Moore (7/10)
3.4 Aho-Corasick 3.5 Bit-Parallelismus (12/13)
(Gastvorlesung J. Singler: Multi-Core using STL (11))
4. Lineare Programmierung (13,14-17) 4.1 Einführung 4.2 SimplexAlgorithmus 4.3 Dualitätstheorem (18) (*)
9. (Gastvorlesung M. Jünger: Geometrische Dualität (19))
10. 5. Approximationsalgorithmen (18/20)
11. 10. Zusammenhang in Graphen (21)
12. 6. Geometrische Algorithmen 6.1 Mehrdimensionale
Suchstrukturen (23-26)
13. 7. Dynamische kürzeste Wege (27/28)
Diese Themen fanden Sie gar
nicht schön:
• Lineare Programmierung
• Geometrische Algorithmen
Petra Mutzel
Alg. & Dat.
WS 08/09
62