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