Kurze Wege – Übungen Prof. Dr. Rainer Koschke1 Dipl.-Inform. Jochen Quante1 Dipl.-Inform. Raimar Falke1 1 Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universität Bremen 22. März 2005 Kürzeste Wege Algorithmen Aufgaben Aufgabe 1: In einer Stadt soll eine neue Feuerwache gebaut werden. Die Feuerwehr soll jedes Haus der Stadt möglichst schnell erreichen können. Sie haben die Aufgabe, den optimalen Standort der Feuerwache zu ermitteln. • Wie gehen Sie vor? • Was ist zu berücksichtigen? • Geben Sie einen Algorithmus an. Rainer Koschke (Univ. Bremen) Kurze Wege 22.3.05 2 / 19 Algorithmen Kürzeste Wege Kürzeste Wege – Intuitiv Aufgabe 2a: Ermitteln Sie die Länge des kürzesten Weges von a zu allen anderen Knoten. 12 74 a b 4 85 66 38 32 33 12 2 g 10 Rainer Koschke (Univ. Bremen) 8 76 e 12 74 12 d c 18 f 11 j 21 31 78 18 h 72 Kurze Wege i 22.3.05 3 / 19 Kürzeste Wege Algorithmen Kürzeste Wege – Naiver Algorithmus Aufgabe 2b: Ermitteln Sie die Länge des kürzesten Weges von a zu allen anderen Knoten mit Hilfe des in der Vorlesung vorgestellten naiven Algorithmus. f o r n ∈ N \ {Root} l o o p bestimme Minimum u e b e r {Costs(p)|p ist zyklenfreier Pfad von Root nach n} end l o o p ; Rainer Koschke (Univ. Bremen) Kurze Wege 22.3.05 4 / 19 Kürzeste Wege Dijkstra Kürzeste Wege – Dijkstras Algorithmus Aufgabe 2c: Ermitteln Sie nun die Länge der kürzesten Wege mit Hilfe von Dijkstras Algorithmus. Rainer Koschke (Univ. Bremen) Kurze Wege 22.3.05 5 / 19 Kürzeste Wege Dijkstra Algorithmus von Dijkstra −− N : s e t of a l l nodes −− C( i , j ) : d i r e c t c o s t from i t o j −− S : s e t o f n o d e s f o r w h i c h s h o r t e s t p a t h i s known −− D( n ) : t o t a l c o s t from node 1 t o node n S := {1}; for i in 2 . . | N| loop D( i ) : = C ( 1 , i ) ; −− i n i t i a l i z e D end l o o p ; for i in 2 . . | N| loop c h o o s e a node w i n N\S s u c h t h a t D(w ) i s a minimum add w t o S ; f o r e a c h node v i n N\S l o o p D( v ) : = minimum ( D( v ) , D(w) + C(w , v ) ) end l o o p ; end l o o p ; Rainer Koschke (Univ. Bremen) Kurze Wege 22.3.05 6 / 19 Kürzeste Wege Dijkstra Algorithmus von Dijkstra – Weg zwischen zwei Knoten Aufgabe 3a: Variante: • Berechnung der Länge des kürzesten Weges zwischen zwei Knoten • Zusätzlich: Zielknoten Wie sieht die Variante aus? Rainer Koschke (Univ. Bremen) Kurze Wege 22.3.05 7 / 19 Kürzeste Wege Dijkstra Algorithmus von Dijkstra – Weg zwischen zwei Knoten S := {1}; for i in 2 . . | N| loop D( i ) : = C ( 1 , i ) ; −− i n i t i a l i z e D end l o o p ; for i in 2 . . | N| loop c h o o s e a node w i n N\S s u c h t h a t D(w ) i s a minimum i f w = t then exit ; end i f ; −− t : t a r g e t node add w t o S ; f o r e a c h node v i n N\S l o o p i f D(w) + C(w , v ) < D( v ) t h e n D( v ) : = minimum ( D( v ) , D(w) + C(w , v ) ) end i f ; end l o o p ; end l o o p ; Rainer Koschke (Univ. Bremen) Kurze Wege 22.3.05 8 / 19 Kürzeste Wege Dijkstra Algorithmus von Dijkstra – Kürzester Pfad Aufgabe 3b: Variante: • Berechnung des kürzesten Weges statt nur der Länge Erweitern Sie den Dijkstra-Algorithmus entsprechend. Rainer Koschke (Univ. Bremen) Kurze Wege 22.3.05 9 / 19 Kürzeste Wege Dijkstra Algorithmus von Dijkstra – Kürzester Pfad S := {1}; for i in 2 . . | N| loop D( i ) : = C ( 1 , i ) ; −− i n i t i a l i z e D end l o o p ; for i in 2 . . | N| loop c h o o s e a node w i n N\S s u c h t h a t D(w ) i s a minimum add w t o S ; f o r e a c h node v i n N\S l o o p i f D(w) + C(w , v ) < D( v ) t h e n D( v ) : = D(w) + C(w , v ) ; BestOrigin ( v ) := w; end i f ; end l o o p ; end l o o p ; Rainer Koschke (Univ. Bremen) Kurze Wege 22.3.05 10 / 19 Kürzeste Wege Dijkstra Algorithmus von Dijkstra – Kürzeste Pfade Variante: • Berechnung aller gleichwertigen kürzesten Wege Wie muss der Algorithmus angepasst werden? Rainer Koschke (Univ. Bremen) Kurze Wege 22.3.05 11 / 19 Kürzeste Wege Dijkstra Algorithmus von Dijkstra – Abschätzung Aufgabe 3c: Variante: • Berechnung Länge des kürzesten Weges zwischen zwei Knoten • Zusätzlich: Zielknoten • Zusätzlich: Abschätzung aller Wege zum Zielknoten (Minimum) Wie kann dieses Zusatzwissen genutzt werden? Erweitern Sie den Dijkstra-Algorithmus entsprechend. Rainer Koschke (Univ. Bremen) Kurze Wege 22.3.05 12 / 19 Kürzeste Wege Dijkstra A*-Algorithmus −− a d d i t i o n a l l y : −− t : t a r g e t node −− E ( i , t ) : e s t i m a t e d c o s t from i t o t ( minimum ) S := {1}; for i in 2 . . | N| loop D( i ) : = C ( 1 , i ) ; −− i n i t i a l i z e D end l o o p ; for i in 2 . . | N| loop c h o o s e a node w i n N\S s u c h t h a t D(w)+E (w , t ) i s a minimum add w t o S ; f o r e a c h node v i n N\S l o o p D( v ) : = minimum ( D( v ) , D(w) + C(w , v ) ) end l o o p ; end l o o p ; Rainer Koschke (Univ. Bremen) Kurze Wege 22.3.05 13 / 19 Kürzeste Wege Dijkstra Algorithmus von Dijkstra – Gewichtete Knoten Aufgabe 4: Variante: • Auch Knoten haben Gewicht • Zusätzlich: Knotengewicht Wie können Sie dies im Dijkstra-Algorithmus berücksichtigen? Rainer Koschke (Univ. Bremen) Kurze Wege 22.3.05 14 / 19 Kürzeste Wege Dijkstra Algorithmus von Dijkstra – Gewichtete Knoten Zwei Möglichkeiten: 1 Anpassung des Algorithmus 2 Anpassung des Modells Rainer Koschke (Univ. Bremen) Kurze Wege 22.3.05 15 / 19 Kürzeste Wege Dijkstra Algorithmus von Dijkstra – Gewichtete Knoten 5 8 7 4 2 Rainer Koschke (Univ. Bremen) 5 1 3 8 7 4 1 2 Kurze Wege 3 22.3.05 16 / 19 Kürzeste Wege Dijkstra Kürzeste Wege Algorithmen Aufgabe 5: Ermitteln Sie die Länge der kürzesten Wege zwischen allen Knoten. Wie gehen Sie vor? Rainer Koschke (Univ. Bremen) Kurze Wege 22.3.05 17 / 19 Kürzeste Wege Floyd Algorithmus von Floyd −− N : s e t of a l l nodes −− E : set of a l l edges −− C( i , j ) : d i r e c t c o s t from i t o j −− D( i , j ) : t o t a l c o s t from i t o j for i in 1 . . | N| loop for j in 1 . . | N| loop i f ( i , j ) in E t h e n D( i , j ) : = C( i , j ) ; e l s e D( i , j ) : = i n f i n i t y ; for k in 1 . . | N| loop for i in 1 . . | N| loop for j in 1 . . | N| loop i f D( i , k ) + D( k , j ) < D( i , j ) t h e n D( i , j ) : = D( i , k ) + D( k , j ) Rainer Koschke (Univ. Bremen) Kurze Wege 22.3.05 18 / 19 Kürzeste Wege Visualisierung Visualisierung von Algorithmen Hier finden Sie gelungene Java-Applets für die Visualisierung der vorgestellten Algorithmen Dijkstra und A*: • http://carbon.cudenver.edu/~hgreenbe/sessions/dijkstra/ DijkstraApplet.html • http://www.ccg.leeds.ac.uk/james/aStar/ Rainer Koschke (Univ. Bremen) Kurze Wege 22.3.05 19 / 19