Dies ist kein vollständiges Skript(!), gibt aber eine Übersicht über die behandelten Themen.
Opera zeigt alles korrekt an, IE zeigt alles lesbar an, Mozilla verschluckt einige mathematische Symbole, sonstige Browser ... ?
I.1.1 Klassifizierung der Kürzeste-Wege-Probleme
I.1.2 Definitionen
I.1.3 Notationen
I.1.4 Wiederholung des Dijkstra-Algorithmus
I.1.5 Teilwege kürzester Wege sind kürzeste Wege: w = v0v1...vk ist kürzester Weg ⇒ wij = vivi+1...vj ist kürzester Weg
I.1.6 Eigenschaft der kürzesten Entfernungen: w = v0v1...vk ist kürzester Weg ⇔ d(vi) + γ(vi,vi+1) = d(vi+1)
I.1.7 Existenz des Kürzeste-Wege-Baums: Sei G = (V,E,γ) ohne negative Zyklen, so existiert ein Spannbaum T = (V,ET,γT) so, dass sich die kürzesten Entfernungen in G und T nicht unterscheiden. Sind die d(·) bekannt, so lässt sich T in O( n + m ) berechnen.
Hausaufgabe: Geben Sie Beispiele für Graphen ohne negative Zyklen an, für die der Graph, der die Kanten aller kürzesten Wege umfasst, Zyklen hat
I.1.8 Eine notwendige Bedingung für D(·) = d(·): ∀ (u,v) ∈ E: D(v) ≤ D(u) + γ(u,v), Kanten mit dieser Eigenschaft heißen konsistent (sonst verkürzend)
I.1.9 Hinreichende Bedingung für D(·) = d(·): D(v0) = 0, ∀ v ∈ V: D(v) ≥ d(v), ∀ (u,v) ∈ E: D(v) ≤ D(u) + γ(u,v) ⇒ ∀ v ∈ V: D(v)=d(v)
I.1.10 Der generische Kürzeste-Wege-Algorithmus: Solange verkürzende
Kanten (u,v) existieren, setze D(v) := D(u) + γ(u,v).
Laufzeit O( m·2n ), für ganzzahlige Kantengewichte O( n2·m·γ|max| ).
I.1.11 Der modifizierte generische Kürzeste-Wege-Algorithmus: Verwalte in
M die Knoten, die ausgehende verkürzende Kanten haben könnten. Algorithmus: Solange
M ≠ ∅ entferne einen Knoten u ∈ M und setze für die ausgehenden verkürzenden Kanten (u,v) D(v) := D(u) + γ(u,v) und füge v zu M hinzu.
Laufzeit O( n·2n ), für ganzzahlige Kantengewichte O( n·m·γ|max| ).
I.1.12 Verwaltung der Knotenmenge M als FIFO (Bellman-Ford)
I.1.13 Kürzesten Wege mit k Kanten sind nach k Phasen berechnet
I.1.14 Beispiel: Anzahl der Phasen kann kleiner als die Tiefe jedes Kürzeste-Wege-Baums sein
I.1.15 Laufzeit Bellman-Ford: Sei t die geringste Tiefe aller Kürzeste-Wege-Bäume, so löst Bellman-Ford in O( t·m ) das SSSP-Problem oder findet einen negativen Zyklus in O( n·m )
Hausaufgabe: Konstruieren Sie zu gegebenen n und m Graphen, die Θ( n·m ) Schritte brauchen
I.1.16 Beispiel: negative Zyklen: Lemma I.1.13 gilt auch für k ≥ n
I.1.17 Beispiel: Verbesserung durch Vorgängerheuristik: Wird v aus M entfernt und der Vorgänger vorg(v) ist in M, so hat sich D(vorg(v)) wieder verringert und die von v ausgehenden Kanten brauchen nicht betrachtet zu werden, da sich D(v) wieder verringern wird (spätestens, wenn vorg(v) aus M entfernt wird).
I.1.18 Knoten-Verwaltung als Deque (D'Esopo-Pape): Idee:
Korrigiere falsch berechnete Teile so früh wie möglich, bevor mit noch nicht
betrachteten Knoten weitergearbeitet wird: Knoten mit D(v) < ∞ werden vorne
in die Deque (double ended queue) eingefügt (wie beim Stack), Knoten mit D(v) = ∞ hinten (wie bei einer Queue)
Laufzeit: Worst Case O( n·2n ), aber in der Praxis meist schneller als
Bellman-Ford oder Dijkstra.
I.1.19 Worst-Case Beispiele
I.1.20 Knoten-Verwaltung mit zwei Queues (Pallottino): Idee wie bei
D'Esopo-Pape, aber statt Deque (entspricht Kopplung von Stack und Queue) Verwendung
einer weiteren Queue anstelle des Stacks für die wiederholt bearbeiteten Knoten.
Laufzeit: in der Praxis ähnlich schnell wie D'Esopo-Pape, aber Worst Case O( n2·m )
I.1.21 Aufteilung des Algorithmus von Pallottino in n mal Bellman-Ford
I.2.1 Generischer Kürzeste-Wege-Algorithmus mit optimaler Reihenfolge der Knotenauswahl: Bisher: Unnötiger Aufwand in den Algorithmen, da sich die D(v) verringern können, nachdem die von v ausgehenden Kanten schon konsistent gemacht wurden. Idee: Wähle den Knoten v so, dass D(v) = d(v) gilt.
I.2.2 Invariante ∀ v ∈ R: D(v) = min { d(u) + γ(u,v) | u ∈ B }: Damit existiert stets ein v ∈ R mit D(v) = d(v)
I.2.3 Das SSSP-Problem mit γ(u,v) = 1, (u,v) ∈ E lässt sich in O( n + m ) lösen: Beweis: Hausaufgabe!
I.2.4 Das SSSP-Problem in azyklischen Graphen lässt sich in O( n + m ) lösen
I.2.5 Dijkstras Algorithmus: Sei γ ≥ 0: Sei v ∈ R mit D(v) = min { D(v') | v' ∈ V−B }, so gilt D(v) = d(v)
I.2.6 Das SSSP-Problem in Graphen mit γ ≥ 0 lässt sich in O( n2 ) bzw. O( m·log n ) lösen: Dijkstras Algorithmus mit Listen bzw. Heaps
I.2.7 Das SSSP-Problem in Graphen mit γ ≥ 0 lässt sich in O( m + n·log n ) lösen: Dijkstras Algorithmus mit Fibonacci-Heaps
I.2.8 Beim Dijkstra-Algorithmus werden die Knoten in aufsteigender Reihenfolge der Entfernung zum Startknoten betrachtet: Beweis: Hausaufgabe!
I.2.9 Jede vergleichsbasierte Implementierung von Dijkstras Algorithmus benötigt im Worst-Case Ω( m + n·log n ) Schritte: Rückführung auf das Sortierproblem
I.2.10 Definitionen für den A*-Algorithmus: Eine Schätzfunktion edz : V→R heißt zulässig gdw. edz(v) ≤dist(v,z), v∈V. Sie heißt konsistent gdw. edz ist zulässig und edz(u) ≤ γ(u,v) + edz(v).
I.2.11 A*-Algorithmus: Sei v ∈ R mit D(v) + edz(v) = min { D(v') + edz(v') | v' ∈ V−B }, so gilt D(v) = d(v)
I.2.12 Der A*-Algorithmus mit konsistenter Schätzfunktion löst das SPSP- und das SSSP-Problem in O( m + n·log n ): Verwendung von Fibonacci-Heaps, sonst Laufzeiten wie in I.2.6. Entsprechen Kantenlängen und Schätzfunktion der Luftlinie, so beträgt die Laufzeit zur Lösung des SPSP-Problems im Mittel nur O(n) (Sedgewick/Vetter '86) - unabhängig von der Anzahl der Kanten!
I.2.13 Sind die Kantengewichte positiv so entspricht der A*-Algorithmus mit Schätzfunktion konstant 0 dem Dijkstra-Algorithmus
I.2.14 Beispiel: Die Kantengewichte im A*-Algorithmus können negativ sein! Die Laufzeit bleibt - konsistente Schätzfunktion vorausgesetzt - wie in I.2.12 angegeben.
Hausaufgabe: Überlegen Sie warum dies gilt (Auflösung am 2.6.)
I.2.15 Beim A*-Algorithmus mit konsistenter Schätzfunktion werden die Knoten in aufsteigender Reihenfolge der Werte d()+ed() aufgenommen
I.2.16 Beispiel: Der A*-Algorithmus mit zulässiger aber nicht konsistenter Schätzfunktion ist ohne Änderung nicht korrekt: Die D()-Werte der Baumknoten müssen sich wieder verringern dürfen und so diese Knoten wieder in die Menge M der Knoten, deren ausgehende Kanten noch betrachtet werden müssen, aufgenommen werden können.
I.2.17 Wird der Zielknoten beim A*-Algorithmus erstmals aus der Menge M gewählt, so gilt D(z)=d(z), auch wenn die Schätzfunktion nur zulässig aber nicht konsistent ist: Dies ist eine wichtige Eigenschaft, da wir sonst gegenüber dem generischen Algorithmus keinen Vorteil hätten.
I.2.18 Beispiel: Der Worst-Case für den A*-Algorithmus mit zulässiger aber nicht konsistenter Schätzfunktion beträgt O(n2n)
2.1 | Einführung in die Abbiegeverbotstheorie | ||||
2.2 | Kürzeste Wege in Graphen mit Abbiegeverboten (dynamisch) | ||||
2.3 | Kürzeste Wege in Graphen mit Abbiegeverboten (statisch) | ||||
2.4 | Der Beweis der Hauptsatzes der Abbiegeverbotstheorie | ||||
2.5 | k-kürzeste Wege mit dem Algorithmus von Azevedo | ||||
2.6 | Kürzeste Wege in Graphen mit Wegeverboten | ||||
2.7 | Eine Beweisskizze des Algorithmus | ||||
| |||||
14.07.2004 | Kapitel 2 Berechnung kürzester Wege in Graphen mit verbotenen Strukturen
|
(1auf1) (2auf1) (6auf1) (9auf1) |
(pdf) (pdf) (pdf) (pdf) |
(ps) (ps) (ps) (ps) |