Kürzeste Pfadalgorithmen
Datenstrukturen und Algorithmen
Vorlesung 17: Kürzeste Pfade (K24)
Joost-Pieter Katoen
Lehrstuhl für Informatik 2 Software Modeling and Verification Group
https://moves.rwth-aachen.de/teaching/ss-18/dsal/
25. Juni 2018
Joost-Pieter Katoen Datenstrukturen und Algorithmen 1/43
Kürzeste Pfadalgorithmen
Übersicht
1 Kürzeste Pfade
2 Single-Source Shortest Path Bellman-Ford
Dijkstra
3 All-Pairs Shortest Paths Transitive Hülle
Algorithmus von Warshall Der Algorithmus von Floyd
Joost-Pieter Katoen Datenstrukturen und Algorithmen 2/43
0am .⇒€oe \
in 1 a Prim "gieig
"O
(
Nl .log
Nl +LED
Kürzeste Pfadalgorithmen Kürzeste Pfade
Übersicht
1 Kürzeste Pfade
2 Single-Source Shortest Path Bellman-Ford
Dijkstra
3 All-Pairs Shortest Paths Transitive Hülle
Algorithmus von Warshall Der Algorithmus von Floyd
Joost-Pieter Katoen Datenstrukturen und Algorithmen 3/43
Kürzeste Pfadalgorithmen Kürzeste Pfade
Das Rechenproblem: kürzeste Pfade
Joost-Pieter Katoen Datenstrukturen und Algorithmen 4/43
Kürzeste Pfadalgorithmen Kürzeste Pfade
Das Rechenproblem: kürzeste Pfade
Joost-Pieter Katoen Datenstrukturen und Algorithmen 5/43
Kürzeste Pfadalgorithmen Kürzeste Pfade
Andere Rechenprobleme: kürzester Weg
Beispiel (kürzester Weg)
Eingabe: 1. Eine Straßenkarte, auf der der Abstand zwischen jedem Paar benachbarter Kreuzungen eingezeichnet ist, 2. eine Startkreuzung s , und
3. eine Zielkreuzung t.
Ausgabe: Der kürzeste Weg von s nach t.
Joost-Pieter Katoen Datenstrukturen und Algorithmen 6/43
:
inKürzeste Pfadalgorithmen Kürzeste Pfade
Kürzeste Pfade
Gegeben sei ein (kanten-)gewichteter Graph G = (V , E , W ).
Das Gewicht eines Pfades ist die Summe der Gewichte seiner Kanten. Ein kürzester Pfad von einem Knoten s œ V zu einem anderen Knoten v œ V ist ein Pfad von s nach v mit minimalem Gewicht.
Sei im Folgenden ” : (V ◊ V ) æ ( R fi { +inf} ) eine Funktion, sodaß:
I ”(s , v) ist das Gewicht des kürzesten Pfades von s nach v , und
I ”(s , v) = +inf gdw. v von s nicht erreichbar ist.
Joost-Pieter Katoen Datenstrukturen und Algorithmen 7/43
W
:E→1R
/
Kürzeste Pfadalgorithmen Kürzeste Pfade
Kürzeste Pfade
Gegeben sei ein (kanten-)gewichteter Graph G = (V , E , W ).
Das Gewicht eines Pfades ist die Summe der Gewichte seiner Kanten.
Ein kürzester Pfad von einem Knoten s œ V zu einem anderen Knoten v œ V ist ein Pfad von s nach v mit minimalem Gewicht.
Sei im Folgenden ” : (V ◊ V ) æ ( R fi { +inf} ) eine Funktion, sodaß:
I ”(s , v) ist das Gewicht des kürzesten Pfades von s nach v , und
I ”(s , v) = +inf gdw. v von s nicht erreichbar ist.
Joost-Pieter Katoen Datenstrukturen und Algorithmen 7/43
0-7>01,0-22,0
÷
Kürzeste Pfadalgorithmen Kürzeste Pfade
Kürzeste Pfade
Gegeben sei ein (kanten-)gewichteter Graph G = (V , E , W ).
Das Gewicht eines Pfades ist die Summe der Gewichte seiner Kanten.
Ein kürzester Pfad von einem Knoten s œ V zu einem anderen Knoten v œ V ist ein Pfad von s nach v mit minimalem Gewicht.
Sei im Folgenden ” : (V ◊ V ) æ ( R fi { +inf} ) eine Funktion, sodaß:
I ”(s , v) ist das Gewicht des kürzesten Pfades von s nach v , und
I ”(s , v) = +inf gdw. v von s nicht erreichbar ist.
Joost-Pieter Katoen Datenstrukturen und Algorithmen 7/43
Kürzeste Pfadalgorithmen Kürzeste Pfade
Kürzeste Pfade
Gegeben sei ein (kanten-)gewichteter Graph G = (V , E , W ).
Das Gewicht eines Pfades ist die Summe der Gewichte seiner Kanten.
Ein kürzester Pfad von einem Knoten s œ V zu einem anderen Knoten v œ V ist ein Pfad von s nach v mit minimalem Gewicht.
Sei im Folgenden ” : (V ◊ V ) æ ( R fi { +inf} ) eine Funktion, sodaß:
I ”(s , v) ist das Gewicht des kürzesten Pfades von s nach v , und
I ”(s , v) = +inf gdw. v von s nicht erreichbar ist.
Joost-Pieter Katoen Datenstrukturen und Algorithmen 7/43
s V
o_0
0U s (
gv )-÷
Kürzeste Pfadalgorithmen Kürzeste Pfade
Kürzeste Pfade
Es gibt verschiedene Varianten:
I Kürzeste Pfade von einem Startknoten s zu allen anderen Knoten:
Single-Source Shortest Paths (SSSP).
I Kürzeste Pfade von allen Knoten zu einem Zielknoten t. Lässt sich auf SSSP zurückführen.
I Kürzeste Pfade für ein festes Knotenpaar u, v.
Es ist kein Algorithmus bekannt, der asymptotisch schneller als der beste SSSP-Algorithmus ist.
I Kürzeste Pfade für alle Knotenpaare.
All-Pairs Shortest Paths (zweiter Teil dieser Vorlesung).
Joost-Pieter Katoen Datenstrukturen und Algorithmen 8/43
ie
- -
s - vev tuev
Kürzeste Pfadalgorithmen Kürzeste Pfade
Kürzeste Pfade
Es gibt verschiedene Varianten:
I Kürzeste Pfade von einem Startknoten s zu allen anderen Knoten:
Single-Source Shortest Paths (SSSP).
I Kürzeste Pfade von allen Knoten zu einem Zielknoten t.
Lässt sich auf SSSP zurückführen.
I Kürzeste Pfade für ein festes Knotenpaar u, v.
Es ist kein Algorithmus bekannt, der asymptotisch schneller als der beste SSSP-Algorithmus ist.
I Kürzeste Pfade für alle Knotenpaare.
All-Pairs Shortest Paths (zweiter Teil dieser Vorlesung).
Joost-Pieter Katoen Datenstrukturen und Algorithmen 8/43
Kürzeste Pfadalgorithmen Kürzeste Pfade
Kürzeste Pfade
Es gibt verschiedene Varianten:
I Kürzeste Pfade von einem Startknoten s zu allen anderen Knoten:
Single-Source Shortest Paths (SSSP).
I Kürzeste Pfade von allen Knoten zu einem Zielknoten t.
Lässt sich auf SSSP zurückführen.
I Kürzeste Pfade für ein festes Knotenpaar u, v.
Es ist kein Algorithmus bekannt, der asymptotisch schneller als der beste SSSP-Algorithmus ist.
I Kürzeste Pfade für alle Knotenpaare.
All-Pairs Shortest Paths (zweiter Teil dieser Vorlesung).
Joost-Pieter Katoen Datenstrukturen und Algorithmen 8/43
#
Bellman
-Ford
&
-
pyhstra
Kürzeste Pfadalgorithmen Kürzeste Pfade
Kürzeste Pfade
Es gibt verschiedene Varianten:
I Kürzeste Pfade von einem Startknoten s zu allen anderen Knoten:
Single-Source Shortest Paths (SSSP).
I Kürzeste Pfade von allen Knoten zu einem Zielknoten t.
Lässt sich auf SSSP zurückführen.
I Kürzeste Pfade für ein festes Knotenpaar u, v.
Es ist kein Algorithmus bekannt, der asymptotisch schneller als der beste SSSP-Algorithmus ist.
I Kürzeste Pfade für alle Knotenpaare.
All-Pairs Shortest Paths (zweiter Teil dieser Vorlesung).
Joost-Pieter Katoen Datenstrukturen und Algorithmen 8/43
Kürzeste Pfadalgorithmen Kürzeste Pfade
Kürzeste Pfade
Es gibt verschiedene Varianten:
I Kürzeste Pfade von einem Startknoten s zu allen anderen Knoten:
Single-Source Shortest Paths (SSSP).
I Kürzeste Pfade von allen Knoten zu einem Zielknoten t.
Lässt sich auf SSSP zurückführen.
I Kürzeste Pfade für ein festes Knotenpaar u, v.
Es ist kein Algorithmus bekannt, der asymptotisch schneller als der beste SSSP-Algorithmus ist.
I Kürzeste Pfade für alle Knotenpaare.
All-Pairs Shortest Paths (zweiter Teil dieser Vorlesung).
Joost-Pieter Katoen Datenstrukturen und Algorithmen 8/43
.
Kürzeste Pfadalgorithmen Kürzeste Pfade
Kürzeste Pfade
Es gibt verschiedene Varianten:
I Kürzeste Pfade von einem Startknoten s zu allen anderen Knoten:
Single-Source Shortest Paths (SSSP).
I Kürzeste Pfade von allen Knoten zu einem Zielknoten t.
Lässt sich auf SSSP zurückführen.
I Kürzeste Pfade für ein festes Knotenpaar u, v.
Es ist kein Algorithmus bekannt, der asymptotisch schneller als der beste SSSP-Algorithmus ist.
I Kürzeste Pfade für alle Knotenpaare.
All-Pairs Shortest Paths (zweiter Teil dieser Vorlesung).
Joost-Pieter Katoen Datenstrukturen und Algorithmen 8/43
Kürzeste Pfadalgorithmen Kürzeste Pfade
Kürzeste Pfade
Es gibt verschiedene Varianten:
I Kürzeste Pfade von einem Startknoten s zu allen anderen Knoten:
Single-Source Shortest Paths (SSSP).
I Kürzeste Pfade von allen Knoten zu einem Zielknoten t.
Lässt sich auf SSSP zurückführen.
I Kürzeste Pfade für ein festes Knotenpaar u, v.
Es ist kein Algorithmus bekannt, der asymptotisch schneller als der beste SSSP-Algorithmus ist.
I Kürzeste Pfade für alle Knotenpaare.
All-Pairs Shortest Paths (zweiter Teil dieser Vorlesung).
Joost-Pieter Katoen Datenstrukturen und Algorithmen 8/43
o
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Übersicht
1 Kürzeste Pfade
2 Single-Source Shortest Path Bellman-Ford
Dijkstra
3 All-Pairs Shortest Paths Transitive Hülle
Algorithmus von Warshall Der Algorithmus von Floyd
Joost-Pieter Katoen Datenstrukturen und Algorithmen 9/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Single-Source Shortest Paths
Problem (Single-Source Shortest Path)
Für einen gegebenen Knoten s œ V (die Quelle / source), bestimme für jeden anderen Knoten t œ V , der aus s erreichbar ist, einen kürzesten Pfad von s zu t.
Joost-Pieter Katoen Datenstrukturen und Algorithmen 10/43
[ ]
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Übersicht
1 Kürzeste Pfade
2 Single-Source Shortest Path Bellman-Ford
Dijkstra
3 All-Pairs Shortest Paths Transitive Hülle
Algorithmus von Warshall Der Algorithmus von Floyd
Joost-Pieter Katoen Datenstrukturen und Algorithmen 11/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Der Bellman-Ford Algorithmus
I Kürzeste Pfade bei einem einzigen Startknoten.
I Erlaubt negative Kantengewichte.
I Er zeigt an, ob es einen Zyklus mit negativem Gewicht gibt, der vom Startknoten aus erreichbar ist.
I Falls ein solcher Zyklus gefunden wird, gibt es keine Lösung
I
(da die Gewichte der kürzesten Pfade nicht mehr wohldefiniert sind).
I Sonst verbessert der Algorithmus iterativ für jeden Knoten v eine obere Grenze dist[v] an ”(s , v ), bis das Minimum gefunden wird.
I Kürzeste Pfade können nach Terminierung mittels die im Array prev gespeicherten Vorgängerknoten entlang eines kürzesten Pfades konstruiert werden.
Joost-Pieter Katoen Datenstrukturen und Algorithmen 12/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Der Bellman-Ford Algorithmus
I Kürzeste Pfade bei einem einzigen Startknoten.
I Erlaubt negative Kantengewichte.
I Er zeigt an, ob es einen Zyklus mit negativem Gewicht gibt, der vom Startknoten aus erreichbar ist.
I Falls ein solcher Zyklus gefunden wird, gibt es keine Lösung
I
(da die Gewichte der kürzesten Pfade nicht mehr wohldefiniert sind).
I Sonst verbessert der Algorithmus iterativ für jeden Knoten v eine obere Grenze dist[v] an ”(s , v ), bis das Minimum gefunden wird.
I Kürzeste Pfade können nach Terminierung mittels die im Array prev gespeicherten Vorgängerknoten entlang eines kürzesten Pfades konstruiert werden.
Joost-Pieter Katoen Datenstrukturen und Algorithmen 12/43
v, vz S
(
s, v,) =3sy
'
#
Owe oGvd=
- ,0
to¥§fIqo_@
orIs rays
.vn)
. s-2\qj@q%m{ 5+6,5+16
= k^^ >.D. if
he,5( s, v
7) Inn -22-6,2+-3
.k |k7n }
= - aKürzeste Pfadalgorithmen Single-Source Shortest Path
Der Bellman-Ford Algorithmus
I Kürzeste Pfade bei einem einzigen Startknoten.
I Erlaubt negative Kantengewichte.
I Er zeigt an, ob es einen Zyklus mit negativem Gewicht gibt, der vom Startknoten aus erreichbar ist.
I Falls ein solcher Zyklus gefunden wird, gibt es keine Lösung
I
(da die Gewichte der kürzesten Pfade nicht mehr wohldefiniert sind).
I Sonst verbessert der Algorithmus iterativ für jeden Knoten v eine obere Grenze dist[v] an ”(s , v ), bis das Minimum gefunden wird.
I Kürzeste Pfade können nach Terminierung mittels die im Array prev gespeicherten Vorgängerknoten entlang eines kürzesten Pfades konstruiert werden.
Joost-Pieter Katoen Datenstrukturen und Algorithmen 12/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Der Bellman-Ford Algorithmus
I Kürzeste Pfade bei einem einzigen Startknoten.
I Erlaubt negative Kantengewichte.
I Er zeigt an, ob es einen Zyklus mit negativem Gewicht gibt, der vom Startknoten aus erreichbar ist.
I Falls ein solcher Zyklus gefunden wird, gibt es keine Lösung
I
(da die Gewichte der kürzesten Pfade nicht mehr wohldefiniert sind).
I Sonst verbessert der Algorithmus iterativ für jeden Knoten v eine obere Grenze dist[v] an ”(s , v ), bis das Minimum gefunden wird.
I Kürzeste Pfade können nach Terminierung mittels die im Array prev gespeicherten Vorgängerknoten entlang eines kürzesten Pfades konstruiert werden.
Joost-Pieter Katoen Datenstrukturen und Algorithmen 12/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Der Bellman-Ford Algorithmus
I Kürzeste Pfade bei einem einzigen Startknoten.
I Erlaubt negative Kantengewichte.
I Er zeigt an, ob es einen Zyklus mit negativem Gewicht gibt, der vom Startknoten aus erreichbar ist.
I Falls ein solcher Zyklus gefunden wird, gibt es keine Lösung
I
(da die Gewichte der kürzesten Pfade nicht mehr wohldefiniert sind).
I Sonst verbessert der Algorithmus iterativ für jeden Knoten v eine obere Grenze dist[v] an ”(s , v), bis das Minimum gefunden wird.
I Kürzeste Pfade können nach Terminierung mittels die im Array prev gespeicherten Vorgängerknoten entlang eines kürzesten Pfades konstruiert werden.
Joost-Pieter Katoen Datenstrukturen und Algorithmen 12/43
or Is
,v) E dist [
v]
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Der Bellman-Ford Algorithmus
I Kürzeste Pfade bei einem einzigen Startknoten.
I Erlaubt negative Kantengewichte.
I Er zeigt an, ob es einen Zyklus mit negativem Gewicht gibt, der vom Startknoten aus erreichbar ist.
I Falls ein solcher Zyklus gefunden wird, gibt es keine Lösung
I
(da die Gewichte der kürzesten Pfade nicht mehr wohldefiniert sind).
I Sonst verbessert der Algorithmus iterativ für jeden Knoten v eine obere Grenze dist[v] an ”(s , v), bis das Minimum gefunden wird.
I Kürzeste Pfade können nach Terminierung mittels die im Array prev gespeicherten Vorgängerknoten entlang eines kürzesten Pfades konstruiert werden.
Joost-Pieter Katoen Datenstrukturen und Algorithmen 12/43
o
- d
'
-
if prevlsuz ]=v
,SSSP - Baum •
\
,.
↳
•y→ .Y
prev Tv , ]=ss
↳
prev Ts]=
- 1Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford: Idee
I Initialisierung: dist[v]=+inf , dist[start]=0 .
I Für alle Kanten (v , w ) œ E :
I
Relaxierung: Ist das bisher bekannte Gewicht dist[w] größer als dist[v] + W(v,w), dann verbessere dist[w] auf diesen Wert.
I Wiederhole den vorigen Schritt bis sich nichts mehr ändert, bzw. breche ab, falls ein negativer Zyklus gefunden wurde.
Korrektheit vom Bellman-Ford Algorithmus
Wenn nach | V |≠ 1 Iterationen noch Verbesserungen möglich sind, dann gibt es einen negativen Zyklus. Andernfalls dist[v] = ”(s, v ) für alle v œ V .
Beweis.
Beweisidee: Ein Pfad ohne Zyklen in (V , E , W ) hat eine Länge 6 | V |≠ 1.
Joost-Pieter Katoen Datenstrukturen und Algorithmen 13/43
5 (
s ,v)
E distTv ]
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford: Idee
I Initialisierung: dist[v]=+inf , dist[start]=0 .
I Für alle Kanten (v , w ) œ E :
I
Relaxierung: Ist das bisher bekannte Gewicht dist[w] größer als dist[v] + W(v,w), dann verbessere dist[w] auf diesen Wert.
I Wiederhole den vorigen Schritt bis sich nichts mehr ändert, bzw. breche ab, falls ein negativer Zyklus gefunden wurde.
Korrektheit vom Bellman-Ford Algorithmus
Wenn nach | V |≠ 1 Iterationen noch Verbesserungen möglich sind, dann gibt es einen negativen Zyklus. Andernfalls dist[v] = ”(s, v ) für alle v œ V .
Beweis.
Beweisidee: Ein Pfad ohne Zyklen in (V , E , W ) hat eine Länge 6 | V |≠ 1.
Joost-Pieter Katoen Datenstrukturen und Algorithmen 13/43
start V W
• •
f.
WC
v. w)
dist Eu]
+ WG ,w)
- <
dist
[u]
dist Iw]
÷ tTw]
→ Passe dista)
andistIw]=distTu]+W(v=
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford: Idee
I Initialisierung: dist[v]=+inf , dist[start]=0 .
I Für alle Kanten (v , w ) œ E :
I
Relaxierung: Ist das bisher bekannte Gewicht dist[w] größer als dist[v] + W(v,w), dann verbessere dist[w] auf diesen Wert.
I Wiederhole den vorigen Schritt bis sich nichts mehr ändert, bzw.
breche ab, falls ein negativer Zyklus gefunden wurde.
Korrektheit vom Bellman-Ford Algorithmus
Wenn nach | V |≠ 1 Iterationen noch Verbesserungen möglich sind, dann gibt es einen negativen Zyklus. Andernfalls dist[v] = ”(s, v ) für alle v œ V .
Beweis.
Beweisidee: Ein Pfad ohne Zyklen in (V , E , W ) hat eine Länge 6 | V |≠ 1.
Joost-Pieter Katoen Datenstrukturen und Algorithmen 13/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford: Idee
I Initialisierung: dist[v]=+inf , dist[start]=0 .
I Für alle Kanten (v , w ) œ E :
I
Relaxierung: Ist das bisher bekannte Gewicht dist[w] größer als dist[v] + W(v,w), dann verbessere dist[w] auf diesen Wert.
I Wiederhole den vorigen Schritt bis sich nichts mehr ändert, bzw.
breche ab, falls ein negativer Zyklus gefunden wurde.
Korrektheit vom Bellman-Ford Algorithmus
Wenn nach | V |≠ 1 Iterationen noch Verbesserungen möglich sind, dann gibt es einen negativen Zyklus. Andernfalls dist[v] = ” (s, v ) für alle v œ V .
Beweis.
Beweisidee: Ein Pfad ohne Zyklen in (V , E , W ) hat eine Länge 6 | V |≠ 1.
Joost-Pieter Katoen Datenstrukturen und Algorithmen 13/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford in Pseudo-Code
1
bool bellmanFord(List adj[n], int n, int start,
2
int &dist[n], int &prev[n]) {
3
for (int v = 0; v < n; v++) { // für alle Knoten v
4
dist[v] = +inf; // +inf ist initiale Entfernung von start zu v
5
prev[v] = -1; // v hat noch kein Vorgänger
6
}
7
dist[start] = 0; // die Entfernung von start zu start ist 0
8
for (int i = 1; i < n; i++) // n-1 Durchläufe
9
for (int v = 0; v < n; v++) // für alle Knoten v
10
foreach (edge in adj[v]) // für jede aus v ausgehende Kante
11
if (dist[edge.target] > dist[v] + edge.weight) {
12
dist[edge.target] = dist[v] + edge.weight;
13
prev[edge.target] = v;
14
} // Relaxierung
15
for (int v = 0; v < n; v++) // für alle Knoten v
16
foreach (edge in adj[v]) // für jede aus v ausgehende Kante
17
if (dist[edge.target] > dist[v] + edge.weight)
18
return false; // es existiert Zyklus mit negativem Gewicht
19
return true;
20
}
I Zeitkomplexität: O(|V | · |E |).
Joost-Pieter Katoen Datenstrukturen und Algorithmen 14/43
s
.
•V=•W
:
ist LT
]
= S(
start ,v)
prev speicherdiesen SP - Baum
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford in Pseudo-Code
1
bool bellmanFord(List adj[n], int n, int start,
2
int &dist[n], int &prev[n]) {
3
for (int v = 0; v < n; v++) { // für alle Knoten v
4
dist[v] = +inf; // +inf ist initiale Entfernung von start zu v
5
prev[v] = -1; // v hat noch kein Vorgänger
6
}
7
dist[start] = 0; // die Entfernung von start zu start ist 0
8
for (int i = 1; i < n; i++) // n-1 Durchläufe
9
for (int v = 0; v < n; v++) // für alle Knoten v
10
foreach (edge in adj[v]) // für jede aus v ausgehende Kante
11
if (dist[edge.target] > dist[v] + edge.weight) {
12
dist[edge.target] = dist[v] + edge.weight;
13
prev[edge.target] = v;
14
} // Relaxierung
15
for (int v = 0; v < n; v++) // für alle Knoten v
16
foreach (edge in adj[v]) // für jede aus v ausgehende Kante
17
if (dist[edge.target] > dist[v] + edge.weight)
18
return false; // es existiert Zyklus mit negativem Gewicht
19
return true;
20
}
I Zeitkomplexität: O(|V | · |E |).
Joost-Pieter Katoen Datenstrukturen und Algorithmen 14/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
Œ
Œ Œ
Œ
Œ
Œ Œ
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
y y dist
[ 5k¥ dist [
..]
=P
stt
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
14
Œ Œ
Œ
Œ
Œ Œ
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
preu ID
=sa V S
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
14
Œ Œ
6
Œ
Œ Œ
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
14
Œ Œ
6
Œ
Œ Œ
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
14
18 Œ
6
Œ
Œ Œ
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
14
18 Œ
6
24
Œ Œ
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
14
18 Œ
6
24
Œ Œ
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
14
18 27
6
24
Œ Œ
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
14
18 27
6
24
Œ Œ
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
14
18 27
6
24
15 Œ
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
14
18 27
6
24
15 Œ
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
18 27
6
24
15 Œ
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
relaxiemng
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
18 27
6
24
15 Œ
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
18 27
6
24
15 Œ
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
17 27
6
24
15 Œ
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
17 27
6
24
15 30
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
17 27
6
24
15 30
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
17 27
6
24
15 30
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
17 27
6
24
15 30
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
13 27
6
24
15 30
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
13 27
6
19
15 30
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
13 27
6
19
15 30
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
13 22
6
19
15 30
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
13 22
6
19
15 30
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
13 22
6
19
10 30
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
13 22
6
19
10 30
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
13 22
6
19
10 30
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
13 22
6
19
10 30
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
12 22
6
19
10 30
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
12 22
6
19
10 25
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
12 22
6
19
10 25
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
12 22
6
19
10 25
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
12 22
6
19
10 25
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
12 22
6
19
10 25
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
12 21
6
19
10 25
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
12 21
6
19
10 25
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
12 21
6
19
9 25
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
12 21
6
19
9 25
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
12 21
6
19
9 25
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
12 21
6
19
9 25
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
11 21
6
19
9 25
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
11 21
6
19
9 24
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
11 21
6
19
9 24
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
11 21
6
19
9 24
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
11 21
6
19
9 24
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
11 21
6
19
9 24
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
11 20
6
19
9 24
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
11 20
6
19
9 24
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
11 20
6
19
8 24
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
11 20
6
19
8 24
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
11 20
6
19
8 24
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
11 20
6
19
8 24
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
10 20
6
19
8 24
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
10 20
6
19
8 23
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
10 20
6
19
8 23
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Bellman-Ford – Beispiel
0
9
10 20
6
19
8 23
14
6
4
10
9
-12 3
3 8
2
15
Joost-Pieter Katoen Datenstrukturen und Algorithmen 15/43
Theorem ( komektheit BF Algorithms )
a.
Falls G Kaine Zyklen Mit negation Gewicht
eneichbar
onsSEV hat
,damn ergibt den
Algorithms
"the
"und dist [v]= JCS ,v )
fit all ve ✓ and der Vozoingerteilgrgsh
prev ist ein Baum teurzeste Pfade Mit
Wurzel s
.
b. Falls G hat neg
.Zyklen eneiclba
oursS
,damn ezibt sicb " false "
.÷
eveis ( skizne ) :
a .
Nehme as kein eneichban negative Zyklen
n
.wivzeigh dist [v]=5( s ,v ) beiteminie
mng
.Sei Vans s erreichbar and
p= ( Vo
,4
, . - - . - - . .,
Uk >
- in
=s
=✓
eiies azyklischenkurtesth Pfad
von shad v
.( Beni pexistiet wegen Annohme )
Es folgt k E IVI
-T
,da p azyklisch
Jede der NI
- 1Iteration
ender for Schleife
in den Zeier 11-73 relaxiet alle IEI Kates
.Indo i
-te Iteration aneh vi.
,→
Y
.Do
peinknr2estePfadist.giltiLdsth-distFvkJ-sCs.uk3-frCs@WennsYv.dannfo1gtdistLvT-D-sCs.v
)
2
.Die Tatsache
,
dap prev ein Barm enthelt
Mit wurzels and
nurkiirzeste Pfede
,fast
des 1
-+ die
Einfigwyesihprevimadeb
.
Sei Z= ( Vo
,
. . .
;Vk ) einen negative Zyklus
emeichb
-and s
.
Also
± Z i.
,WCV ...
,,y
.) < 0
Widerspmchsbeweis
.Nehme
, an ,DF gibt
3
the " ( stall
"false
') zurich
.
Wenn BF
"the
"liefet
;(* ) dist Tv ;] E dist [ vi.
,] + W ( vi.
,,ui )
Vociek
Summioesiuber Zykhis Z
=Go
. ...vk )
,k he k
I dist To ;] E 2- dist [ vi.
,] + I War
,,v ;)
it i=
,= i.
,÷
.Idt
...+ dist Turk ]
=
dist Tvk ]
k
§g dist Tv ;] E §g dist Ii ] + E Wlvi
. ,,v ;)
E in
# Widerspmch
|o
e KIZ
,
W( vi.
,,vi ) zur
- Annahme
,dap Z
negativist
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Übersicht
1 Kürzeste Pfade
2 Single-Source Shortest Path Bellman-Ford
Dijkstra
3 All-Pairs Shortest Paths Transitive Hülle
Algorithmus von Warshall Der Algorithmus von Floyd
Joost-Pieter Katoen Datenstrukturen und Algorithmen 16/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Dijkstras Algorithmus
Annahme
Kantengewichte sind nicht-negativ, d. h. W (v , w ) > 0 für all (v, w ) œ E .
I Also: Kürzeste Pfade enthalten keine Zyklen.
Edsger Wybe Dijkstra (1930-2002), Turing Award 1972
Joost-Pieter Katoen Datenstrukturen und Algorithmen 17/43
IS - IS
f F os€)
-
EWD 0 . . - .
goto
considered harmfulTgsg
: MST , SSSP1 - 10 + ^^
DNF
Dykstra
frontsemaphores
Volkswagen
busAlgol
60=
tinny
machineTule
, Austin- -
.
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Dijkstras Algorithmus: Übersicht
Wie beim Algorithmus von Prim ordnen wir die Knoten in drei Kategorien:
Baumknoten: Knoten, die Teil vom bis jetzt konstruierten Baum sind.
Randknoten: Nicht im Baum, jedoch adjazent zu Knoten im Baum.
Ungesehene Knoten: Alle anderen Knoten.
Grundkonzept:
I Kein Knoten außerhalb des Baumes hat einen kürzeren Pfad als die Knoten im Baum.
I Jedem Knoten v ist ein Wert dist[v] zugeordnet. Dieser Wert ist:
I
für Baumknoten dist[v] = ”(s, v);
I
für Randknoten das Minimum der Gewichte aller Pfade vom Startknoten zu v, wobei die letzte Kante im Schnitt liegt;
I
für ungesehenen Knoten +inf.
Joost-Pieter Katoen Datenstrukturen und Algorithmen 18/43
"
gierige
"strategic
inkremestelle Barm konstnktsvn .
#\⇐•←r
• .•
* # ⇐
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Dijkstras Algorithmus: Übersicht
Wie beim Algorithmus von Prim ordnen wir die Knoten in drei Kategorien:
Baumknoten: Knoten, die Teil vom bis jetzt konstruierten Baum sind.
Randknoten: Nicht im Baum, jedoch adjazent zu Knoten im Baum.
Ungesehene Knoten: Alle anderen Knoten.
Grundkonzept:
I Kein Knoten außerhalb des Baumes hat einen kürzeren Pfad als die Knoten im Baum.
I Jedem Knoten v ist ein Wert dist[v] zugeordnet. Dieser Wert ist:
I
für Baumknoten dist[v] = ”(s, v);
I
für Randknoten das Minimum der Gewichte aller Pfade vom Startknoten zu v, wobei die letzte Kante im Schnitt liegt;
I
für ungesehenen Knoten +inf.
Joost-Pieter Katoen Datenstrukturen und Algorithmen 18/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Dijkstras Algorithmus: Übersicht
Wie beim Algorithmus von Prim ordnen wir die Knoten in drei Kategorien:
Baumknoten: Knoten, die Teil vom bis jetzt konstruierten Baum sind.
Randknoten: Nicht im Baum, jedoch adjazent zu Knoten im Baum.
Ungesehene Knoten: Alle anderen Knoten.
Grundkonzept:
I Kein Knoten außerhalb des Baumes hat einen kürzeren Pfad als die Knoten im Baum.
I Jedem Knoten v ist ein Wert dist[v] zugeordnet. Dieser Wert ist:
I
für Baumknoten dist[v] = ”(s, v);
I
für Randknoten das Minimum der Gewichte aller Pfade vom Startknoten zu v, wobei die letzte Kante im Schnitt liegt;
I
für ungesehenen Knoten +inf.
Joost-Pieter Katoen Datenstrukturen und Algorithmen 18/43
T.se#a
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Dijkstras Kürzeste-Wege-Algorithmus – Grundgerüst
1
// ungerichteter Graph G mit n Knoten
2
void dijkstraSP(Graph G, int n) {
3
initialisiere alle Knoten als ungesehen (WHITE);
4
markiere s als Baum (BLACK) und setze d(s, s) = 0;
5
reklassifiziere alle zu s adjazenten Knoten als Rand (GRAY);
6
while (es gibt Randknoten) {
7
wähle von allen Kanten zwischen einem Baumknoten t und
8
einem Randknoten v mit minimalem d(s, t) + W (t, v);
9
reklassifiziere v als Baum (BLACK);
10
füge Kante (t, v) zum Baum hinzu;
11
setze d(s, v ) = d(s, t) + W (t, v);
12
reklassifiziere alle zu v adjazenten ungesehenen Knoten
13
mit Rand (GRAY);
14
}
15
}
Unterschiede zu Prim’s Algorithmus sind in rot gekennzeichnet.
Joost-Pieter Katoen Datenstrukturen und Algorithmen 19/43
⇐ IE
.I€*¥
s
•
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Dijkstras Kürzeste-Wege-Algorithmus – Beispiel
0
Œ
Œ
Œ
Œ
Œ Œ
Œ 14
6
10 55
33
44
88
2
15 15 99
Joost-Pieter Katoen Datenstrukturen und Algorithmen 20/43
start
.
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Dijkstras Kürzeste-Wege-Algorithmus – Beispiel
0
14
6
10
Œ
5 Œ
Œ 14
6
10 55
33
44
88
2
15 15 99
Joost-Pieter Katoen Datenstrukturen und Algorithmen 20/43
go IF - •
as
m
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Dijkstras Kürzeste-Wege-Algorithmus – Beispiel
0
14
6
10
7
5 14
Œ 14
6
10 55
33
44
88
2
15 15 99
Joost-Pieter Katoen Datenstrukturen und Algorithmen 20/43
Kürzeste Pfadalgorithmen Single-Source Shortest Path
Dijkstras Kürzeste-Wege-Algorithmus – Beispiel
0
14
6
10
7
5 14
Œ 14
6
10 55
33
44
88
2
15 15 99
Joost-Pieter Katoen Datenstrukturen und Algorithmen 20/43