Institut für Kartographie und Geoinformation
Prof. Dr. Lutz Plümer
Diskrete Mathematik II
Vorlesung 3
SS 2001
Algorithmus von Floyd
Übersicht
• letzte Stunden:
– Algorithmus von Dijkstra
– alle kürzesten Wege von einem Knoten (1:n)
– Datenstrukuren für den Algorithmus von Dijkstra
• Datenstruktur für Graphen mit Kosten
– Adjazenzliste
– Adjazenzmatrix
• Datenstruktur für grüne Knoten
• Heute:
– Algorithmus von Floyd
– kürzeste Wege zwischen allen Paaren von Knoten (n:n)
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
2
Algorithmus von Floyd
• Problem: Bestimmung der kürzesten Wege
zwischen allen Paaren von Knoten
• Lösung
– iterative Anwendung des Algorithmus von Dijkstra
– besser: Algorithmus von Floyd
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
3
Algorithmus von Floyd: Idee
Do
Vorgänger
20
35
füge neue direkte
Kante ein, wenn noch
keine Kante vorhanden
oder die neue Kante
kürzer ist als eine
W
vorhandene
Ha
15
betrachteter
Knoten
Nachfolger
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
4
Algorithmus von Floyd: Idee
Do
Für jedes
Paar
Vorgänger /
Nachfolger
20
35
Ha
15
W
Für jeden Knoten
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
5
Algorithmus von Floyd (Beispiel)
Do
80
Du
Vorgänger
20
Ha
30
20
15
D
150
15
W
80
betrachteter
Knoten
Nachfolger
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
6
Algorithmus von Floyd (Beispiel)
Do
80
20
Du
Ha
30
20
15
D
W
150
15
80
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
7
Algorithmus von Floyd (Beispiel)
fangen wir wieder an
mit Dortmund
Do
80
20
Knoten besitzt
nur Nachfolger
Du
Ha
30
20
15
D
W
150
15
80
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
8
Algorithmus von Floyd (Beispiel)
als nächstes Hagen
Do
80
20
35
Du
Ha
30
20
15
D
W
150
15
80
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
9
Algorithmus von Floyd (Beispiel)
Jetzt haben wir 2 Vorgänger
und 3 Nachfolger wie viele Paare also?
Do
80
20
35
Du
Ha
30
20
15
D
W
150
15
80
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
10
Algorithmus von Floyd (Beispiel)
Do
65
20
35
185
45
Du
Ha
30
20
15
D
W
150
15
115
80
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
11
Algorithmus von Floyd (Beispiel)
Do
65
20
35
185
45
Du
Ha
30
165
20
D
15
W
150
15
95
115
80
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
12
Algorithmus von Floyd (Beispiel)
Do
65
20
35
185
45
Du
Ha
30
165
20
D
15
W
150
15
95
115
80
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
13
Algorithmus von Floyd (Beispiel)
Do
65
20
35
185
45
Du
Ha
30
165
20
D
15
W
150
15
95
115
80
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
14
Algorithmus von Floyd (Beispiel)
Do
65
20
35
85
45
Du
Ha
30
165
20
D
15
W
150
15
95
115
80
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
15
Algorithmus von Floyd (Beispiel)
Do
65
20
35
85
45
Du
Ha
30
65
20
D
15
W
150
15
95
115
80
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
16
Algorithmus von Floyd (Beispiel)
Do
65
20
35
85
45
Du
Ha
30
65
20
D
15
W
50
15
95
115
80
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
17
Algorithmus von Floyd (Beispiel)
Do
65
20
35
85
45
Du
Ha
30
65
20
D
15
W
50
15
95
115
80
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
18
Algorithmus von Floyd (Beispiel)
Do
65
20
35
85
45
Du
Ha
30
65
20
D
15
W
50
15
95
115
80
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
19
Algorithmus von Floyd (Beispiel)
Do
65
20
35
85
45
Du
Ha
30
65
20
D
15
W
50
15
100
95
80
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
20
Algorithmus von Floyd (Beispiel)
Do
65
20
35
85
45
Du
Ha
30
65
20
D
15
W
50
15
100
80
80
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
21
Algorithmus von Floyd (Beispiel)
Do
65
20
35
85
45
Du
Ha
30
65
20
D
35
15
15
W
50
100
80
65
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
22
Algorithmus von Floyd (Beispiel)
Do
65
20
35
85
45
Du
Ha
30
65
20
D
35
15
15
W
50
100
80
65
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
23
Implementierung mit der Kostenmatrix-Darstellung
private floyd (float A [n,n], float C [n,n])
{ int i, j, k;
Heute wieder Java!
for(j = 1; j <= n; j++)
{for(k = 1; k <=n; k++) //A: Wege
{ A[j,k] = C[j,k]; } //C: Kanten, ggf. 
}
for(i = 1; i <= n; i++)
{
for(j = 1; j <= n; j++)
{
for(k = 1; k <= n; k++)
{
if(A[j,i] + A[i,k] < A[j,k])
{ A[j,k] = A[j,i] + A[i,k]; }}}}}
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
24
Floyd-Erweiterung: Mitführung der kürzesten Wege
private floyd (float A[n,n], float C[n,n], int W[n,n])
{ int i, j, k;
for(j = 1; j <= n; j++)
{for(k = 1; k <=n; k++)
{ A[j,k] = C[j,k]; W[j,k] = }
}
for(i = 1; i <= n; i++)
{
for(j = 1; j <= n; j++)
{
for(k = 1; k <= n; k++)
{
if(A[j,i] + A[i,k] < A[j,k])
{ A[j,k] = A[j,i] + A[i,k];
W[j,k] = i;
}}}}}
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
25
Floyd (3)
• Beachten Sie:
– Die Ausgabeprozedur setzt voraus, daß ein Weg zwischen 2
Knoten x und y existiert
• Übung:
– Wie sehen Sie der Matrix A an, ob ein Weg zwischen 2
Knoten existiert
– allgemeiner: Wie sehen Sie der Matrix A an, ob der Graph
zusammenhängend ist
– der Graph ist zusammenhängend, wenn zwischen jedem
Paar (a,b) von Knoten ein Weg existiert
– beachten Sie, dass wir von gerichteten Graphen sprechen,
also (a,b)  (b,a)
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
26
Ausgabe des kürzesten Weges
public weg(int[][] W,int X,int Y)
//gibt kürzesten Weg von X nach Y aus
{
weg_rekursiv(X,Y);
gib Y aus;
}
private weg_rekursiv(int[][] W,int X,int Y)
{
if( W[X,Y] =  )
then gib X aus;
else
{ Z = W[X,Y];
weg_rekursiv(W,X,Z);
weg_rekursiv(W,Z,Y);
}}
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 3
27