Algorithmus von Dijkstra

Werbung
Institut für Kartographie und Geoinformation
Prof. Dr. Lutz Plümer
Diskrete Mathematik II
Vorlesung 1
SS 2001
Algorithmus von Dijkstra
Übersicht über das Semester
• zwei besonders wichtige Algorithmen für GIS
– kürzeste Wege in einem Netz
– Überlagerung von Netzen, Bestimmung aller Schnittpunkte
• effiziente Zugriffsstrukturen für räumliche Objekte
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 1
2
Übersicht Vorlesung I
•
•
•
•
•
•
der kürzeste Weg von A nach B in einem Netz
Beispiel
Problemstellung
Animation des Algorithmus
Formulierung des Algorithmus in Pseudocode
erforderliche Datenstrukturen
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 1
3
Algorithmus von Dijkstra: Beispiel
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 1
4
Do
80
Du
20
30
Ha
20
W
D
80
15
K
15
Beispiel
Do
80
Du
20
30
20
Ha
15
W
D
15
80
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 1
6
Kürzeste Wege: Idee
• Gegeben: Gerichteter Graph, dessen Kanten mit Zahlen
(Kosten, z.B. km oder min.) beschriftet sind
• Aufgabe: Berechnung des kürzesten Weges x  z von
einem Startknoten x zu einem Zielknoten z
• erste Idee: Berechne alle Wege und wähle den kürzesten
• Beobachtung: wenn der kürzeste Weg von x nach z über y
führt, sind die Teilwege x  y und y  z ebenfalls kürzeste
Wege
• effiziente Lösung: berechne alle kürzesten Wege und
wähle den von x nach z aus
• Algorithmus von Dijkstra: jeder Schritt sitzt
(„Greedy“-Algorithmus)
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 1
7
Algorithmus von Dijkstra: Beispiel
Do
80
Du
20
30
20
Ha
15
W
D
15
80
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 1
8
Algorithmus von Dijkstra: Beispiel
Do
80
Du
20
30
20
Ha
Do
80
Du
20
Ha
15
W
D
15
80
Minimaler
Abstand von Do
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 1
9
Algorithmus von Dijkstra: Beispiel
Do
80
Du
Do
20
30
20
Ha
80
Du
20
Ha
15
15
W
W
D
15
80
Minimaler
Abstand von DO
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 1
10
Algorithmus von Dijkstra: Beispiel
Do
80
Du
20
30
20
abgearbeitet
Ha
15
W
D
noch in Arbeit
15
80
K
noch nicht betrachtet
Algorithmus von Dijkstra: Beispiel
Do
80
Du
20
Bereits
vorhanden
80
Du
30
20
Do
Ha
20
Ha
15
W
15
W
D
Kürzester Weg
15
80
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 1
12
Algorithmus von Dijkstra: Beispiel
Do
80
Du
Do
20
20
Ha
30
20
Ha
15
W
15
W
D
30
Du
15
80
D
K
80
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 1
13
Algorithmus von Dijkstra: Beispiel
Do
80
Du
20
20
Bereits
vorhanden
Ha
30
20
Do
Ha
15
W
15
W
D
kürzester Weg
30
Du
15
80
D
K
80
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 1
14
Algorithmus von Dijkstra: Beispiel
Do
80
Du
Do
20
20
Ha
30
20
Ha
15
W
15
30
W
D
Du
15
80
80
K
20
D
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 1
15
Algorithmus von Dijkstra: Beispiel
Do
80
Du
Do
20
20
Ha
30
20
Ha
15
W
15
W
D
15
80
30
kürzester Weg
Bereits
vorhanden
Du
80
K
20
D
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 1
16
Algorithmus von Dijkstra: Beispiel
Do
80
Du
Do
20
20
Ha
30
20
Ha
15
W
15
30
W
D
Du
15
80
80
K
20
D
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 1
17
Algorithmus von Dijkstra: Beispiel
Do
80
Du
Do
20
20
Ha
30
20
Ha
15
15
W
W
D
30
Du
15
20
80
D
15
K
K
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 1
18
Formulierung des Algorithmus
Bezeichnungen
S
Startknoten
K
beliebiger Knoten im Graphen
dist (K) Abstand des Knotens K vom Startknoten S
GRÜN
Knotenmenge
BLAU
Knotenmenge
succ (K) Menge der Nachfolger(-Nachbarn) von K

für alle Elemente
dist (K, K‘) Distanz (Zeit) der Kante (K, K‘)
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 1
19
Formulierung des Algorithmus
algorithm Dijkstra (S)
//berechne alle kürzesten Wege von S aus}
BLAU = ; GRÜN = {S}; dist(S) = 0;
while( GRÜN   ) {
wähle K  GRÜN, so daß  K‘  GRÜN:
dist(K)  dist(K‘);
färbe K blau;
for( Ki  succ(K) ) {
if (Ki  (GRÜN  BLAU) //noch nicht besuchter Knoten
färbe die Kante (K,Ki) rot;
färbe Ki grün;
dist(Ki) = dist(K) + dist(K,Ki); }
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 1
20
Formulierung des Algorithmus
dist(Ki) = dist(K) + dist(K,Ki); }
else {
if(Ki  GRÜN) {
// Ki erneut erreicht
if(dist(Ki) > dist(K) + dist(K,Ki)) {
färbe die Kante (K,Ki) rot;
färbe die bisher rote Kante zu Kigrün;
dist(Ki) = dist(K) + dist(K,Ki); }
else {
färbe (K,Ki) grün }}}
else {
färbe (K,Ki) grün }}} // ki  BLAU
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 1
21
soweit der Algorithmus, aber ...
• wie finde ich schnell alle Nachfolger eines Knoten?
– for( Ki  succ(K) )...
• wie finde ich schnell
– K  GRÜN, so daß  K‘  GRÜN:
dist(K)  dist(K‘);
• Datenstruktur für den Graphen
• Datenstruktur für die grünen (aktiven) Knoten
• der schrittweise Entwurf des Algorithmus läßt diese
Fragen zunächst absichtlich offen
• zugunsten der Konzentration auf die wesentliche Idee
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 1
22
Ist der Algorithmus denn überhaupt korrekt?
• Für jeden grünen Knoten gilt:
unter den rot-grünen Wegen ist der rote der kürzeste.
• Beweis:
Induktion über die Folge der blau gefärbten Knoten
• Für jeden blauen Knoten gilt:
unter allen Wegen ist der rote der kürzeste.
• Beweis:
Induktion über die Folge der blau gefärbten Knoten
• Aufgabe:
– Plausibilität am Beispiel
– versuchen Sie einen allgemeingültigen Beweis
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 1
23
Herunterladen