Graphen: Kürzeste Pfade II - Otto-von-Guericke

Werbung
Graphen: Kürzeste Pfade
Graphen: Kürzeste Pfade
Gliederung
Algorithmen und Datenstrukturen II
Graphen: Kürzeste Pfade II
1
D. Rösner
Institut für Wissens- und Sprachverarbeitung
Fakultät für Informatik
Otto-von-Guericke Universität Magdeburg
Graphen: Kürzeste Pfade
Greedy
Bellman-Ford
Beispiel
c
Sommer 2009, 22. April 2009, 2009
D.Rösner
D. Rösner AuD II 2009 . . .
Graphen: Kürzeste Pfade
1
Greedy
Bellman-Ford
Beispiel
D. Rösner AuD II 2009 . . .
Graphen: Kürzeste Pfade
Graphen: Kürzeste Pfade
2
Greedy
Bellman-Ford
Beispiel
Algorithmenmuster ’Greedy’
Beispiel: Herausgabe von Wechselgeld mit möglichst
wenig Münzen
der Algorithmus von Dijkstra ist ein Beispiel eines
Algorithmus nach dem Algorithmenmuster ’Greedy’
Münzsystem sei: 50, 10, 5, 2, 1 Cent
Beispiel:
Zielwert sei 78
78 = 50 + 2*10 + 5 + 2 + 1,
also 6 Münzen
bei solchen Algorithmen wird in jedem Teilschritt versucht,
so ’viel wie möglich’ zu erreichen
daher der Name ’greedy’, d.h. gierig, gefrässig
Greedy-Algorithmus:
Nehme jeweils immer die größte Münze unterhalb oder
gleich dem aktuellen Zielwert und ziehe ihren Betrag vom
Zielwert ab.
Verfahre weiter so bis Zielwert gleich Null.
s.a. [GT01], Ch. 13.6
D. Rösner AuD II 2009 . . .
4
D. Rösner AuD II 2009 . . .
5
Graphen: Kürzeste Pfade
Greedy
Bellman-Ford
Beispiel
Graphen: Kürzeste Pfade
Algorithmenmuster ’Greedy’
Greedy
Bellman-Ford
Beispiel
Algorithmenmuster ’Greedy’
Problemklasse für Greedy-Algorithmen:
Beachte: in jedem Schritt wird lokal optimiert
1
2
aber: das globale Optimum kann ggf. dennoch verpasst
werden
Beispiel:
3
sei Zielwert 15
Münzen: 11, 5, 1
Greedy würde 11 + 1 + 1 + 1 + 1 ergeben, d.h. 5 Münzen
tatsächliches Optimum sind aber 3 Münzen: 5 + 5 + 5
D. Rösner AuD II 2009 . . .
Graphen: Kürzeste Pfade
4
5
Gegeben ist feste Menge von Eingabewerten.
Es gibt eine Menge von Lösungen, die aus Eingabewerten
bestimmt wird.
Alle Lösungen lassen sich schrittweise aus partiellen
Lösungen, beginnend bei der leeren Lösung, durch
Hinzunahme von Eingabewerten aufbauen.
Es existiert eine Bewertungsfunktion für partielle und
vollständige Lösungen.
Gesucht wird die (bzw. eine) optimale Lösung bzgl. der
Bewertungsfunktion.
6
Greedy
Bellman-Ford
Beispiel
D. Rösner AuD II 2009 . . .
Graphen: Kürzeste Pfade
Graphen: Kürzeste Pfade
7
Greedy
Bellman-Ford
Beispiel
Graphen: Bellman-Ford-Algorithmus
für den Algorithmus von Dijkstra muss vorausgesetzt
werden, dass alle Kantengewichte nicht negativ sind
im Unterschied zum Algorithmus von Dijkstra wird hier mit
all den Pfaden vom Startknoten (bis zur Länge |E | − 1) aus
gearbeitet, die sich durch schrittweise Fortsetzung bisher
kürzester Pfade ergeben, und aus diesen werden die
(dann global) jeweils kürzesten Pfade vom Startknoten aus
bestimmt
im folgenden betrachten wir den
Bellman-Ford-Algorithmus, der kürzeste Pfade auch
dann bestimmen kann, wenn Kantengewichte negativ sind
allerdings gilt weiterhin: die Graphen dürfen keine Zyklen
mit negativem Gesamtgewicht enthalten
s.a. [SS02], 16.4.3
s.a. [SS02], 16.4.3
D. Rösner AuD II 2009 . . .
9
D. Rösner AuD II 2009 . . .
10
Graphen: Kürzeste Pfade
Greedy
Bellman-Ford
Beispiel
Graphen: Kürzeste Pfade
Graphen: Bellman-Ford-Algorithmus
Greedy
Bellman-Ford
Beispiel
Graphen: Bellman-Ford-Algorithmus
im Detail: in maximal |E | − 1 Iterationen wird bei jeder
Iteration i für alle Kanten überprüft, ob sich durch
Hinzunahme einer Kante (u,v) zu einem schon
existierenden Pfad (bis Knoten u) ein Pfad zum Knoten v
gewinnen lässt, der kürzer ist als der bis dahin erreichte
kürzeste Pfad zum Knoten v ausgehend vom Startknoten
algorithm BF(G,s)
Eingabe: ein Graph G und ein Startknoten s
D[s]:= 0, D[v]:= ∞ für v 6= s
for i := 1 to |E| − 1 do
for each (u, v ) ∈ E do
if D[u] + w((u, v )) < D[v ] then
D[v ] := D[u] + w((u, v ))
fi
od
m.a.W.: bei der Iteration i werden die Pfade der Länge i
berücksichtigt
Optimierung: tritt bei einer Iteration in allen Knoten
keinerlei Änderung der bereits erreichten Werte für
kürzeste Pfade ein, kann die Berechnung auch schon
beendet werden, bevor |E | − 1 Iterationen erreicht sind
od
s.a. [SS02], 16.4.3
s.a. [SS02], 16.4.3
D. Rösner AuD II 2009 . . .
Graphen: Kürzeste Pfade
11
D. Rösner AuD II 2009 . . .
Greedy
Bellman-Ford
Beispiel
Graphen: Kürzeste Pfade
Graphen
12
Greedy
Bellman-Ford
Beispiel
Graphen
1
u
1
v
10
s
u:∞
v:∞
-2 3
-5 6
10
-2 3
5
-5 6
s:0
7
x
5
y
x:∞
2
y:∞
2
Abbildung: gerichteter Graph mit auch negativen Gewichten (vgl.
[SS02], Abb. 16.19)
D. Rösner AuD II 2009 . . .
7
Abbildung: Bellman-Ford-Algorithmus: Initialisierung (vgl. [SS02],
Abb. 16.20)
14
D. Rösner AuD II 2009 . . .
15
Graphen: Kürzeste Pfade
Greedy
Bellman-Ford
Beispiel
Graphen: Kürzeste Pfade
Graphen
Greedy
Bellman-Ford
Beispiel
Graphen
1
u:10
1
v:∞
v:11
-2 3
-5 6
10
10
s:0
u: 8
-2 3
5
s:0
-5 6
5
7
x: 5
y:∞
7
2
2
Abbildung: Bellman-Ford-Algorithmus: nach Schritt 1 (vgl. [SS02],
Abb. 16.21)
D. Rösner AuD II 2009 . . .
Graphen: Kürzeste Pfade
y: 7
x: 5
Abbildung: Bellman-Ford-Algorithmus: nach Schritt 2 (vgl. [SS02],
Abb. 16.22)
16
D. Rösner AuD II 2009 . . .
Greedy
Bellman-Ford
Beispiel
Graphen: Kürzeste Pfade
Graphen
17
Greedy
Bellman-Ford
Beispiel
Graphen
1
1
v: 9
u: 8
10
s:0
u: 8
v: 9
-2 3
-5 6
10
-2 3
5
-5 6
s:0
7
5
y: 6
x: 5
y: 4
x: 5
2
2
Abbildung: Bellman-Ford-Algorithmus: nach Schritt 3 (vgl. [SS02],
Abb. 16.23)
D. Rösner AuD II 2009 . . .
7
Abbildung: Bellman-Ford-Algorithmus: nach Schritt 4 (vgl. [SS02],
Abb. 16.24)
18
D. Rösner AuD II 2009 . . .
19
Graphen: Kürzeste Pfade
Greedy
Bellman-Ford
Beispiel
Graphen: Kürzeste Pfade
Graphen
Greedy
Bellman-Ford
Beispiel
Graphen
1
u
1
v
10
s
u
v
-2 3
-5 6
10
-2 3
5
-5 6
s
5
-7
x
x
y
Abbildung: Beispiele für Graphen: gerichteter Graph mit negativ
gewichtetem Zyklus (vgl. [SS02], Abb. 16.25)
Graphen: Kürzeste Pfade
Abbildung: Beispiele für Graphen: gerichteter Graph mit negativ
gewichtetem Zyklus (vgl. [SS02], Abb. 16.25)
20
Greedy
Bellman-Ford
Beispiel
Literatur: I
Michael T. Goodrich and Roberto Tamassia.
Data Structures and Algorithms in Java.
John Wiley & Sons, New York, 2001.
ISBN 0-471-38367-8; 2nd edition.
Gunter Saake and Kai-Uwe Sattler.
Algorithmen und Datenstrukturen – Eine Einführung mit
Java.
dpunkt.verlag, Heidelberg, 2002.
ISBN 3-89864-122-8.
D. Rösner AuD II 2009 . . .
y
2
2
D. Rösner AuD II 2009 . . .
-7
22
D. Rösner AuD II 2009 . . .
21
Herunterladen