Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
1
Diskrete Mathematik II
Vorlesung 3 SS 2001 Algorithmus von Floyd
2
Übersicht letzte Stunden: Heute: 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 Semester - SS Vorlesung 3
3
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 Semester - SS Vorlesung 3
4
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 vorhandene Ha betrachteter Knoten 15 W Nachfolger Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 3
5
Algorithmus von Floyd: Idee
Do 20 Für jedes Paar Vorgänger / Nachfolger 35 Ha 15 Für jeden Knoten W Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 3
6
Algorithmus von Floyd (Beispiel)
Do 80 Vorgänger Du 20 30 Ha 20 betrachteter Knoten 15 D W 150 15 80 Nachfolger K Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 3
7
Algorithmus von Floyd (Beispiel)
Do Ha W Du K D 20 15 80 30 150 Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 3
8
Algorithmus von Floyd (Beispiel)
fangen wir wieder an mit Dortmund Do Ha W Du K D 20 15 80 30 150 Knoten besitzt nur Nachfolger Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 3
9
Algorithmus von Floyd (Beispiel)
als nächstes Hagen Do Ha W Du K D 30 150 20 15 80 Do 35 W Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 3
10
Algorithmus von Floyd (Beispiel)
Jetzt haben wir 2 Vorgänger und 3 Nachfolger - wie viele Paare also? Do Ha W Du K D 30 150 20 15 80 35 Do 80 80 Du Ha D K Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 3
11
Algorithmus von Floyd (Beispiel)
Do Ha W Du K D 30 150 20 15 80 35 185 65 115 45 Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 3
12
Algorithmus von Floyd (Beispiel)
115 Do Ha W Du K D 30 150 20 15 80 65 35 185 45 165 95 Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 3
13
Algorithmus von Floyd (Beispiel)
115 Do Ha W Du K D 30 150 20 15 80 65 35 185 45 95 165 Do Ha D W Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 3
14
Algorithmus von Floyd (Beispiel)
115 Do Ha W Du K D 30 150 20 15 80 65 35 185 45 95 165 Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 3
15
Algorithmus von Floyd (Beispiel)
115 Do Ha W Du K D 30 150 20 15 80 65 35 45 95 85 165 165 Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 3
16
Algorithmus von Floyd (Beispiel)
115 Do Ha W Du K D 30 20 15 80 65 35 85 45 95 65 150 150 Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 3
17
Algorithmus von Floyd (Beispiel)
115 Do Ha W Du K D 30 20 15 80 65 35 85 45 95 50 Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 3
18
Algorithmus von Floyd (Beispiel)
115 Do Ha W Du K D 30 50 20 15 80 65 35 85 45 95 Do Du Ha W K Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 3
19
Algorithmus von Floyd (Beispiel)
Do Ha W Du K D 30 50 20 15 80 65 35 85 45 95 115 Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 3
20
Algorithmus von Floyd (Beispiel)
Do Ha W Du K D 30 50 20 15 80 65 35 85 45 95 95 100 Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 3
21
Algorithmus von Floyd (Beispiel)
100 Do Ha W Du K D 30 50 20 15 65 35 85 45 80 80 80 Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 3
22
Algorithmus von Floyd (Beispiel)
100 Do Ha W Du K D 30 50 20 15 65 35 85 45 80 35 65 Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 3
23
Algorithmus von Floyd (Beispiel)
Do 65 20 35 85 45 Du Ha 30 65 20 15 D W 50 35 80 100 15 65 K Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 3
24
Implementierung mit der Kostenmatrix-Darstellung
private floyd (float A [n,n], float C [n,n]) { int i, j, k; 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(k = 1; k <= n; k++) if(A[j,i] + A[i,k] < A[j,k]) { A[j,k] = A[j,i] + A[i,k]; }}}}} Heute wieder Java! Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 3
25
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(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 Semester - SS Vorlesung 3
26
Floyd (3) Beachten Sie: Übung:
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 Semester - SS Vorlesung 3
27
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 Semester - SS Vorlesung 3
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.