• Keine Ergebnisse gefunden

25.Juni2018 Vorlesung17:KürzestePfade(K24)Joost-PieterKatoen DatenstrukturenundAlgorithmen

N/A
N/A
Protected

Academic year: 2022

Aktie "25.Juni2018 Vorlesung17:KürzestePfade(K24)Joost-PieterKatoen DatenstrukturenundAlgorithmen"

Copied!
192
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

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

(2)

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

(3)

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

(4)

Kürzeste Pfadalgorithmen Kürzeste Pfade

Das Rechenproblem: kürzeste Pfade

Joost-Pieter Katoen Datenstrukturen und Algorithmen 4/43

(5)

Kürzeste Pfadalgorithmen Kürzeste Pfade

Das Rechenproblem: kürzeste Pfade

Joost-Pieter Katoen Datenstrukturen und Algorithmen 5/43

(6)

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

(7)

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 sV zu einem anderen Knoten vV ist ein Pfad von s nach v mit minimalem Gewicht.

Sei im Folgenden δ : (V × V ) → ( R ∪ {+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

(8)

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 sV zu einem anderen Knoten vV ist ein Pfad von s nach v mit minimalem Gewicht.

Sei im Folgenden δ : (V × V ) → ( R ∪ {+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

(9)

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 sV zu einem anderen Knoten vV ist ein Pfad von s nach v mit minimalem Gewicht.

Sei im Folgenden δ : (V × V ) → ( R ∪ {+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

(10)

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 sV zu einem anderen Knoten vV ist ein Pfad von s nach v mit minimalem Gewicht.

Sei im Folgenden δ : (V × V ) → ( R ∪ {+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

(11)

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

(12)

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

(13)

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

(14)

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

(15)

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

(16)

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

(17)

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

(18)

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

(19)

Kürzeste Pfadalgorithmen Single-Source Shortest Path

Single-Source Shortest Paths

Problem (Single-Source Shortest Path)

Für einen gegebenen Knoten sV (die Quelle / source), bestimme für jeden anderen Knoten tV , der aus s erreichbar ist, einen kürzesten Pfad von s zu t.

Joost-Pieter Katoen Datenstrukturen und Algorithmen 10/43

(20)

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

(21)

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

(22)

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

(23)

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

(24)

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

(25)

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

(26)

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

(27)

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 vV .

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

(28)

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 vV .

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

(29)

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 vV .

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

(30)

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 vV .

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

(31)

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

(32)

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

(33)

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

(34)

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

(35)

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

(36)

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

(37)

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

(38)

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

(39)

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

(40)

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

(41)

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

(42)

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

(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

(44)

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

(45)

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

(46)

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

(47)

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

(48)

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

(49)

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

(50)

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

(51)

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

(52)

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

(53)

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

(54)

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

(55)

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

(56)

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

(57)

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

(58)

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

(59)

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

(60)

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

(61)

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

(62)

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

(63)

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

(64)

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

(65)

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

(66)

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

(67)

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

(68)

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

(69)

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

(70)

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

(71)

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

(72)

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

(73)

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

(74)

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

(75)

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

(76)

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

(77)

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

(78)

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

(79)

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

(80)

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

(81)

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

(82)

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

(83)

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

(84)

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

(85)

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

(86)

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

(87)

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

(88)

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

(89)

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

(90)

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

(91)

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

(92)

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

(93)

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

(94)

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

(95)

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

(96)

Kürzeste Pfadalgorithmen Single-Source Shortest Path

Dijkstras Kürzeste-Wege-Algorithmus – Beispiel

0

∞ ∞

∞ 14

6

10 5 5

3 3

4 4

8 8

2

15 15 9 9

Joost-Pieter Katoen Datenstrukturen und Algorithmen 20/43

(97)

Kürzeste Pfadalgorithmen Single-Source Shortest Path

Dijkstras Kürzeste-Wege-Algorithmus – Beispiel

0

14

6

10

5 ∞

∞ 14

6

10 5 5

3 3

4 4

8 8

2

15 15 9 9

Joost-Pieter Katoen Datenstrukturen und Algorithmen 20/43

(98)

Kürzeste Pfadalgorithmen Single-Source Shortest Path

Dijkstras Kürzeste-Wege-Algorithmus – Beispiel

0

14

6

10

7

5 14

∞ 14

6

10 5 5

3 3

4 4

8 8

2

15 15 9 9

Joost-Pieter Katoen Datenstrukturen und Algorithmen 20/43

(99)

Kürzeste Pfadalgorithmen Single-Source Shortest Path

Dijkstras Kürzeste-Wege-Algorithmus – Beispiel

0

14

6

10

7

5 14

∞ 14

6

10 5 5

3 3

4 4

8 8

2

15 15 9 9

Joost-Pieter Katoen Datenstrukturen und Algorithmen 20/43

(100)

Kürzeste Pfadalgorithmen Single-Source Shortest Path

Dijkstras Kürzeste-Wege-Algorithmus – Beispiel

0

14

6

10

7

5 14

22 14

6

10 5 5

3 3

4 4

8 8

2

15 15 9 9

Joost-Pieter Katoen Datenstrukturen und Algorithmen 20/43

(101)

Kürzeste Pfadalgorithmen Single-Source Shortest Path

Dijkstras Kürzeste-Wege-Algorithmus – Beispiel

0

13

6

10

7

5 14

22 14

6

10 5 5

3 3

4 4

8 8

2

15 15 9 9

Joost-Pieter Katoen Datenstrukturen und Algorithmen 20/43

(102)

Kürzeste Pfadalgorithmen Single-Source Shortest Path

Dijkstras Kürzeste-Wege-Algorithmus – Beispiel

0

13

6

10

7

5 14

22 14

6

10 5 5

3 3

4 4

8 8

2

15 15 9 9

Joost-Pieter Katoen Datenstrukturen und Algorithmen 20/43

(103)

Kürzeste Pfadalgorithmen Single-Source Shortest Path

Dijkstras Kürzeste-Wege-Algorithmus – Beispiel

0

13

6

10

7

5 14

22 14

6

10 5 5

3 3

4 4

8 8

2

15 15 9 9

Joost-Pieter Katoen Datenstrukturen und Algorithmen 20/43

(104)

Kürzeste Pfadalgorithmen Single-Source Shortest Path

Dijkstras Kürzeste-Wege-Algorithmus – Beispiel

0

13

6

10

7

5 14

22 14

6

10 5 5

3 3

4 4

8 8

2

15 15 9 9

Joost-Pieter Katoen Datenstrukturen und Algorithmen 20/43

(105)

Kürzeste Pfadalgorithmen Single-Source Shortest Path

Dijkstras Algorithmus: Korrektheit

Theorem

Sei B der schon konstruierte (schwarze) Teilbaum. Es gilt:

1. dist[v] > δ(s, v ) für alle Knoten vV ;

2. dist[v] = δ(s, v ) für alle Baumknoten vB;

3. dist[v] = min({∞} ∪ {δ(s , x ) + W (x , v) | xB und (x, v ) ∈ E }) für alle Nicht-Baumknoten vV \ B;

4. δ(s , v) 6 δ(s, u) für alle Baumknoten vB und uV \ B.

Joost-Pieter Katoen Datenstrukturen und Algorithmen 21/43

(106)

Kürzeste Pfadalgorithmen Single-Source Shortest Path

Dijkstras Algorithmus: Korrektheit

Theorem

Sei B der schon konstruierte (schwarze) Teilbaum. Es gilt:

1. dist[v] > δ(s, v ) für alle Knoten vV ; 2. dist[v] = δ(s, v ) für alle Baumknoten vB;

3. dist[v] = min({∞} ∪ {δ(s , x ) + W (x , v) | xB und (x, v ) ∈ E }) für alle Nicht-Baumknoten vV \ B;

4. δ(s , v) 6 δ(s, u) für alle Baumknoten vB und uV \ B.

Joost-Pieter Katoen Datenstrukturen und Algorithmen 21/43

(107)

Kürzeste Pfadalgorithmen Single-Source Shortest Path

Dijkstras Algorithmus: Korrektheit

Theorem

Sei B der schon konstruierte (schwarze) Teilbaum. Es gilt:

1. dist[v] > δ(s, v ) für alle Knoten vV ; 2. dist[v] = δ(s, v ) für alle Baumknoten vB;

3. dist[v] = min({∞} ∪ {δ(s , x) + W (x , v) | xB und (x, v ) ∈ E }) für alle Nicht-Baumknoten vV \ B;

4. δ(s , v) 6 δ(s, u) für alle Baumknoten vB und uV \ B.

Joost-Pieter Katoen Datenstrukturen und Algorithmen 21/43

(108)

Kürzeste Pfadalgorithmen Single-Source Shortest Path

Dijkstras Algorithmus: Korrektheit

Theorem

Sei B der schon konstruierte (schwarze) Teilbaum. Es gilt:

1. dist[v] > δ(s, v ) für alle Knoten vV ; 2. dist[v] = δ(s, v ) für alle Baumknoten vB;

3. dist[v] = min({∞} ∪ {δ(s , x) + W (x , v) | xB und (x, v ) ∈ E }) für alle Nicht-Baumknoten vV \ B;

4. δ(s , v) 6 δ(s, u) für alle Baumknoten vB und uV \ B.

Joost-Pieter Katoen Datenstrukturen und Algorithmen 21/43

(109)

Kürzeste Pfadalgorithmen Single-Source Shortest Path

Dijkstras Algorithmus: Korrektheit

1. dist[v] > δ(s, v ) für alle Knoten vV ; 2. dist[v] = δ(s, v ) für alle Baumknoten vB;

3. dist[v] = min({∞} ∪ {δ(s, x ) + W (x, v) | xB und (x , v ) ∈ E }) für vV \ B;

4. δ(s, v ) 6 δ(s, u) für alle Baumknoten vB und uV \ B.

Beweis.

1., 3. und 4. sind (ziemlich) trivial. Betrachte 2.

Per Induktion über die Anzahl der Baumknoten. Beweisskizze:

I Basis: B ist leer und B = {s } (nach der ersten Iteration): trivial.

I Ind. Schritt: nehme an, das Theorem gilt für |B| = k > 0. Sei v der Knoten der als nächste zum Baum B hinzugefügt wird. Der Fall dist[v] = +inf ist trivial. Betrachte dist[v] 6= +inf. Dann gibt es eine Kante vom Baumknoten

x = prev[v] ∈ B zu v 6∈ B. Aus 3. folgt, dass dist[v] das Gewicht des kürzesten Pfades von s nach v über Baumknoten ist. Aus 4. und der Wahl von v folgt, dass es keinen kürzeren Pfad gibt, d.h., dist[v] = δ(s, v ).

Joost-Pieter Katoen Datenstrukturen und Algorithmen 22/43

Referenzen

ÄHNLICHE DOKUMENTE

Ein Stapel (Kellerspeicher) speichert eine Ansammlung von Elementen und bietet folgende Operationen:.. I bool isEmpty(Stack s) gibt true zurück, wenn s leer ist und

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

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

Nehme an, es gibt eine gemeinsame Teilsequenz D von A m−1 und B n−1 mit einer Länge von mindestens k.. Dies widerspricht der Annahme, dass C eine

Sonst verbessert der Algorithmus iterativ für jeden Knoten v eine obere Grenze dist[v] für δ(s, v), bis das Minimum gefunden wird.. Kürzeste Pfade können nach Terminierung mittels

I Sonst verbessert der Algorithmus iterativ für jeden Knoten v eine obere Grenze dist[v] für δ(s, v), bis das Minimum gefunden wird. I Kürzeste Pfade können nach Terminierung

Die Ausleerungen waren in den ersten Tagen regelmässig mehr oder weniger getrübt, auch dann, wenn der Urin in den Gummiblasen aufgefangen wurde, welche sonst auf ihren Inhalt

(Imprimatur Varsoviae die 19. 407 Respons Na List pewny z Warszawy pisany w Materyi Dystrybuty Wakansow Pruskich takže Indygenatu „a recto &amp; bene sentiente Cive