Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung 1 SS 2001 Algorithmus von Dijkstra
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 12 Ü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 Vorlesung 13 Ü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 Vorlesung 14 Algorithmus von Dijkstra: Beispiel
Do Ha W Du K D
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 16 Do Ha W Du K D Beispiel
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 17 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 Vorlesung 18 Do Ha W Du K D Algorithmus von Dijkstra: Beispiel
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 19 Do Ha Du W K D 8015 Do Du Ha Do Algorithmus von Dijkstra: Beispiel Minimaler Abstand von Do Du 80 Ha 20
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 110 Do Ha W Du K D W Algorithmus von Dijkstra: Beispiel Do DuHa 8020 W 15 Minimaler Abstand von DO
Do Ha W Du K D W Algorithmus von Dijkstra: Beispiel abgearbeitet noch in Arbeit noch nicht betrachtet
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 112 Do DuHa W Do Ha W Du K D Bereits vorhanden Du Kürzester Weg Algorithmus von Dijkstra: Beispiel
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 113 Du Do Ha W Do Ha W Du K D K D Du Algorithmus von Dijkstra: Beispiel 30 K 80 D
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 114 DuDK Do Ha W D Do Ha W Du K D Bereits vorhanden kürzester Weg Algorithmus von Dijkstra: Beispiel
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 115 DuK Do Ha W D D Do Ha W Du K D Algorithmus von Dijkstra: Beispiel 20
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung Do Ha W Du K D Bereits vorhanden Algorithmus von Dijkstra: Beispiel kürzester Weg DuK Do Ha W D
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 117 Do Ha W Du K D D K Algorithmus von Dijkstra: Beispiel KDu Do Ha W D
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 118 Do Ha W D K Du K Do Ha W Du D D K K Algorithmus von Dijkstra: Beispiel 15
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 119 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 Vorlesung 120 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( K i succ(K) ) { if (K i (GRÜN BLAU) //noch nicht besuchter Knoten färbe die Kante (K,K i ) rot; färbe K i grün; dist(K i ) = dist(K) + dist(K,K i ); }
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 121 Formulierung des Algorithmus dist(K i ) = dist(K) + dist(K,K i ); } else { if(K i GRÜN) { // K i erneut erreicht if(dist(K i ) > dist(K) + dist(K,K i )) { färbe die Kante (K,K i ) rot; färbe die bisher rote Kante zu K i grün; dist(K i ) = dist(K) + dist(K,K i ); } else { färbe (K,K i ) grün }}} else { färbe (K,K i ) grün }}} // k i BLAU
Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 122 soweit der Algorithmus, aber... wie finde ich schnell alle Nachfolger eines Knoten? –for( K i 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 Vorlesung 123 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