Kurze Wege - informatik.uni-bremen.de

Werbung
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
Herunterladen