Tiefensuche

Werbung
Tiefensuche
DFS(G)
1. for each vertex u∈V do color[u] ← WHITE ; π[u] ← nil
2. time ← 0
3. for each vertex u∈V do
4.
if color[u]=WHITE then DFS-Visit(u)
DFS-Visit(u)
1. color[u] ← GRAY
2. time ← time +1; d[u] ← time
4. for each v∈Adj[u] do
5.
if color[v] = WHITE then π[v] ← u ; DFS-Visit(v)
6. color[u] ← BLACK
7. time ← time+1; f[u] ← time
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
1
Tiefensuche
Satz 14.8 (Klammersatz zur Tiefensuche):
In jeder Tiefensuche eines gerichteten oder ungerichteten
Graphen gilt für jeden Knoten u und v genau eine der
folgenden drei Bedingungen:
• Die Intervalle [d[u],f[u]] und [d[v],f[v]] sind vollständig
disjunkt
• Intervall [d[u],f[u]] ist vollständig im Interval [d[v],f[v]]
enthalten und u ist Nachfolger von v im DFS-Baum
• Intervall [d[v],f[v]] ist vollständig im Interval [d[u],f[u]]
enthalten und v ist Nachfolger von u im DFS-Baum
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
2
Tiefensuche
Beispiel:
a
1
12
b
c
9 10 11
2
d
e
3 4
5
f
8
b
a
SS 2008
2
12
c
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
e
3
7
6
1
6 7
9
4
11
8
10
5
d
3
f
Tiefensuche
Beispiel:
a
1
12
b
c
9 10 11
2
d
e
3 4
5
f
8
b
a
2
12
c
Korollar 14.9:
e
3
7
6
1
6 7
9
4
11
8
10
5
d
Knoten v ist echter Nachfolger von Knoten u im DFS-Baum
von G, gdw. d[u]<d[v]<f[v]<f[u].
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
4
f
Tiefensuche
Satz 14.10 (Satz vom weißen Weg)
In einem DFS-Wald eines gerichteten oder ungerichteten
Graph G ist Knoten v ein Nachfolger von Knoten u, gdw.
zum Zeitpunkt d[u] v über einen Pfad weißer Knoten
erreicht werden kann.
u
2
v
1
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
5
Tiefensuche - Laufzeitanalyse
Satz 14.11: Bei Eingabe von Graph G=(V,E) besitzt
Algorithmus DFS Laufzeit O ( V + E ).
Analyse: Wie bei Breitensuche. Nutzen aus dass
Gesamtgröße aller Adjazenzlisten O (E )
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
6
Tiefensuche
Klassifikation von Kanten:
• Baumkanten sind Kanten des DFS-Walds G
• Rückwartskanten sind Kanten (u,v), die Knoten u mit
Ahnen von u im DFS-Baum verbinden
• Vorwärtskanten sind die nicht-Baum Kanten (u,v), die u
Rückwärtskante
mit einem Nachfolger v in einem DFS-Baum
verbinden
4
• Kreuzungskanten sind alle übrigen Kanten
b
a
2
12
e
3
7
6
1
c
SS 2008
9
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
11
8
10
5
d
7
Tiefensuche
Klassifikation von Kanten:
• Baumkanten sind Kanten des DFS-Walds G
• Rückwartskanten sind Kanten (u,v), die Knoten u mit
Ahnen von u im DFS-Baum verbinden
• Vorwärtskanten sind die nicht-Baum Kanten (u,v), die u
mit einem Nachfolger v in einem DFS-Baum verbinden
4
• Kreuzungskanten sind alle übrigen
Kanten
Vorwärtskante
b
a
2
12
e
3
7
6
1
c
SS 2008
9
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
11
8
10
5
d
8
Tiefensuche
Klassifikation von Kanten:
• Baumkanten sind Kanten des DFS-Walds G
• Rückwartskanten sind Kanten (u,v), die Knoten u mit
Ahnen von u im DFS-Baum verbinden
• Vorwärtskanten sind die nicht-Baum Kanten (u,v), die u
mit einem Nachfolger v in einem DFS-Baum verbinden
4
• Kreuzungskanten sind alle übrigen Kanten
9
a
12
b
3
Kreuzungskante
2
7
6
1
c
SS 2008
e
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
11
8
10
5
d
9
Tiefensuche
In einem ungerichteten Graphen ist jede Kante
eine Baum- oder Rückwärtskante
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
10
Tiefensuche
• Topologisches Sortieren
• Sortierung eines gerichteten, kreisfreien Graphen, so
dass für jede Kante (u,v) u in der Sortierung vor v steht
(„u wird vor v ausgewertet“)
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
11
Tiefensuche
Topsort(G)
1. Rufe DFS(G) auf, um Zeitstempel f[v] für jeden Knoten v
zu berechnen
2. Sobald ein Knoten abgearbeitet ist, füge ihn zu Beginn
einer Liste L ein (absteigende Sortierung nach f[v]Werten)
4
3. return L
b
Sortierung im Beispiel:
• a, c, b, d, f, e
Laufzeit:
• Θ(|V|+|E|)
SS 2008
a
9
2
12
e
3
7
6
1
c
11
8
10
5
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
f
d
12
Tiefensuche
Lemma 14.12:
Ein gerichteter Graph G ist azyklisch, gdw. eine
Tiefensuche in G keine Rückwärtskanten hat.
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
13
Tiefensuche
Satz 14.13:
TopSort(G) berechnet eine topologische Sortierung eines
gerichteten azyklischen Graphs.
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
14
Tiefensuche
Zusammenfassung:
• Zwei grundlegende Graphalgorithmen: Breiten- und
Tiefensuche
• Breitensuche: zunächst alle Nachbarn abarbeiten; liefert
kürzeste Wege in ungewichteten Graphen; Laufzeit
O(|V|+|E|)
• Tiefensuche: zunächst in die Tiefe gehen; durchläuft alle
Knoten eines Graphen in O(|V|+|E|) Zeit; kann für
topologische Sortierung verwendet werden
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
15
Kürzeste Wege
Kürzeste Wege in gewichteten Graphen:
• Kürzeste Wege von einem Startknoten
(single source shortest path (SSSP))
• Kürzeste Wege für jedes Knotenpaar
(all pairs shortest path (APSP))
• Nur positive Kantengewichte oder auch negative
Gewichte erlaubt
• δ(u,v)
δ
bezeichnet Länge des kürzesten Weges von u
nach v (Summe der Kantengewichte)
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
16
Kürzeste Wege
Single Source Shortest Path (SSSP):
• Eingabe: Gewichteter Graph G=(V,E) und Startknoten s
• Ausgabe: Für jeden Knoten u∈V seine Distanz zu s
sowie einen kürzesten Weg
2
Zunächst Annahme:
• Nur positive Kantengewichte
2
7
4
s
1
6 8
1
7
5
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
17
Kürzeste Wege
Single Source Shortest Path (SSSP):
• Eingabe: Gewichteter Graph G=(V,E) und Startknoten s
• Ausgabe: Für jeden Knoten u∈V seine Distanz zu s
sowie einen kürzesten Weg
2
Zunächst Annahme:
• Nur positive Kantengewichte
2
7
4
s
1
6 8
1
7
5
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
18
Kürzeste Wege
Single Source Shortest Path (SSSP):
• Eingabe: Gewichteter Graph G=(V,E) und Startknoten s
• Ausgabe: Für jeden Knoten u∈V seine Distanz zu s
sowie einen kürzesten Weg
2
Zunächst Annahme:
• Nur positive Kantengewichte
2
7
4
s
1
6 8
1
7
4
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
19
Kürzeste Wege
Entwicklung eines einfachen Algorithmus für SSSP:
• Beobachtung: Ähnlich wie BFS
• Erste Idee: Nimm immer die kürzeste Kante, die zu noch
nicht entdecktem Knoten führt
2
2
7
4
s
1
6 8
1
7
5
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
20
Kürzeste Wege
Entwicklung eines einfachen Algorithmus für SSSP:
• Beobachtung: Ähnlich wie BFS
• Erste Idee: Nimm immer die kürzeste Kante, die zu noch
nicht entdecktem Knoten führt
2
2
7
4
s
1
6 8
1
7
5
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
21
Kürzeste Wege
Entwicklung eines einfachen Algorithmus für SSSP:
• Beobachtung: Ähnlich wie BFS
• Erste Idee: Nimm immer die kürzeste Kante, die zu noch
nicht entdecktem Knoten führt
2
2
7
4
s
1
6 8
1
7
5
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
22
Kürzeste Wege
Entwicklung eines einfachen Algorithmus für SSSP:
• Beobachtung: Ähnlich wie BFS
• Erste Idee: Nimm immer die kürzeste Kante, die zu noch
nicht entdecktem Knoten führt
2
2
7
4
s
1
6 8
1
7
5
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
23
Kürzeste Wege
Entwicklung eines einfachen Algorithmus für SSSP:
• Beobachtung: Ähnlich wie BFS
• Erste Idee: Nimm immer die kürzeste Kante, die zu noch
nicht entdecktem Knoten führt
2
2
7
4
s
1
6 8
1
7
5
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
24
Kürzeste Wege
Entwicklung eines einfachen Algorithmus für SSSP:
• Beobachtung: Ähnlich wie BFS
• Erste Idee: Nimm immer die kürzeste Kante, die zu noch
nicht entdecktem Knoten führt
2
2
7
4
s
1
6 8
1
7
5
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
25
Kürzeste Wege
Entwicklung eines einfachen Algorithmus für SSSP:
• Beobachtung: Ähnlich wie BFS
• Erste Idee: Nimm immer die kürzeste Kante, die zu noch
nicht entdecktem Knoten führt
2
2
7
4
s
1
6 8
1
7
5
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
26
Kürzeste Wege
Entwicklung eines einfachen Algorithmus für SSSP:
• Beobachtung: Ähnlich wie BFS
• Erste Idee: Nimm immer die kürzeste Kante, die zu noch
nicht entdecktem Knoten führt
2
2
7
4
s
1
6 8
1
7
5
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
27
Kürzeste Wege
Entwicklung eines einfachen Algorithmus für SSSP:
• Beobachtung: Ähnlich wie BFS
• Erste Idee: Nimm immer die kürzeste Kante, die zu noch
nicht entdecktem Knoten führt
2
2
7
4
s
1
6 8
1
7
5
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
28
Kürzeste Wege
Entwicklung eines einfachen Algorithmus für SSSP:
• Beobachtung: Ähnlich wie BFS
• Erste Idee: Nimm immer die kürzeste Kante, die zu noch
nicht entdecktem Knoten führt
2
2
7
4
s
1
6 8
1
7
5
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
29
Kürzeste Wege
Entwicklung eines einfachen Algorithmus für SSSP:
• Beobachtung: Ähnlich wie BFS
• Erste Idee: Nimm immer die kürzeste Kante, die zu noch
nicht entdecktem Knoten führt
2
2
7
4
s
1
6 8
1
7
5
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
30
Kürzeste Wege
Entwicklung eines einfachen Algorithmus für SSSP:
• Beobachtung: Ähnlich wie BFS
• Erste Idee: Nimm immer die kürzeste Kante, die zu noch
nicht entdecktem Knoten führt
2
Aber auch sonst
immer?
2
7
4
s
1
6 8
1
7
Funktioniert in diesem Beispiel!
SS 2008
5
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
31
Kürzeste Wege
Entwicklung eines einfachen Algorithmus für SSSP:
• Beobachtung: Ähnlich wie BFS
• Erste Idee: Nimm immer die kürzeste Kante, die zu noch
nicht entdecktem Knoten führt
Was passiert
hier?
2
2
1
7
1
s
2
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
32
Kürzeste Wege
Entwicklung eines einfachen Algorithmus für SSSP:
• Beobachtung: Ähnlich wie BFS
• Erste Idee: Nimm immer die kürzeste Kante, die zu noch
nicht entdecktem Knoten führt
Was passiert
hier?
2
2
1
7
1
s
Die von unserem Algorithmus
berechnete Lösung (Weglänge 8)
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
2
33
Kürzeste Wege
Entwicklung eines einfachen Algorithmus für SSSP:
• Beobachtung: Ähnlich wie BFS
• Erste Idee: Nimm immer die kürzeste Kante, die zu noch
nicht entdecktem Knoten führt
2
Die direkte
Verbindung hat
nur Länge 7!
2
1
7
1
s
2
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
34
Kürzeste Wege
Entwicklung eines einfachen Algorithmus für SSSP:
• Beobachtung: Ähnlich wie BFS
• Erste Idee: Nimm immer die kürzeste Kante, die zu noch
nicht entdecktem Knoten führt
2
2
Die direkte
Verbindung hat
nur Länge 7!
Algorithmus
berechnet nicht
kürzeste Wege!
1
s
1
7
2
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
35
Kürzeste Wege
Entwicklung eines einfachen Algorithmus für SSSP:
• Beobachtung: Ähnlich wie BFS
• Erste Idee: Nimm immer die kürzeste Kante, die zu noch
nicht entdecktem Knoten führt
2
2
Die direkte
Verbindung hat
nur Länge 7!
Algorithmus
berechnet nicht
kürzeste Wege!
1
s
1
7
2
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
36
Kürzeste Wege
Entwicklung eines einfachen Algorithmus für SSSP:
• Beobachtung: Ähnlich wie BFS
• Erste Idee: Nimm immer die kürzeste Kante, die zu noch
nicht entdecktem Knoten führt
Warum funktioniert
der Algorithmus
nicht?
2
2
1
7
1
s
t
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
2
r
37
Kürzeste Wege
Entwicklung eines einfachen Algorithmus für SSSP:
• Beobachtung: Ähnlich wie BFS
• Erste Idee: Nimm immer die kürzeste Kante, die zu noch
nicht entdecktem Knoten führt
Der Weg von s nach
r ist einziger und
damit kürzester Weg
2
2
1
7
1
s
t
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
2
r
38
Kürzeste Wege
Entwicklung eines einfachen Algorithmus für SSSP:
• Beobachtung: Ähnlich wie BFS
• Erste Idee: Nimm immer die kürzeste Kante, die zu noch
nicht entdecktem Knoten führt
Der Weg von s nach
r ist einziger und
damit kürzester Weg
Die Weglänge von s nach t
über r ergibt sich aus
Länge von s nach r plus
Länge von r nach t
SS 2008
2
2
1
7
1
s
t
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
2
r
39
Kürzeste Wege
Neuer Ansatz:
• Sei S die Menge der entdeckten Knoten
• Merke optimale Lösung für S:
Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten
Weges von s nach v
• Zu Beginn: S={s} und d[s]=0
• Für v∈V-S berechne kürzesten Weg innerhalb von S
gefolgt von einer einzigen Kante
2
2
7
4
s
0
1
6 8
1
7
5
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
40
Kürzeste Wege
Neuer Ansatz:
• Sei S die Menge der entdeckten Knoten
• Merke optimale Lösung für S:
Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten
Weges von s nach v
• Zu Beginn: S={s} und d[s]=0
• Für v∈V-S berechne kürzesten Weg innerhalb von S
gefolgt von einer einzigen Kante
2
2
2
7
4
s
0
6 8
1
7
7
SS 2008
1
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
5
41
41
Kürzeste Wege
Neuer Ansatz:
• Sei S die Menge der entdeckten Knoten
• Merke optimale Lösung für S:
Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten
Weges von s nach v
• Zu Beginn: S={s} und d[s]=0
• Für v∈V-S berechne kürzesten Weg innerhalb von S
gefolgt von einer einzigen Kante
2
2
2
7
4
s
0
1
6 8
1
7
5
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
42
42
Kürzeste Wege
Neuer Ansatz:
• Sei S die Menge der entdeckten Knoten
• Merke optimale Lösung für S:
Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten
Weges von s nach v
• Zu Beginn: S={s} und d[s]=0
• Für v∈V-S berechne kürzesten Weg innerhalb von S
gefolgt von einer einzigen Kante
4
2
2
2
7
4
s
0
6 8
1
7
7
SS 2008
1
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
5
43
43
Kürzeste Wege
Neuer Ansatz:
• Sei S die Menge der entdeckten Knoten
• Merke optimale Lösung für S:
Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten
Weges von s nach v
• Zu Beginn: S={s} und d[s]=0
• Für v∈V-S berechne kürzesten Weg innerhalb von S
gefolgt von einer einzigen Kante
4
2
2
2
7
4
s
0
1
6 8
1
7
5
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
44
44
Kürzeste Wege
Neuer Ansatz:
• Sei S die Menge der entdeckten Knoten
• Merke optimale Lösung für S:
Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten
Weges von s nach v
• Zu Beginn: S={s} und d[s]=0
• Für v∈V-S berechne kürzesten Weg innerhalb von S
gefolgt von einer einzigen Kante
4
2
2
2
7
4
s
0
6 8
1
7
5
SS 2008
1
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
11
5
45
45
Kürzeste Wege
Neuer Ansatz:
• Sei S die Menge der entdeckten Knoten
• Merke optimale Lösung für S:
Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten
Weges von s nach v
• Zu Beginn: S={s} und d[s]=0
• Für v∈V-S berechne kürzesten Weg innerhalb von S
gefolgt von einer einzigen Kante
4
2
2
2
7
4
s
0
6 8
1
7
5
SS 2008
1
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
5
46
46
Kürzeste Wege
Neuer Ansatz:
• Sei S die Menge der entdeckten Knoten
• Merke optimale Lösung für S:
Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten
Weges von s nach v
• Zu Beginn: S={s} und d[s]=0
• Für v∈V-S berechne kürzesten Weg innerhalb von S
gefolgt von einer einzigen Kante
4
2
2
2
7
4
s
0
6 8
1
7
5
SS 2008
1
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
11
5
47
10
47
Kürzeste Wege
Neuer Ansatz:
• Sei S die Menge der entdeckten Knoten
• Merke optimale Lösung für S:
Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten
Weges von s nach v
• Zu Beginn: S={s} und d[s]=0
• Für v∈V-S berechne kürzesten Weg innerhalb von S
gefolgt von einer einzigen Kante
4
2
2
2
7
4
s
0
6 8
1
7
5
SS 2008
1
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
11
5
48
10
48
Kürzeste Wege
Neuer Ansatz:
• Sei S die Menge der entdeckten Knoten
• Merke optimale Lösung für S:
Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten
Weges von s nach v
• Zu Beginn: S={s} und d[s]=0
• Für v∈V-S berechne kürzesten Weg innerhalb von S
gefolgt von einer einzigen Kante
4
2
2
2
7
4
s
0
6 8
1
7
5
SS 2008
1
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
11
5
49
10
49
Kürzeste Wege
Neuer Ansatz:
• Sei S die Menge der entdeckten Knoten
• Merke optimale Lösung für S:
Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten
Weges von s nach v
• Zu Beginn: S={s} und d[s]=0
• Für v∈V-S berechne kürzesten Weg innerhalb von S
gefolgt von einer einzigen Kante
4
2
2
2
7
4
s
0
6 8
1
7
5
SS 2008
1
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
11
5
50
10
50
Kürzeste Wege
Neuer Ansatz:
• Sei S die Menge der entdeckten Knoten
• Merke optimale Lösung für S:
Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten
Weges von s nach v
• Zu Beginn: S={s} und d[s]=0
• Für v∈V-S berechne kürzesten Weg innerhalb von S
gefolgt von einer einzigen Kante
4
2
2
2
Algorithmus berechnet
kürzeste Wege im Beispiel
korrekt
7
4
s
0
6 8
1
7
5
SS 2008
1
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
11
5
51
10
51
Kürzeste Wege
Algorithmus von Dijkstra:
1. Es sei S die Menge der entdeckten Knoten
2. Invariante: Merke optimale Lösung für S:
Für alle v∈S sei d[v] = δ(s,v) die Länge des kürzesten
Weges von s nach v
3. Zu Beginn: S={s} und d[s]=0
4. while V≠S do
5. Wähle Knoten v∈V \ S mit mindestens einer Kante
aus S und für den d‘[v] = min d[u] + w(u,v) so klein wie
(u,v)∈E
möglich ist
6. Füge v zu S hinzu und setze d[v] ← d‘[v]
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
52
Kürzeste Wege
Wie kann man Pfade berechnen?
• Wie bei BFS/DFS über Feld π
• Wenn (u,v) die Kante ist für die das Minimum in Zeile 5
erreicht wird, dann setze π[v] ← u
• Kürzester s-u-Weg P(u) ist implizit gespeichert:
• Für u=s haben wir den leeren Weg als kürzesten Weg
von s nach s
• Für u≠s gilt:
P(u) besteht aus Weg P(π(u)) gefolgt von Kante (π[u],u)
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
53
Kürzeste Wege
Satz 14.14 (Korrektheit):
(Invariante) Für jedes u∈S ist zu jedem Zeitpunkt der
Ausführung des Algorithmus der Weg P(u) ein kürzester
s-u-Weg.
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
54
Herunterladen