Kapitel 5: Kürzeste Pfade Gliederung der Vorlesung 1 - fbi.h

Werbung
Kapitel 5: Kürzeste Pfade
Gliederung der Vorlesung
1.
2.
3.
4.
5.
6.
7.
8.
5/3, Folie 1
Fallstudie Bipartite Graphen
Grundbegriffe
Elementare Graphalgorithmen und Anwendungen
Minimal spannende Bäume
Kürzeste Pfade
Traveling Salesman Problem
Flüsse in Netzwerken und Anwendungen
Netzplantechnik
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Gliederung des Kapitels
a)
b)
c)
d)
e)
5/3, Folie 2
Einführung / Problemstellungen
Begriffe und Lösungsansatz
Kürzeste Pfade von einem Startknoten
Kürzeste Pfade zwischen allen Knotenpaaren
Spezialfall: Graphen mit nichtnegativen Gewichten
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Anmerkungen
•
wir schauen uns an, wie man diesen Spezialfall „effizienter“ behandeln
kann (/* ... es genügt, jede Kante nur einmal zu benutzen, um die
Schätzwerte zu „verbessern“ */)
... um die gewünschte Laufzeitverbesserung zu erzielen, benötigen wir
eine geeignete Datenstruktur (/* so genannte binäre Heaps, um MinPrioritätswarteschlangen zu implementieren */)
•
danach diskutieren wir das Problem, wie man einen kürzesten Pfad von
einem Startknoten s zu einem Zielknoten t bestimmen kann, ohne „quasi
nebenbei“ kürzeste Pfade vom Startknoten s zu jedem anderen Knoten
im Graphen zu bestimmen
... für Anwendungen, etwa bei der Suche nach kürzesten Pfaden bei
der Routenplanung, sollten die bisher vorgestellten Verfahren eher
nicht verwendet werden
5/3, Folie 3
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Anmerkungen
5/3, Folie 4
•
wir schauen uns zunächst den Algorithmus von Dijkstra an (/* inklusive
einer „passenden“ Datenstruktur zur Implementierung von so genannten
Min-Prioritätswarteschlangen */)
•
im Anschluss diskutieren wir den, aus dem Bereich der Künstlichen
Intelligenz bekannten A*-Algorithmus
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Beispiel
3
1
4
2
3
4
3
1
1
4
2
5
2
6
3
1
2
3
4
5
6
+∞
0
+∞
+∞
+∞
+∞
... „initiale“ Schätzung der Entfernungen vom Startknoten 2
5/3, Folie 5
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Beispiel
3
1
2
4
3
4
3
1
1
4
2
5
2
3
6
Knoten
Daktuell
Kanten
Dneu
1
+∞
[1,4]
3
2
0
[2,1],
[2,3],
[2,5],
[2,6]
0
3
+∞
[3,4],
[3,6]
4
4
+∞
5
+∞
[5,4]
4
6
+∞
[6,5]
2
+∞
... „erste“ Schätzung unter Berücksichtigung aller Pfade mit der Ecke 2
5/3, Folie 6
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Beispiel
3
1
2
4
3
4
3
1
1
4
2
5
2
3
6
Knoten
Daktuell
Kanten
Dneu
1
3
[1,4]
3
2
0
3
4
4
+∞
5
4
[5,4]
4
6
2
[6,5]
2
0
[3,4],
[3,6]
4
+∞
... „zweite“ Schätzung unter Berücksichtigung aller Pfade mit der Ecke 6
5/3, Folie 7
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Beispiel
3
1
2
4
3
4
3
1
1
4
2
5
2
3
6
Knoten
Daktuell
Kanten
Dneu
1
3
[1,4]
3
2
0
3
4
4
+∞
5
4
6
2
0
[3,4],
[3,6]
4
6
[5,4]
4
2
... „dritte“ Schätzung unter Berücksichtigung aller Pfade mit der Ecke 1
5/3, Folie 8
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Beispiel
3
1
2
4
3
4
3
1
1
4
2
5
2
3
6
Knoten
Daktuell
Kanten
1
3
3
2
0
0
3
4
4
6
5
4
6
2
[3,4],
[3,6]
Dneu
4
5
[5,4]
4
2
... „vierte“ Schätzung unter Berücksichtigung aller Pfade mit der Ecke 3
5/3, Folie 9
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Beispiel
3
1
2
4
3
4
3
1
1
4
2
5
2
3
6
Knoten
Daktuell
Kanten
1
3
3
2
0
0
3
4
4
4
5
5
5
4
6
2
[5,4]
Dneu
4
2
... „fünfte“ Schätzung unter Berücksichtigung aller Pfade mit der Ecke 5
5/3, Folie 10
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Zugrunde liegende Datenstrukturen
•
•
•
•
5/3, Folie 11
die Adjazenzliste A[1..n] von G
ein Array D[1..n] (/* in dem sich die „aktuellen“ Schätzwerte “gemerkt“
werden */)
ein Array P[1..n] (/* in dem sich für jeden Knoten der „aktuelle“ Vorgänger
„gemerkt“ wird */)
ein Array Q[1..n] (/* in dem sich „gemerkt“ wird, welche Knoten noch zu
untersuchen sind */)
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Realisierung (/* Version 1 */)
•
•
•
•
setze D[j] = +∞ und P[j] = 0 für alle j = 1,...,n
setze D[s] = 0
setze Q[j] = 1 für alle j = 1,...,n
while es gibt einen Knoten j mit Q[j] = 1 do
•
•
•
bestimme einen Knoten i mit Q[i] = 1, der unter allen
Knoten j mit Q[j] = 1 den kleinsten Wert D[i] hat
setze Q[i] = 0
for alle v ∈ A[i] do
•
if D[v] > D[i] + w([i,v]) then
•
5/3, Folie 12
© 2011 Prof. Steffen Lange
-
HDa/FbI
setze D[v] = D[i] + w([i,v]) und P[v] = i
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Anmerkungen (/* Korrektheit */)
•
wenn der Graph G Kanten mit negativem Gewicht hat, leistet der
Algorithmus von Dijkstra nicht das Gewünschte
4
3
-3
1
6
5/3, Folie 13
1
2
4
... Schätzung nach dem Q[3] = 0
gesetzt wurde
1
2
3
4
0
4
5
6
... „finale“ Schätzung (/* aber es
gilt δ(1,3) = 4 */)
1
2
3
4
0
1
5
3
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Anmerkungen (/* Korrektheit */)
•
wir untersuchen jetzt, warum der Algorithmus von Dijkstra funktioniert,
wenn alle Kanten nichtnegative Gewichte haben (/* ... nebenbei werden
wir sehen, weshalb diese Voraussetzung „wichtig“ ist */)
•
zugrunde liegende Idee:
•
•
es sei u irgendein Knoten
wir werden zeigen, dass in dem Schritt, in dem Q[u] = 0 gesetzt
wird, bereits D[u] = δ(s,u) gilt
... das dann in späteren Schritten der Wert D[u] nicht mehr
verändert wird, sollte klar sein
... diese Aussage beweisen wir induktiv
5/3, Folie 14
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Anmerkungen (/* Korrektheit */)
5/3, Folie 15
•
der Induktionsanfang sollte klar sein (/* im ersten Schritt wird Q[s] = 0
gesetzt und es gilt D[s] = δ(s,s) = 0 nach dem ersten Schritt*/)
•
die Induktionsvoraussetzung lautet: nach Schritt k gilt für alle Knoten v
mit Q[v] = 0 auch D[v] = δ(s,v)
•
es sei u der Knoten, für den der Wert Q[u] = 0 in Schritt k+1 gesetzt wird
•
wir nehmen an, dass D[u] > δ(s,u) nach dem Schritt k+1 gilt (/* das nicht
D[u] < δ(s,u) gelten kann, sollte unmittelbar klar sein */)
•
es sei also P = (v0,...,vz+1) ein kürzester Pfad vom Startknoten s zum
Knoten u (/* also gilt w(P) = δ(s,u) < D[u] */)
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Anmerkungen (/* Korrektheit */)
•
im Pfad P = (v0,...,vz+1) sei vi der Knoten mit dem maximalen Index, so
dass Q[vi] = 0 nach Schritt k gilt
•
•
•
wir betrachten das Anfangsstück Pa = (v0,..,vi,vi+1) von P
da G nur Kanten mit nichtnegativen Gewicht hat, gilt w(Pa) ≤ w(P)
da w(P) < D[u] gilt, muss also auch w(Pa) < D[u] gelten
•
nach Induktionsvoraussetzung muss nach Schritt k also D[vi] = δ(s,vi) und
damit auch D[vi+1] = D[vi] + w(vi,vi+1) gelten
•
also gilt auch D[vi+1] = w(Pa) ≤ w(P) < D[u]
•
dann hätte der Algorithmus von Dijsktra den Wert Q[vi+1] anstelle des
Wertes Q[u] in Schritt k+1 von 1 auf 0 setzen müssen
... und damit kann unsere Annahme, dass D[u] > δ(s,u)
gilt, nicht korrekt sein
5/3, Folie 16
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Anmerkungen (/* Laufzeit */)
•
•
offenbar wird jede Kante von G nur einmal „angefaßt“
also benötigt das Ändern der Schätzwerte in der „While-Schleife“
insgesamt nur die Zeit O(m)
•
die „While-Schleife“ wird insgesamt n mal ausgeführt, wobei jeweils
•
•
getestet wird, ob Q[v] = 1 für wenigstens einen Knoten v gilt
(/* das bekommt man mit O(1) vielen Rechenschritten raus */)
der Knoten v mit Q[v] = 1 bestimmt (/* das bekommt man mit O(n)
vielen Rechenschritten raus*/)
... also benötigt der Algorithmus von Dijkstra insgesamt O(m + n2)
viele Rechenschritte
... bei einer anderen, Realisierung benötigt der Algorithmus von
Dijkstra insgesamt nur O((m + n)*log(n)) viele Rechenschritte
(/* das ist manchmal besser */)
5/3, Folie 17
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Einschub: Min-Prioritätswarteschlangen (/* mit binären Heaps */)
 Anforderungen an die Datenstruktur
•
•
•
•
5/3, Folie 18
es soll eine Menge M von maximal n Elementen verwaltet werden (/* in
unserem Fall sind das die Knoten der Graphen*/)
jedem Element ist ein Schlüssel zugeordnet (/* in unserem Fall sind das
die Schätzwerte für die Entfernungen zum Startknoten */)
die Schlüssel können sich über die Zeit ändern (/* in unserem werden die
Schätzwerte sukzessive „verbessert“; d.h. sie werden kleiner */)
aktuell interessiert stets eine Teilmenge Q ⊆ M (/* in unserem Fall
diejenigen Knoten, die noch nicht zur „Verbesserung“ der Schätzwerte
herangezogen wurden */)
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Einschub: Min-Prioritätswarteschlangen (/* mit binären Heaps */)
 Anforderungen an die Datenstruktur
•
zu unterstützende Operationen
•
•
•
•
5/3, Folie 19
ein Element x ∈ M mit dem Schlüssel s(x) in die Menge Q einfügen
ein Element x ∈ Q mit einem minimalen Schlüssel s(x) finden und
aus Q entfernen
herausbekommen, ob die Menge Q ungleich der leeren Menge ist
den Schlüssel eines Elements x ∈ Q von s(x) zu s‘(x) ändern,
wobei stets s‘(x) < s(x) gilt
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Einschub: Min-Prioritätswarteschlangen (/* mit binären Heaps */)
 Grundidee
•
zur „Verwaltung“ der Elemente von Q verwenden wir ein Array Q[1..n]
und eine Variable max, in der sich gemerkt wird, wie viele Elemente aus
M aktuell in Q „verwaltet“ werden
•
die Elemente von Q werden im Array Q[1..n] so abgelegt, dass für
alle i = 1,..., max die so genannte Heap-Eigenschaft gilt:
•
•
wenn 2i ≤ max gilt, so gilt s(Q[i]) ≤ s(Q[2i])
wenn 2i+1 ≤ max gilt, so gilt s(Q[i]) ≤ s(Q[2i+1])
... auf diese Weise ist klar, dass in Q[1] ein Element x ∈ Q mit
einem minimalen Schlüssel s(x) abgelegt wurde
... auf diese Weise kann man sicherstellen, dass alle „relevanten“
Operationen in der Zeit O(log(n)) durchgeführt werden können
5/3, Folie 20
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Einschub: Min-Prioritätswarteschlangen (/* mit binären Heaps */)
 Illustration
•
es sei Q = { a,b,c,d,e } mit s(a) = 1, s(b) = 2, s(c) = 3 und s(d) = s(e) = 4
Q[1..n]
1
2
3
4
5
a
b
d
c
e
6
7
a
... ein „anderer“ Blick auf den gefüllten
Teil des Array Q[1..n]:
b
c
d
e
... das Array Q[1..n] entspricht einem vollständig aufgefüllten
Binärbaum der Tiefe m (/* mit m ≤ log(n) */)
5/3, Folie 21
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Einschub: Min-Prioritätswarteschlangen (/* mit binären Heaps */)
 Erweiterung
•
5/3, Folie 22
um die Schlüssel der Elemente in Q „effizient“ verkleinern zu können,
verwenden wir noch ein weiteres Array M[1..n] mit n Elementen, das
jedoch mit den Elementen in M indiziert ist (/* in M[x] wird sich „gemerkt“,
an welcher Stelle das Element x im Array Q[1..n] „gespeichert“ ist */)
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Einschub: Min-Prioritätswarteschlangen (/* mit binären Heaps */)
 Illustration
•
es sei M = { a,b,c,d,e,f,g }
•
es sei Q = { a,b,c,d,e } mit s(a) = 1, s(b) = 2, s(c) = 3 und s(d) = s(e) = 4
Q[1..n]
M[1..n]
5/3, Folie 23
© 2011 Prof. Steffen Lange
-
1
2
3
4
5
a
b
d
c
e
a
b
c
d
1
2
4
3
HDa/FbI
-
6
7
e
f
g
5
0
0
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Einschub: Min-Prioritätswarteschlangen (/* mit binären Heaps */)
 Operation: Element Q[1] entfernen (/* ein Element mit minimalem Schlüssel */)
•
•
•
setze min = Q[1], M[min] = 0, Q[1] = Q[max] und M[Q[1]] = 1
setze max = max - 1 und i = 1
while 2i ≤ max do
•
if 2i + 1 ≤ max then
•
if s(Q[2i]) ≤ s(Q[2i+1]) then
•
setze j = 2i
•
else setze j = 2i+1
else setze j = 2i
•
•
if s(Q[j]) < s(Q[i]) then
•
•
•
•
5/3, Folie 24
© 2011 Prof. Steffen Lange
vertausche die Werte von M[Q[j]] und M[Q[i]]
vertausche die Werte von Q[j] und Q[i]
setze i = j
else setze i = max + 1
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Einschub: Min-Prioritätswarteschlangen (/* mit binären Heaps */)
 Illustration
•
es sei M = { a,b,c,d,e,f,g }
•
es sei Q = { a,b,c,d,e } mit s(a) = 1, s(b) = 2, s(c) = 3 und s(d) = s(e) = 4
Q[1..n]
Q[1..n]
1
2
3
4
5
a
b
d
c
e
6
7
1
2
3
4
b
c
d
e
6
7
M[1..n]
M[1..n]
5/3, Folie 25
5
a
b
c
d
e
f
g
a
b
c
d
e
f
g
1
2
4
3
5
0
0
0
1
2
3
4
0
0
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Einschub: Min-Prioritätswarteschlangen (/* mit binären Heaps */)
 Operation: Schlüssel von x von s(x) auf s‘(x) verkleinern
•
•
5/3, Folie 26
setze i = M[x]
while i > 1 do
•
setze j = i/2
•
if s(Q[j]) > s(Q[i]) then
•
vertausche die Werte von M[Q[j]] und M[Q[i]]
•
vertausche die Werte von Q[j] und Q[i]
•
setze i = j
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Einschub: Min-Prioritätswarteschlangen (/* mit binären Heaps */)
 Illustration
•
es sei M = { a,b,c,d,e,f,g }
•
es sei Q = { a,b,c,d,e } mit s(a) = 1, s(b) = 2, s(c) = 3 und s(d) = s(e) = 4
•
der Schlüssel von e wird von s(e) = 4 auf s‘(e) = 1 geändert
Q[1..n]
Q[1..n]
1
2
3
4
5
a
b
d
c
e
6
7
1
2
3
4
5
a
e
d
c
b
7
M[1..n]
M[1..n]
5/3, Folie 27
6
a
b
c
d
e
f
g
a
b
c
d
e
f
g
1
2
4
3
5
0
0
1
5
4
3
2
0
0
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Einschub: Min-Prioritätswarteschlangen (/* mit binären Heaps */)
 Operation: Schlüssel x hinzufügen
•
•
5/3, Folie 28
setze max = max + 1, Q[max] = x und M[x] = max
while i > 1 do
•
setze j = i/2
•
if s(Q[j]) > s(Q[i]) then
•
vertausche die Werte von M[Q[j]] und M[Q[i]]
•
vertausche die Werte von Q[j] und Q[i]
•
setze i = j
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Einschub: Min-Prioritätswarteschlangen (/* mit binären Heaps */)
 Illustration
•
es sei M = { a,b,c,d,e,f,g }
•
es sei Q = { a,b,c,d,e } mit s(a) = 1, s(b) = 2, s(c) = 3 und s(d) = s(e) = 4
•
das Element g mit s(g) = 2 wird in Q aufgenommen
Q[1..n]
Q[1..n]
1
2
3
4
5
a
b
d
c
e
6
7
1
2
3
4
5
6
a
b
g
c
e
d
M[1..n]
M[1..n]
5/3, Folie 29
7
a
b
c
d
e
f
g
a
b
c
d
e
f
g
1
2
4
3
5
0
0
1
2
4
6
5
0
3
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Einschub: Min-Prioritätswarteschlangen (/* mit binären Heaps */)
 Anmerkung
•
jede der betrachteten Operationen benötigt offenbar nur O(log(n)) viele
Rechenschritte (/* wenn die Menge Q maximal n Elemente hat, so hat der
„zugehörige“ vollständig aufgefüllte Binärbaum maximal eine Tiefe der
Größe O(log(n)) */)
•
da man sich in der Variablen max „gemerkt“ hat, wie viele Elemente
aktuell zur Menge Q gehören, kann man in Zeit O(1) rausbekommen, ob
die Menge Q ungleich der leeren Menge ist
5/3, Folie 30
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Zurück zum Algorithmus von Dijsktra
•
wir schauen uns jetzt eine andere Realisierung an, bei der MinPrioritätswarteschlangen verwendet werden
 Zugrunde liegende Datenstrukturen
•
•
•
•
5/3, Folie 31
die Adjazenzliste A[1..n] von G
ein Array D[1..n] (/* in dem sich die „aktuellen“ Schätzwerte “gemerkt“
werden */)
ein Array P[1..n] (/* in dem sich für jeden Knoten der „aktuelle“ Vorgänger
„gemerkt“ wird */)
ein Array Q[1..n] (/* in dem sich „gemerkt“ wird, welche Knoten noch zu
untersuchen sind; als Schlüssel fungieren die Werte im Array D[1..n] */)
sowie das zu Q[1..n] gehörende Array M[1..n]
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Realisierung (/* Version 2 */)
•
•
•
•
setze D[j] = +∞ und P[j] = 0 für alle j = 1,...,n
setze D[s] = 0
füge alle Knoten zur Menge Q hinzu
while Q ist ungleich der leeren Menge do
•
•
setze u = Q[1] und entferne u aus Q
for alle v ∈ A[u] do
•
if D[v] > D[u] + w([u,v]) then
•
passe Q an, in dem anstelle des Schlüssels s(v) (/* D[v] */)
der Schlüssel s‘(v) (/* D[u] + w([u,v]) */) verwendet wird
setze D[v] = D[u] + w([u,v]) und P[v] = u
•
5/3, Folie 32
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Anmerkungen (/* Laufzeit */)
•
•
offenbar wird jede Kante von G nur einmal „angefaßt“
also benötigt das Ändern der Schätzwerte und das Anpassen der beiden
Arrays Q[1..n] und M[1..n] in der „While-Schleife“ insgesamt nur die Zeit
O(m*log(n))
•
die „While-Schleife“ wird insgesamt n mal ausgeführt, wobei jeweils
•
•
getestet wird, ob Q leer ist
(/* das bekommt man mit O(1) vielen Rechenschritten hin */)
der Knoten Q[1] bestimmt wird und der Arrays Q[1..n] und M[1..n]
angepasst werden (/* das bekommt man in O(n*log(n)) vielen
Rechenschritten hin */)
... also benötigt der Algorithmus von Dijkstra insgesamt
O((m + n)*(log(n)) viele Rechenschritte
5/3, Folie 33
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 „kritische“ Zusammenfassung
•
die bisher untersuchten Algorithmen kann man auch zum Bestimmen
eines kürzesten Pfades von einem Startknoten s zu einem Zielknoten t
verwenden (/* dass sie „quasi nebenbei“ kürzeste Pfade von s zu allen
anderen Knoten des Graphen bestimmen ist offensichtlich */)
•
um etwa beim Algorithmus von Dijkstra Rechenzeit (/* und Speicherplatz
zu sparen */) kann man
•
•
„aufhören“, wenn der Zielknoten t aus der Menge Q gestrichen wird
einen Knoten v erst dann in die Menge Q aufnehmen, wenn für den
„zugehörigen“ Schätzwert D[v] < + ∞ gilt
... Was bringen diese Vorschläge?
5/3, Folie 34
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Beispiel
•
es geht darum, eine kürzeste Route zwischen zwei Städten s und t in
Europa zu finden
... ohne diese Verbesserungen müssten sich alle Städte in der Menge Q
gemerkt werden
... mit der Verbesserung reduziert sich die Anzahl der Städte „wesentlich“
(/* es werden „im Prinzip“ nur die Städte u aufgenommen, für die die
Entfernung von s zu u nicht größer als die von s zu t ist */)
5/3, Folie 35
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Beispiel
s
t
... in manchen Fällen führen diese Verbesserungen dazu, dass man in
„vertretbarer“ Zeit und mit „vertretbarem“ Speicherplatz eine kürzeste
Route von der Stadt s zur Stadt t findet
5/3, Folie 36
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Beispiel
t
s
... in manchen Fällen helfen diese Verbesserungen nicht so richtig weiter
(/* will man eine Route von München nach Hamburg bestimmen, so
werden wenigstens alle Städte in Österreich, Tschechien, Norditalien und
Slowenien sowie in Luxemburg, Belgien und den Niederlanden komplett
„besucht“ und „benutzt“ */)
5/3, Folie 37
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Weitere Verbesserungsmöglichkeiten
•
man versucht „Wissen“ über das „aktuell“ zu lösende Problem zu
benutzen, um folgendes zu erreichen:
•
diejenigen Knoten in der Menge Q zu erst „anzufassen“, von denen
man vermutet, dass sie mit Blick auf das zu lösende Problem am
„brauchbarsten“ sind (/* implizit wird damit auch die Größe von Q
beschränkt */)
... bei der Planung von Routen zwischen zwei Städten s und t könnte z.B.
für jede Stadt u in Q die „Luftlinien-Entfernung“ von u zu t „herangezogen“
werden, um „brauchbare“ Knoten auszuwählen
... unter den Städten in Q wird stets diejenige Stadt u zu erst „angefasst“,
für die Summe aus geschätzter Entfernung von s nach u und „LuftlinienEntfernung“ von u zu t minimal ist
5/3, Folie 38
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Zugehörige algorithmische Fragestellung
•
gegeben:
•
•
•
•
•
ein gerichteter Graph G = (V,E)
eine Gewichtsfunktion w(.) für G
ein Startknoten s
ein Zielknoten t
gesucht:
•
das Gewicht eines kürzesten Pfades von s zu t (/* falls ein
solcher existiert, dann auch einen entsprechenden Pfad */)
... der Graph G habe genau n Knoten (/* der Einfachheit
halber sei V = { 1,...,n } */) und m Kanten
5/3, Folie 39
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Zugrunde liegende Idee
•
der vorzustellenden A*-Algorithmus arbeitet fast genauso wie der
Algorithmus von Dijsktra, d.h.
•
es werden sukzessive Knoten in eine Menge Q aufgenommen
•
bevor ein Knoten v in die Menge Q aufgenommen wird, muss ein
Schätzwert D[v] für die Entfernung δ(s,v) bestimmt werden (/* wobei
δ(s,v) ≤ D[v] < +∞] gelten soll */)
•
in jedem Schritt wird ein Knoten v aus der Menge Q ausgewählt und
entfernt
•
der ausgewählte Knoten v wird verwendet, um die Schätzwerte der
Knoten u anzupassen, für die es eine Kante von v nach u gibt
•
5/3, Folie 40
der Algorithmus bricht ab, wenn der Zielknoten t entfernt wird
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Zugrunde liegende Idee
•
beim Algorithmus von Dijsktra wird ein Knoten v ausgewählt, für den der
Schätzwert D[v] minimal ist (/* mit Blick auf alle Knoten in Q */)
•
beim vorzustellenden A*-Algorithmus wird ein Knoten v ausgewählt, für
den der Wert D[v] + H[v] minimal ist (/* mit Blick auf alle Knoten in Q */)
... der Wert H[v] ist eine Schätzung für die Entfernung des Zielknotens t
zum Knoten v
... der Knoten v, für den der Wert D[v] + H[v] minimal ist (/* mit Blick auf
alle Knoten in Q */), ist derjenige von dem man am ehesten erwarten
kann, dass er auf einem kürzesten Pfad vom Startknoten s zum
Zielknoten t liegt
5/3, Folie 41
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Begriff: Zulässige Heuristik
•
•
•
•
es seien G = (V,E) ein gerichteter Graph und w(.) die zugehörige
Gewichtsfunktion
es sei t der Zielknoten
für jeden Knoten v ∈ V sei der zugeordnete Wert H[v] eine reelle Zahl
die so definierte Heuristik H ist eine zulässige Heuristik für G und t, falls
gilt:
•
•
H[t] = 0
0 ≤ H[u] ≤ w(u,v) + H(v) für alle [u,v] ∈ E
... Idee: H[u] sollte nicht „unrealistisch“ viel größer als H[v] sein
... Anmerkung: man verwendet an dieser Stelle üblicherweise den Begriff
Heuristik anstelle von Schätzung
5/3, Folie 42
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Anmerkungen zur Wahl von Heuristiken
•
Heuristiken sollten immer so gewählt werden, dass
•
•
sie zulässig sind (/* sonst ist nicht sicher gestellt, dass der
A*-Algorithmus die korrekte Entfernung vom Startknoten s zum
Zielknoten t bestimmt */)
zu jedem Knoten v der Wert H[v] „schnell“ berechnet werden kann
... wenn die Heuristik zulässig ist, so ist garantiert, dass die Entfernung
von v zum Zielknoten nie „überschätzt“ wird (/* die Umkehrung gilt im
allgemeinen nicht */)
... die Kunst besteht darin, beide Aspekte „geeignet“ zu kombinieren
(/* die Extreme H[v] = 0 bzw. H[v] = δ(v,t) sind erlaubt, aber nicht so
richtig „Ziel führend“ */)
5/3, Folie 43
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Zugrunde liegende Datenstrukturen
•
•
•
•
die Adjazenzliste A[1..n] von G
ein Array D[1..n] (/* in dem sich die „aktuellen“ Schätzwerte “gemerkt“
werden */)
ein Array P[1..n] (/* in dem sich für jeden Knoten der „aktuelle“ Vorgänger
„gemerkt“ wird */)
eine Menge Q (/* um sich die Knoten zu merken, welche noch zu
untersuchen sind */)
... in einer „ernsthaften“ Realisierung wird die Menge in einer
Min-Prioritätswarteschlange verwaltet (/* die Größe der Arrays
sollte aus Gründen der Speicherplatzeffizienz „dynamisch“
angepasst“ werden */)
5/3, Folie 44
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Realisierung
•
•
•
•
setze D[j] = +∞ und P[j] = 0 für alle j = 1,...,n
setze D[s] = 0 setze H[0] = 0
setze Q = { s }
while es gibt noch einen Knoten j in Q do
•
•
•
•
bestimme einen Knoten u in Q, der unter allen
Knoten j in Q kleinsten Wert D[j] + H[j] hat
if u == t then stoppe
streiche u aus Q
for alle v ∈ A[u] do
•
bestimme H[v]
•
if D[v] > D[u] + w([u,v]) then
•
5/3, Folie 45
© 2011 Prof. Steffen Lange
-
HDa/FbI
setze D[v] = D[u] + w([u,v]) und P[v] = u
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Anmerkungen (/* Korrektheit */)
•
wir untersuchen jetzt, warum der A*-Algorithmus funktioniert, wenn die
verwendete Heuristik eine zulässige Heuristik ist (/* ... nebenbei werden
wir sehen, weshalb die gewählten Eigenschaften einer zulässigen
Heuristik „wichtig“ sind */)
•
zugrunde liegende Idee:
•
•
es sei u irgendein Knoten
wir werden zeigen, dass in dem Schritt, in dem u aus Q gestrichen
wird, bereits D[u] = δ(s,u) gilt
... das dann in späteren Schritten der Wert D[u] nicht mehr
verändert wird, sollte klar sein
... diese Aussage wird man „nur“ induktiv beweisen können
5/3, Folie 46
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Anmerkungen (/* Korrektheit */)
5/3, Folie 47
•
der Induktionsanfang sollte klar sein (/* im ersten Schritt wird s aus Q
entfernt und es gilt danach D[s] = δ(s,u) = 0 */)
•
die Induktionsvoraussetzung lautet: nach Schritt k gilt für alle Knoten v,
die schon mal in Q waren und bereits wieder aus Q entfernt wurden,
D[v] = δ(s,v) (/* die Menge dieser Knoten sei im Folgenden mit S
bezeichnet */)
•
es sei u der Knoten, der in Schritt k+1 aus der Menge Q entfernt wird
•
wir nehmen an, dass D[u] > δ(s,u) nach Schritt k+1 gilt (/* das nicht
D[u] < δ(s,u) gelten kann, sollte unmittelbar klar sein */)
•
es sei also P = (v0,...,vk+1) ein kürzester Pfad vom Startknoten s zum
Knoten u (/* also gilt w(P) = δ(s,u) < D[u] */)
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Anmerkungen (/* Korrektheit */)
•
im Pfad P = (v0,...,vz+1) sei vi der Knoten mit dem maximale Index, so dass
vi ∈ S nach Schritt k gilt
•
•
wir betrachten das Anfangsstück Pa = (v0,..,vi,vi+1) von P
nach Induktionsvoraussetzung muss D[vi] = δ(s,vi) nach Schritt k gelten
•
also gilt δ(s,u) = D[vi] + w(vi,vi+1)+ w(vi+1,vi+2) + w(vi+2,vi+3) + ... + w(vz,vz+1)
•
da H eine zulässige Heuristik ist gilt:
•
•
•
•
5/3, Folie 48
H(vi+1) ≤ w(vi+1,vi+2) + H(vi+2); also auch H(vi+1) - H(vi+2) ≤ w(vi+1,vi+2)
H(vi+2) ≤ w(vi+2,vi+3) + H(vi+3); also auch H(vi+2) - H(vi+3) ≤ w(vi+2,vi+3)
...
H(vz) ≤ w(vz,vz+1) + H(vz+1); also auch H(vz) - H(vz-1) ≤ w(vz,vz+1)
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Anmerkungen (/* Korrektheit */)
•
durch Einsetzen erhalten wir:
•
•
δ(s,u) ≥ D[vi] + w(vi,vi+1) + H(vi+1) - H(vi+2) + H(vi+2) - H(vi+3) + ...
+ H(vz-1) - H(vz)
also gilt auch:
•
δ(s,u) ≥ D[vi] + w(vi,vi+1) + H(vi+1) - H(vk) = D[vi+1] + H(vi+1) - H(vk)
•
wegen H(vk) ≥ 0, gilt auch: δ(s,u) ≥ D[vi+1] + H(vi+1)
•
da nach Annahme D[u] > δ(s,u) gilt, muss wegen H(u) ≥ 0 aber auch
D[u] + H(u) > D[vi+1] + H(vi+1) gelten
•
dann hätte aber der A*-Algorithmus den Knoten vi+1 anstelle des
Knotens u im Schritt k+1 aus der Menge S entfernen müssen
... und damit kann unsere Annahme, dass D[u] > δ(s,u) gilt, nicht korrekt sein
5/3, Folie 49
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Anmerkungen (/* Laufzeit */)
5/3, Folie 50
•
zur Laufzeit des A*-Algorithmus kann man allgemein nur sagen, dass sie
in der Größenordnung der Laufzeit des Algorithmus von Dijkstra liegt
(/* dazu kommt die Zeit zur Bestimmung von H[v] für jeden Knoten v, der
in die Menge Q aufgenommen wird */)
•
die Wahl der verwendeten zulässigen Heuristik ist entscheidend
•
für viele Anwendungsbereiche sind „sinnvolle“ Heuristiken bekannt
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Eine Spielanwendung aus dem Bereich der Künstlichen Intelligenz
•
•
•
es geht darum, dass folgende Puzzle zu lösen (/* früher hieß das
Schiebefax und es war in einer 4×4 Version in jedem Spielwarengeschäft
erhältlich */)
beim Schiebefax sind Kacheln (/* in der 3×3 Version mit den Zahlen 1 bis
8 beschriftet */) so in einen Rahmen eingebaut, dass man sie horizontal
und vertikal verschieben kann
das Ziel ist es, mit möglichst wenigen Zügen aus der gegebenen Situation
die sortierte Zielsituation zu erreichen
5
8
1
4
5/3, Folie 51
© 2011 Prof. Steffen Lange
7
-
2
1
2
3
3
4
5
6
6
7
8
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Modellierung
•
•
•
jede mögliche Situation wird als Knoten in einem gerichteten Graphen
aufgefasst
von einem Knoten u gibt es eine Kante zu einem Knoten v, falls die zu u
gehörende Situation mit einem Zug in die zu v gehörende Situation
überführt werden kann
jede Kante bekommt das Gewicht 1
5
8
1
4
5
4
5/3, Folie 52
8
2
5
1
3
1
7
6
4
© 2011 Prof. Steffen Lange
-
HDa/FbI
2
3
7
6
2
5
8
8
3
1
3
7
6
4
7
-
Graphen und Optimierung
2
6
5
8
2
1
7
3
4
6
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Modellierung
•
um das interessierende Problem zu lösen, ist offenbar in dem nur
„implizit“ gegebenen Graph ein kürzester Pfad zwischen den
zugehörigen Knoten zu bestimmen
5
8
1
4
5/3, Folie 53
2
...
3
7
© 2011 Prof. Steffen Lange
6
-
HDa/FbI
-
Graphen und Optimierung
1
2
3
4
5
6
7
8
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Anmerkungen
•
es verbietet sich offenbar, den Algorithmus von Dijsktra anzuwenden
•
•
falls ein kürzester Pfad das Gewicht k hat, kann man davon
ausgehen, das sukzessive mindestens 2k-1 viele Knoten erzeugt
werden müssen (/* in jeder Situation sind mindestens zwei
Spielzüge möglich */)
mit Hilfe des A*-Algorithmus kann man dieses Problem vermutlich
„effizienter“ lösen
... was noch fehlt ist eine zulässige Heuristik
5/3, Folie 54
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Eine zulässige Heuristik
•
wir verwenden die so genannte Manhattan-Distanz, um die Entfernung
einer Situation zur Zielsituation zu „schätzen“
•
dazu bestimmen wir für jede Kachel in der „aktuellen“ Situation, wie
viele Züge minimal nötig sind, um sie an ihre richtige Position in der
Zielsituation zu „verschieben“ und summieren über alle diese Werte
5
8
1
4
5/3, Folie 55
2
3
7
6
•
•
1
2
3
4
5
6
7
8
© 2011 Prof. Steffen Lange
-
für 1,2,3,4,6 und 7: jeweils 1 legaler Zug
für 5 und 8: jeweils 2 legale Züge
... für die Situation u gilt: H[u] = 10
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Anmerkungen
•
•
•
5/3, Folie 56
es seien u die aktuelle Situation und v eine durch einen Zug erreichbare
Situation
falls H[u] bekannt ist, kann man H[v] schnell berechnen (/* es genügt, für
die Kachel, die verschoben wurde, zu bestimmen, wie viele Züge jetzt
nötig sind, um sie an ihre richtige Position in der Zielsituation zu
verschieben */)
falls u die Anfangssituation ist, muss ein wenig mehr Aufwand betrieben
werden (/* es geht aber immer noch „hinreichend“ schnell */)
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Hintergrund
•
es sei F[i,j] die aktuelle Position von Kachel z in der Anfangssituation
•
•
•
•
•
5/3, Folie 57
da die Kachel 1 ins Feld F[1,1] gehört, wären |i-1|+|j-1| Züge nötig,
falls z = 1 gilt
da die Kachel 2 ins Feld F[1,2] gehört, wären |i-1|+|j-2| Züge nötig,
falls z = 2 gilt
da die Kachel 3 ins Feld F[1,3] gehört, wären |i-1|+|j-3| Züge nötig,
falls z = 3 gilt
...
da die Kachel 8 ins Feld F[3,2] gehört, wären |i-3|+|j-2| Züge nötig,
falls z = 8 gilt
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Anmerkung
•
die angegebene Heuristik ist offenbar eine zulässige Heuristik
Begründung:
5/3, Folie 58
•
es seien u die aktuelle Situation und v eine durch einen Zug erreichbare
Situation
•
•
offenbar gilt entweder H[v] = H[u] + 1 oder H[v] = H[u] - 1
also gilt in beiden Fällen H[u] ≤ w([u,v]) + H[v]
© 2011 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 5: Kürzeste Pfade
Spezialfall: Graphen mit nichtnegativen Gewichten
 Ergänzung
•
wenn man mit Hilfe des A*-Algorithmus das betrachtete Beispiel löst
•
•
5
8
1
4
7
werden insgesamt 24 Situationen „neu erzeugt“
wird festgestellt, dass 10 Züge genügen, um die Anfangssituation
in die Zielsituation zu überführen
2
5
2
3
1
8
3
6
4
7
6
5/3, Folie 59
© 2011 Prof. Steffen Lange
-
HDa/FbI
2
1
5
2
8
3
4
8
3
4
7
6
7
6
2
1
5
2
1
5
2
3
4
8
3
6
7
2
1
8
3
4
7
6
1
...
5
5
1
4
5
3
4
7
8
6
7
-
Graphen und Optimierung
8
6
Herunterladen