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