Offline Bewegungsplanung: Horizontb¨ aume
Elmar Langetepe University of Bonn
Datenstruktur Horizontb¨ aume
5 5 4 3 2 1
S
Oberer Horizontbaum
S
Unterer Horizontbaum
1 2
3 4
Datenstruktur Horizontb¨ aume
• F¨ur Pseudogerade mit Ordnung
5 5 4 3 2 1
S
Oberer Horizontbaum
S
Unterer Horizontbaum
1 2
3 4
Datenstruktur Horizontb¨ aume
• F¨ur Pseudogerade mit Ordnung
• Oberer und Unterer Horizontbaum gegeben
5 5 4 3 2 1
S
Oberer Horizontbaum
S
Unterer Horizontbaum
1 2
3 4
Datenstruktur Horizontb¨ aume
• F¨ur Pseudogerade mit Ordnung
• Oberer und Unterer Horizontbaum gegeben
• Hebe ¨uber n¨achsten erlaubten SP
5 5 4 3 2 1
S
Oberer Horizontbaum
S
Unterer Horizontbaum
1 2
3 4
Datenstruktur Horizontb¨ aume
• F¨ur Pseudogerade mit Ordnung
• Oberer und Unterer Horizontbaum gegeben
• Hebe ¨uber n¨achsten erlaubten SP
• Aktualisiere die B¨aume
5 5 4 3 2 1
S
Oberer Horizontbaum
S
Unterer Horizontbaum
1 2
3 4
Kosten Aktualisierung T
o(T
u)
Kosten Aktualisierung T
o(T
u)
1. N¨achster Knoten v!
g2 g1
v
g3
Kosten Aktualisierung T
o(T
u)
1. N¨achster Knoten v! 2. Dr¨uberheben
S
g2 g1
v
g3
Bleibt!
Schnittpunkt!
Neu!
Kosten Aktualisierung T
o(T
u)
1. N¨achster Knoten v! 2. Dr¨uberheben
3. Schnittpunkt mit Kette darunter bestimmen
S
g2 g1
v
g3
Bleibt!
Schnittpunkt!
Neu!
Durchlaufen!
Kosten Aktualisierung T
o(T
u)
1. N¨achster Knoten v! 2. Dr¨uberheben
3. Schnittpunkt mit Kette darunter bestimmen 4. Einmal Kanten einer Zelle durchlaufen
S
g2 g1
v
g3
Bleibt!
Schnittpunkt!
Neu!
Durchlaufen!
Kosten Aktualisierung T
o(T
u)
1. N¨achster Knoten v! 2. Dr¨uberheben
3. Schnittpunkt mit Kette darunter bestimmen 4. Einmal Kanten einer Zelle durchlaufen
5. Nicht alle auf dem Rand!
S
g2 g1
v
g3
Bleibt!
Schnittpunkt!
Neu!
Durchlaufen!
gl
Zelle Z
Kosten Aktualisierung T
o(T
u)
1. N¨achster Knoten v! 2. Dr¨uberheben
3. Schnittpunkt mit Kette darunter bestimmen 4. Einmal Kanten einer Zelle durchlaufen
5. Nicht alle auf dem Rand!
S
g2 g1
v
g3
Bleibt!
Schnittpunkt!
Neu!
Durchlaufen!
gl
Zelle Z
Gesamtkosten: Aktualisierung T
o(T
u)
Gesamtkosten: Aktualisierung T
o(T
u)
1. Geschickte Zuordnung
g1
x w v v
S
gk g3
g2 Schnittpunkt!
Neu!
Bleibt!
S1
Gesamtkosten: Aktualisierung T
o(T
u)
1. Geschickte Zuordnung
2. Gesamtz¨ahlweise: Pro Knoten alle Kanten einer Zelle
g1
x w v v
S
gk g3
g2 Schnittpunkt!
Neu!
Bleibt!
S1
Gesamtkosten: Aktualisierung T
o(T
u)
1. Geschickte Zuordnung
2. Gesamtz¨ahlweise: Pro Knoten alle Kanten einer Zelle 3. P
Zelle Z(Kanten Z) × (Knoten Z)
g1
x w v v
S
gk g3
g2 Schnittpunkt!
Neu!
Bleibt!
S1 1x v
1x v
Gesamtkosten: Aktualisierung T
o(T
u)
1. Geschickte Zuordnung
2. Gesamtz¨ahlweise: Pro Knoten alle Kanten einer Zelle 3. P
Zelle Z(Kanten Z) × (Knoten Z)
g1
x w v v
S
gk g3
g2 Schnittpunkt!
Neu!
Bleibt!
1x v 1x v
S2
Gesamtkosten: Aktualisierung T
o(T
u)
1. Geschickte Zuordnung
2. Gesamtz¨ahlweise: Pro Knoten alle Kanten einer Zelle 3. P
Zelle Z(Kanten Z) × (Knoten Z)
g1
x w v v
S
gk g3
g2 Schnittpunkt!
Neu!
Bleibt!
1x v 1x v
S2
Gesamtkosten: Aktualisierung T
o(T
u)
1. Geschickte Zuordnung
2. Gesamtz¨ahlweise: Pro Knoten alle Kanten einer Zelle 3. P
Zelle Z(Kanten Z) × (Knoten Z)
g1
x w v v
S
gk g3
g2 Schnittpunkt!
Neu!
Bleibt!
1x v 1x v
S2
1x w
Gesamtkosten: Aktualisierung T
o(T
u)
1. Geschickte Zuordnung
2. Gesamtz¨ahlweise: Pro Knoten alle Kanten einer Zelle 3. P
Zelle Z(Kanten Z) × (Knoten Z)
g1
x w v v
S
gk g3
g2 Schnittpunkt!
Neu!
Bleibt!
1x v 1x v
1x w
S3
Gesamtkosten: Aktualisierung T
o(T
u)
1. Geschickte Zuordnung
2. Gesamtz¨ahlweise: Pro Knoten alle Kanten einer Zelle 3. P
Zelle Z(Kanten Z) × (Knoten Z)
g1
x w v v
S
gk g3
g2 Schnittpunkt!
Neu!
Bleibt!
1x v 1x v
1x w
S3
Gesamtkosten: Aktualisierung T
o(T
u)
1. Geschickte Zuordnung
2. Gesamtz¨ahlweise: Pro Knoten alle Kanten einer Zelle 3. P
Zelle Z(Kanten Z) × (Knoten Z)
g1
x w v v
S
gk g3
g2 Schnittpunkt!
Neu!
Bleibt!
1x v 1x v
1x w
1x x S3
Gesamtkosten: Aktualisierung T
o(T
u)
1. Geschickte Zuordnung
2. Gesamtz¨ahlweise: Pro Knoten alle Kanten einer Zelle 3. P
Zelle Z(Kanten Z) × (Knoten Z)
g1
x w v v
S
gk g3
g2 Schnittpunkt!
Neu!
Bleibt!
1x v 1x v
1x w
1x x S3
1x x
Gesamtkosten: Aktualisierung T
o(T
u)
1. Geschickte Zuordnung
2. Gesamtz¨ahlweise: Pro Knoten alle Kanten einer Zelle 3. P
Zelle Z(Kanten Z) × (Knoten Z)
g1
x w v v
S
gk g3
g2 Schnittpunkt!
Neu!
Bleibt!
1x v 1x v
1x w
1x x S3
1x x
Andere Z¨ ahlweise, bessere Zuordnung!
X Zelle Z
(Kanten Z) × (Knoten Z) ≤
2 X
Gerade g
X
g schneidet Z
(Kanten Z)
g
Komplexit¨ at Zone einer Geraden g
g
Komplexit¨ at Zone einer Geraden g
X
g schneidet Z
(Kanten Z)
g
Komplexit¨ at Zone einer Geraden g
X
g schneidet Z
(Kanten Z)
n-mal diese Kosten, jede Gerade
g
Zone(l) in O(n)
Zone(l) in O(n)
• n nicht-senkrechte Geraden, Horizontale l
Zone(l) in O(n)
• n nicht-senkrechte Geraden, Horizontale l
• Def. 1.3: Zone(l) := {Kanten der Zelle Z|Z ∩ l 6= ∅}
Zone(l) in O(n)
• n nicht-senkrechte Geraden, Horizontale l
• Def. 1.3: Zone(l) := {Kanten der Zelle Z|Z ∩ l 6= ∅}
• Theorem 1.4: Komplexit¨at von Zone(l) liegt in O(n)
Zone(l) in O(n)
• n nicht-senkrechte Geraden, Horizontale l
• Def. 1.3: Zone(l) := {Kanten der Zelle Z|Z ∩ l 6= ∅}
• Theorem 1.4: Komplexit¨at von Zone(l) liegt in O(n)
1 l
2 3 4
5 6
7 8
Induktiv linke Kanten z¨ ahlen
Induktiv linke Kanten z¨ ahlen
l
Induktiv linke Kanten z¨ ahlen
Linke Kanten einer Zelle! l
Induktiv linke Kanten z¨ ahlen
Linke Kanten einer Zelle! l
l Ind. Anf.
Induktiv linke Kanten z¨ ahlen
Linke Kanten einer Zelle! l
l Ind. Anf.
<= 5 x (1) Linke Kanten
Induktiv linke Kanten z¨ ahlen
Linke Kanten einer Zelle! l
l Ind. Anf.
<= 5 x (1) Linke Kanten
l Fall 1) Einfacher Schnitt
Ind. Schluss (neue Gerade ganz rechts)
Induktiv linke Kanten z¨ ahlen
Linke Kanten einer Zelle! l
l Ind. Anf.
<= 5 x (1) Linke Kanten
l Fall 1) Einfacher Schnitt
Ind. Schluss (neue Gerade ganz rechts)
l neu (am weitesten rechts)
Induktiv linke Kanten z¨ ahlen
Linke Kanten einer Zelle! l
l Ind. Anf.
<= 5 x (1) Linke Kanten
l Fall 1) Einfacher Schnitt
Ind. Schluss (neue Gerade ganz rechts)
l neu (am weitesten rechts)
w v
Induktiv linke Kanten z¨ ahlen
Linke Kanten einer Zelle! l
l Ind. Anf.
<= 5 x (1) Linke Kanten
l Fall 1) Einfacher Schnitt
Ind. Schluss (neue Gerade ganz rechts)
l neu (am weitesten rechts)
w
v +1
Induktiv linke Kanten z¨ ahlen
Linke Kanten einer Zelle! l
l Ind. Anf.
<= 5 x (1) Linke Kanten
l Fall 1) Einfacher Schnitt
Ind. Schluss (neue Gerade ganz rechts)
l neu (am weitesten rechts)
w
v +1
+1
Induktiv linke Kanten z¨ ahlen
Linke Kanten einer Zelle! l
l Ind. Anf.
<= 5 x (1) Linke Kanten
l Fall 1) Einfacher Schnitt
Ind. Schluss (neue Gerade ganz rechts)
l neu (am weitesten rechts)
w
v +1
+1
+1
Induktiv linke Kanten z¨ ahlen
Linke Kanten einer Zelle! l
l Ind. Anf.
<= 5 x (1) Linke Kanten
l Fall 1) Einfacher Schnitt
Ind. Schluss (neue Gerade ganz rechts)
l neu (am weitesten rechts)
w
v +1
+1
+1
<= 5 x (n-1) + 3 Linke Kanten
Induktiv linke Kanten z¨ ahlen
Linke Kanten einer Zelle! l
l Ind. Anf.
<= 5 x (1) Linke Kanten
l Fall 1) Einfacher Schnitt
Ind. Schluss (neue Gerade ganz rechts)
l neu (am weitesten rechts)
w
v +1
+1
+1
<= 5 x (n-1) + 3 Linke Kanten
Induktiv linke Kanten z¨ ahlen
Induktiv linke Kanten z¨ ahlen
Ind. Schluss (WC)
l Fall 2) Schnitt mit einer Kante
Induktiv linke Kanten z¨ ahlen
Ind. Schluss (WC)
l Fall 2) Schnitt mit einer Kante
l neu (am weitesten rechts)
Induktiv linke Kanten z¨ ahlen
Ind. Schluss (WC)
l Fall 2) Schnitt mit einer Kante
l neu (am weitesten rechts) v
w
Induktiv linke Kanten z¨ ahlen
Ind. Schluss (WC)
l Fall 2) Schnitt mit einer Kante
l neu (am weitesten rechts) v
w
+1
Induktiv linke Kanten z¨ ahlen
Ind. Schluss (WC)
l Fall 2) Schnitt mit einer Kante
l neu (am weitesten rechts) v
w
+1
+1
Induktiv linke Kanten z¨ ahlen
Ind. Schluss (WC)
l Fall 2) Schnitt mit einer Kante
l neu (am weitesten rechts) v
w
+1
+1
+1
Induktiv linke Kanten z¨ ahlen
Ind. Schluss (WC)
l Fall 2) Schnitt mit einer Kante
l neu (am weitesten rechts) v
w
+1
+1
+1 +2
Induktiv linke Kanten z¨ ahlen
Ind. Schluss (WC)
l Fall 2) Schnitt mit einer Kante
l neu (am weitesten rechts) v
w
+1
+1
+1 +2
<= 5 x (n-1) + 5 Linke Kanten
Induktiv linke Kanten z¨ ahlen
Ind. Schluss (WC)
l Fall 2) Schnitt mit einer Kante
l neu (am weitesten rechts) v
w
+1
+1
+1 +2
<= 5 x (n-1) + 5 Linke Kanten
Induktiv linke Kanten z¨ ahlen
Induktiv linke Kanten z¨ ahlen
l Fall 3) Schnitt mit mahr als einer Kante
Ind. Schluss (WC)
Induktiv linke Kanten z¨ ahlen
l Fall 3) Schnitt mit mahr als einer Kante
Ind. Schluss (WC)
l neu (am weitesten rechts)
Induktiv linke Kanten z¨ ahlen
l Fall 3) Schnitt mit mahr als einer Kante
Ind. Schluss (WC)
l neu (am weitesten rechts) v
w
Induktiv linke Kanten z¨ ahlen
l Fall 3) Schnitt mit mahr als einer Kante
Ind. Schluss (WC)
l neu (am weitesten rechts) v
w
+1
Induktiv linke Kanten z¨ ahlen
l Fall 3) Schnitt mit mahr als einer Kante
Ind. Schluss (WC)
l neu (am weitesten rechts) v
w
+1
+1
Induktiv linke Kanten z¨ ahlen
l Fall 3) Schnitt mit mahr als einer Kante
Ind. Schluss (WC)
l neu (am weitesten rechts) v
w
+1
+1
+2
Induktiv linke Kanten z¨ ahlen
l Fall 3) Schnitt mit mahr als einer Kante
Ind. Schluss (WC)
l neu (am weitesten rechts) v
w
+1
+1
+2
<= 5 x (n-1) + 4 Linke Kanten
Induktiv linke Kanten z¨ ahlen
l Fall 3) Schnitt mit mahr als einer Kante
Ind. Schluss (WC)
l neu (am weitesten rechts) v
w
+1
+1
+2
<= 5 x (n-1) + 4 Linke Kanten
Insgesamt nicht mehr als 5n linke Kanten!
Algorithmus Bearbeitungsreihenfolge
Algorithmus Bearbeitungsreihenfolge
• Init.: Nachbarliste, Kandidatenliste, Horizontb¨aume:
Algorithmus Bearbeitungsreihenfolge
• Init.: Nachbarliste, Kandidatenliste, Horizontb¨aume: O(n2)
Algorithmus Bearbeitungsreihenfolge
• Init.: Nachbarliste, Kandidatenliste, Horizontb¨aume: O(n2)
• Kandidaten ausw¨ahlen, Liste aktualisieren (Horizontbaum):
Algorithmus Bearbeitungsreihenfolge
• Init.: Nachbarliste, Kandidatenliste, Horizontb¨aume: O(n2)
• Kandidaten ausw¨ahlen, Liste aktualisieren (Horizontbaum): O(1)
Algorithmus Bearbeitungsreihenfolge
• Init.: Nachbarliste, Kandidatenliste, Horizontb¨aume: O(n2)
• Kandidaten ausw¨ahlen, Liste aktualisieren (Horizontbaum): O(1)
• Horizontb¨aume aktualisieren:
Algorithmus Bearbeitungsreihenfolge
• Init.: Nachbarliste, Kandidatenliste, Horizontb¨aume: O(n2)
• Kandidaten ausw¨ahlen, Liste aktualisieren (Horizontbaum): O(1)
• Horizontb¨aume aktualisieren: O(n2)
Algorithmus Bearbeitungsreihenfolge
• Init.: Nachbarliste, Kandidatenliste, Horizontb¨aume: O(n2)
• Kandidaten ausw¨ahlen, Liste aktualisieren (Horizontbaum): O(1)
• Horizontb¨aume aktualisieren: O(n2)
• Reihenfolge des ¨Uberschreitens: Bearbeitungsreihenfolge,
Algorithmus Bearbeitungsreihenfolge
• Init.: Nachbarliste, Kandidatenliste, Horizontb¨aume: O(n2)
• Kandidaten ausw¨ahlen, Liste aktualisieren (Horizontbaum): O(1)
• Horizontb¨aume aktualisieren: O(n2)
• Reihenfolge des ¨Uberschreitens: Bearbeitungsreihenfolge, O(n2)
Zusammenfassung Gesamtalgorithmus
• Horizontb¨aume aktualisieren: O(n2)
• Topol. Sweep: O(n2)
• Bearbeitungsreihenfolge: O(n2)
• Sweep Sichtbarkeitsgraph: O(n2)
• Theorem 1.5:: Sichtbarkeitsgraph von n Liniensegmenten in O(n2) berechenbar. Speicherbedarf O(n)
K¨ urzeste Pfade in gewichteten Graph (Dijkstra, 1959)
Gegeben: Graph G = (V, E) zusammenh¨angend, |V | = n, Kantengewichtung g : E −→ R≥0, Knoten s, t ∈ V .
Gesucht: Kantenfolge von s nach t mit minimalem Gesamtgewicht.
Solange A 6= ∅:
• Entnehme A ein p mit minimalen d(p).
• W := W ∪ {p}.
• F¨ur alle direkten Nachbarn q von p in W C: – d(q) := min
n
d(q), d(p) + g(p, q) o – Wenn q /∈ A dann A := A ∪ {q}.
Dijkstra auf (V, E ), |E | = m ∈ O(n
2), |V | = n)
Dijkstra auf (V, E ), |E | = m ∈ O(n
2), |V | = n)
• Welle W,
Dijkstra auf (V, E ), |E | = m ∈ O(n
2), |V | = n)
• Welle W, Ausl¨aufer A
Dijkstra auf (V, E ), |E | = m ∈ O(n
2), |V | = n)
• Welle W, Ausl¨aufer A
• Priority-Queue f¨ur A mit |A| ∈ O(n)
Dijkstra auf (V, E ), |E | = m ∈ O(n
2), |V | = n)
• Welle W, Ausl¨aufer A
• Priority-Queue f¨ur A mit |A| ∈ O(n)
• DS f¨ur A:
Dijkstra auf (V, E ), |E | = m ∈ O(n
2), |V | = n)
• Welle W, Ausl¨aufer A
• Priority-Queue f¨ur A mit |A| ∈ O(n)
• DS f¨ur A:
1. Entnahme Min: n − mal
Dijkstra auf (V, E ), |E | = m ∈ O(n
2), |V | = n)
• Welle W, Ausl¨aufer A
• Priority-Queue f¨ur A mit |A| ∈ O(n)
• DS f¨ur A:
1. Entnahme Min: n − mal 2. Entferne Min: n − mal
Dijkstra auf (V, E ), |E | = m ∈ O(n
2), |V | = n)
• Welle W, Ausl¨aufer A
• Priority-Queue f¨ur A mit |A| ∈ O(n)
• DS f¨ur A:
1. Entnahme Min: n − mal 2. Entferne Min: n − mal
3. Anpassen Schl¨ussel: m − mal
Dijkstra auf (V, E ), |E | = m ∈ O(n
2), |V | = n)
• Welle W, Ausl¨aufer A
• Priority-Queue f¨ur A mit |A| ∈ O(n)
• DS f¨ur A:
1. Entnahme Min: n − mal 2. Entferne Min: n − mal
3. Anpassen Schl¨ussel: m − mal
• Beste Wahl: Fibbonacci Heaps
Dijkstra auf (V, E ), |E | = m ∈ O(n
2), |V | = n)
• Welle W, Ausl¨aufer A
• Priority-Queue f¨ur A mit |A| ∈ O(n)
• DS f¨ur A:
1. Entnahme Min: n − mal 2. Entferne Min: n − mal
3. Anpassen Schl¨ussel: m − mal
• Beste Wahl: Fibbonacci Heaps
• 1) in O(1),
Dijkstra auf (V, E ), |E | = m ∈ O(n
2), |V | = n)
• Welle W, Ausl¨aufer A
• Priority-Queue f¨ur A mit |A| ∈ O(n)
• DS f¨ur A:
1. Entnahme Min: n − mal 2. Entferne Min: n − mal
3. Anpassen Schl¨ussel: m − mal
• Beste Wahl: Fibbonacci Heaps
• 1) in O(1), 2) in O(log n),
Dijkstra auf (V, E ), |E | = m ∈ O(n
2), |V | = n)
• Welle W, Ausl¨aufer A
• Priority-Queue f¨ur A mit |A| ∈ O(n)
• DS f¨ur A:
1. Entnahme Min: n − mal 2. Entferne Min: n − mal
3. Anpassen Schl¨ussel: m − mal
• Beste Wahl: Fibbonacci Heaps
• 1) in O(1), 2) in O(log n), 3) in O(1)
Dijkstra auf (V, E ), |E | = m ∈ O(n
2), |V | = n)
• Welle W, Ausl¨aufer A
• Priority-Queue f¨ur A mit |A| ∈ O(n)
• DS f¨ur A:
1. Entnahme Min: n − mal 2. Entferne Min: n − mal
3. Anpassen Schl¨ussel: m − mal
• Beste Wahl: Fibbonacci Heaps
• 1) in O(1), 2) in O(log n), 3) in O(1)
• Laufzeit: O(n log n + m),
Dijkstra auf (V, E ), |E | = m ∈ O(n
2), |V | = n)
• Welle W, Ausl¨aufer A
• Priority-Queue f¨ur A mit |A| ∈ O(n)
• DS f¨ur A:
1. Entnahme Min: n − mal 2. Entferne Min: n − mal
3. Anpassen Schl¨ussel: m − mal
• Beste Wahl: Fibbonacci Heaps
• 1) in O(1), 2) in O(log n), 3) in O(1)
• Laufzeit: O(n log n + m), Optimal?
Dijkstra auf (V, E ), |E | = m ∈ O(n
2), |V | = n)
• Welle W, Ausl¨aufer A
• Priority-Queue f¨ur A mit |A| ∈ O(n)
• DS f¨ur A:
1. Entnahme Min: n − mal 2. Entferne Min: n − mal
3. Anpassen Schl¨ussel: m − mal
• Beste Wahl: Fibbonacci Heaps
• 1) in O(1), 2) in O(log n), 3) in O(1)
• Laufzeit: O(n log n + m), Optimal?
• Andere DS, z.B. Baum: O((n + m) log n), 3) in O(log n)
Ergebnis!!
Ergebnis!!
Theorem: K¨urzester Weg in polygonaler Szene P mit |P| = n von s nach t kann in Zeit O(n2) berechnet werden.
Ergebnis!!
Theorem: K¨urzester Weg in polygonaler Szene P mit |P| = n von s nach t kann in Zeit O(n2) berechnet werden.
Beweis:
Ergebnis!!
Theorem: K¨urzester Weg in polygonaler Szene P mit |P| = n von s nach t kann in Zeit O(n2) berechnet werden.
Beweis: Sichtbarbeitsgraph O(n2), Dijkstra: O(n log n + n2) ∈ O(n2)
Untere Schranke!
Untere Schranke!
• Sortieren reduzieren auf k¨urzesten Weg berechnen!
Untere Schranke!
• Sortieren reduzieren auf k¨urzesten Weg berechnen!
• x1, x2, . . . , xn in O(n) auf polygonale Szene
Untere Schranke!
• Sortieren reduzieren auf k¨urzesten Weg berechnen!
• x1, x2, . . . , xn in O(n) auf polygonale Szene
• Ω(n log n)
x3x2 x1 x5 x4
Untere Schranke!
• Sortieren reduzieren auf k¨urzesten Weg berechnen!
• x1, x2, . . . , xn in O(n) auf polygonale Szene
• Ω(n log n)
x3x2 x1 x5 x4
(xi,√ xi)
Untere Schranke!
• Sortieren reduzieren auf k¨urzesten Weg berechnen!
• x1, x2, . . . , xn in O(n) auf polygonale Szene
• Ω(n log n)
x3x2 x1 x5 x4
(xi,√ xi)
Untere Schranke!
• Sortieren reduzieren auf k¨urzesten Weg berechnen!
• x1, x2, . . . , xn in O(n) auf polygonale Szene
• Ω(n log n)
x3x2 x1 x5 x4
(xi,√ xi)
s
Untere Schranke!
• Sortieren reduzieren auf k¨urzesten Weg berechnen!
• x1, x2, . . . , xn in O(n) auf polygonale Szene
• Ω(n log n)
x3x2 x1 x5 x4
(xi,√ xi)
s t
Untere Schranke!
• Sortieren reduzieren auf k¨urzesten Weg berechnen!
• x1, x2, . . . , xn in O(n) auf polygonale Szene
• Ω(n log n)
x3x2 x1 x5 x4
(xi,√ xi)
s t
L = (x3, x2, x1, x5, x4)
Untere Schranke!
• Sortieren reduzieren auf k¨urzesten Weg berechnen!
• x1, x2, . . . , xn in O(n) auf polygonale Szene
• Ω(n log n)
x3x2 x1 x5 x4
(xi,√ xi)
s t
L = (x3, x2, x1, x5, x4)
Andere Ans¨ atze
Andere Ans¨ atze
1. Sichtbarkeitsgraph, output-sensitiv: O(n log n + k)
Andere Ans¨ atze
1. Sichtbarkeitsgraph, output-sensitiv: O(n log n + k) 2. Shortest Path Map Verfahren
Andere Ans¨ atze
1. Sichtbarkeitsgraph, output-sensitiv: O(n log n + k) 2. Shortest Path Map Verfahren
• Locus approach:
Andere Ans¨ atze
1. Sichtbarkeitsgraph, output-sensitiv: O(n log n + k) 2. Shortest Path Map Verfahren
• Locus approach: Klassen gleicher Antwort!
Andere Ans¨ atze
1. Sichtbarkeitsgraph, output-sensitiv: O(n log n + k) 2. Shortest Path Map Verfahren
• Locus approach: Klassen gleicher Antwort!
• Fester Startpunkt s
Andere Ans¨ atze
1. Sichtbarkeitsgraph, output-sensitiv: O(n log n + k) 2. Shortest Path Map Verfahren
• Locus approach: Klassen gleicher Antwort!
• Fester Startpunkt s
• Ebene einteilen: Zellen kombinatorisch gleich k¨urzeste Wege
Andere Ans¨ atze
1. Sichtbarkeitsgraph, output-sensitiv: O(n log n + k) 2. Shortest Path Map Verfahren
• Locus approach: Klassen gleicher Antwort!
• Fester Startpunkt s
• Ebene einteilen: Zellen kombinatorisch gleich k¨urzeste Wege
• Zelle ist Klasse mit gleicher Antwort
Shortest Path Map Theorem 1.9
Shortest Path Map Theorem 1.9
• Bisektoren: Hyperbelst¨ucke, Geraden
Shortest Path Map Theorem 1.9
• Bisektoren: Hyperbelst¨ucke, Geraden
• Berechnung: Continous Dijkstra,
Shortest Path Map Theorem 1.9
• Bisektoren: Hyperbelst¨ucke, Geraden
• Berechnung: Continous Dijkstra, Simultan wachsende Kreise
Shortest Path Map Theorem 1.9
• Bisektoren: Hyperbelst¨ucke, Geraden
• Berechnung: Continous Dijkstra, Simultan wachsende Kreise
• Laufzeit: Ber. O(n log n),
Shortest Path Map Theorem 1.9
• Bisektoren: Hyperbelst¨ucke, Geraden
• Berechnung: Continous Dijkstra, Simultan wachsende Kreise
• Laufzeit: Ber. O(n log n), Query O(log n)/O(log n + k)
Shortest Path Map Theorem 1.9
• Bisektoren: Hyperbelst¨ucke, Geraden
• Berechnung: Continous Dijkstra, Simultan wachsende Kreise
• Laufzeit: Ber. O(n log n), Query O(log n)/O(log n + k)
s
Shortest Path Map Theorem 1.9
• Bisektoren: Hyperbelst¨ucke, Geraden
• Berechnung: Continous Dijkstra, Simultan wachsende Kreise
• Laufzeit: Ber. O(n log n), Query O(log n)/O(log n + k)
s
Shortest Path Map Theorem 1.9
• Bisektoren: Hyperbelst¨ucke, Geraden
• Berechnung: Continous Dijkstra, Simultan wachsende Kreise
• Laufzeit: Ber. O(n log n), Query O(log n)/O(log n + k)
s t1
Shortest Path Map Theorem 1.9
• Bisektoren: Hyperbelst¨ucke, Geraden
• Berechnung: Continous Dijkstra, Simultan wachsende Kreise
• Laufzeit: Ber. O(n log n), Query O(log n)/O(log n + k)
s t2
Shortest Path Map Theorem 1.9
• Bisektoren: Hyperbelst¨ucke, Geraden
• Berechnung: Continous Dijkstra, Simultan wachsende Kreise
• Laufzeit: Ber. O(n log n), Query O(log n)/O(log n + k)
t3 s
Shortest Path Map Theorem 1.9
• Bisektoren: Hyperbelst¨ucke, Geraden
• Berechnung: Continous Dijkstra, Simultan wachsende Kreise
• Laufzeit: Ber. O(n log n), Query O(log n)/O(log n + k)
s
t4
Shortest Path Map Theorem 1.9
• Bisektoren: Hyperbelst¨ucke, Geraden
• Berechnung: Continous Dijkstra, Simultan wachsende Kreise
• Laufzeit: Ber. O(n log n), Query O(log n)/O(log n + k)
s
t5
Shortest Path in einfachen Polygonen
Shortest Path in einfachen Polygonen
• Einfaches Polygon P,
Shortest Path in einfachen Polygonen
• Einfaches Polygon P, DS: Seq. Knoten/Kanten, CCW-order
p[1]
p[2]
p[0]
Shortest Path in einfachen Polygonen
• Einfaches Polygon P, DS: Seq. Knoten/Kanten, CCW-order
• Start A
p[1]
p[2]
p[0] A
Shortest Path in einfachen Polygonen
• Einfaches Polygon P, DS: Seq. Knoten/Kanten, CCW-order
• Start A und Ziel B
p[1]
p[2]
p[0] A
B
Shortest Path in einfachen Polygonen
• Einfaches Polygon P, DS: Seq. Knoten/Kanten, CCW-order
• Start A und Ziel B
• Berechne k¨urzesten Weg von A nach B innerhalb P
p[1]
p[2]
p[0] A
B
Shortest Path in einfachen Polygonen
• Einfaches Polygon P, DS: Seq. Knoten/Kanten, CCW-order
• Start A und Ziel B
• Berechne k¨urzesten Weg von A nach B innerhalb P
• Polygonale Kette mit Knoten aus P
p[1]
p[2]
p[0] A
B
Shortest Path in einfachen Polygonen
• Einfaches Polygon P, DS: Seq. Knoten/Kanten, CCW-order
• Start A und Ziel B
• Berechne k¨urzesten Weg von A nach B innerhalb P
• Polygonale Kette mit Knoten aus P/L¨ange des Pfades
p[1]
p[2]
p[0] A
B
Length: 42
Shortest Path in einfachen Polygonen
• Einfaches Polygon P, DS: Seq. Knoten/Kanten, CCW-order
• Start A und Ziel B
• Berechne k¨urzesten Weg von A nach B innerhalb P
• Polygonale Kette mit Knoten aus P/L¨ange des Pfades
• Algorithmus: Ω(n), |P| = n
p[1]
p[2]
p[0] A
B
Length: 42
Einfache, effiziente L¨ osung (Lee/Preparata)
Einfache, effiziente L¨ osung (Lee/Preparata)
A B
Einfache, effiziente L¨ osung (Lee/Preparata)
• Triangulation von P: Graph T, DS: DCEL, Adjacency list
A B
Einfache, effiziente L¨ osung (Lee/Preparata)
• Triangulation von P: Graph T, DS: DCEL, Adjacency list
• Dualer Graph: D(T) (Tree),
A B
Einfache, effiziente L¨ osung (Lee/Preparata)
• Triangulation von P: Graph T, DS: DCEL, Adjacency list
• Dualer Graph: D(T) (Tree), Depth First Search (DFS) on D(T)
A B
Einfache, effiziente L¨ osung (Lee/Preparata)
• Triangulation von P: Graph T, DS: DCEL, Adjacency list
• Dualer Graph: D(T) (Tree), Depth First Search (DFS) on D(T)
• Subpolygon P 0, Kette von Dreiecken/Diagonalen
A B
A B
Einfache, effiziente L¨ osung (Lee/Preparata)
• Triangulation von P: Graph T, DS: DCEL, Adjacency list
• Dualer Graph: D(T) (Tree), Depth First Search (DFS) on D(T)
• Subpolygon P 0, Kette von Dreiecken/Diagonalen
A B
Shortest Path in P
0Shortest Path in P
0A B
Shortest Path in P
0• Kette von of Dreiecken/Diagonalen (Data structure)
A B
Shortest Path in P
0• Kette von of Dreiecken/Diagonalen (Data structure)
• Induktiv: Shortest paths zu den Endpunkten der Diagonalen
A B
Shortest Path in P
0• Kette von of Dreiecken/Diagonalen (Data structure)
• Induktiv: Shortest paths zu den Endpunkten der Diagonalen
• Ind. Anf,
r1
l1
d1
A B
Shortest Path in P
0• Kette von of Dreiecken/Diagonalen (Data structure)
• Induktiv: Shortest paths zu den Endpunkten der Diagonalen
• Ind. Anf, Ind. Schritt,
d10 l10
A B
Shortest Path in P
0• Kette von of Dreiecken/Diagonalen (Data structure)
• Induktiv: Shortest paths zu den Endpunkten der Diagonalen
• Ind. Anf, Ind. Schritt,
d11 l11
r11
A B
Shortest Path in P
0• Kette von of Dreiecken/Diagonalen (Data structure)
• Induktiv: Shortest paths zu den Endpunkten der Diagonalen
• Ind. Anf, Ind. Schritt, Letzte Diagonale⇒ Ergebnis,
d16
A B
Shortest Path in P
0• Kette von of Dreiecken/Diagonalen (Data structure)
• Induktiv: Shortest paths zu den Endpunkten der Diagonalen
• Ind. Anf, Ind. Schritt, Letzte Diagonale⇒ Ergebnis, Laufzeit?
d16
A B
Zusammenfassung: Alg. 1.4
Zusammenfassung: Alg. 1.4
• Triangulation von P:
Zusammenfassung: Alg. 1.4
• Triangulation von P: O(n) Zeit und Platz
Zusammenfassung: Alg. 1.4
• Triangulation von P: O(n) Zeit und Platz
• Dualer Graph der Triangulation:
Zusammenfassung: Alg. 1.4
• Triangulation von P: O(n) Zeit und Platz
• Dualer Graph der Triangulation: O(n) Zeit und Platz
Zusammenfassung: Alg. 1.4
• Triangulation von P: O(n) Zeit und Platz
• Dualer Graph der Triangulation: O(n) Zeit und Platz
• DFS auf Dualen Graphen:
Zusammenfassung: Alg. 1.4
• Triangulation von P: O(n) Zeit und Platz
• Dualer Graph der Triangulation: O(n) Zeit und Platz
• DFS auf Dualen Graphen: O(n) Zeit
Zusammenfassung: Alg. 1.4
• Triangulation von P: O(n) Zeit und Platz
• Dualer Graph der Triangulation: O(n) Zeit und Platz
• DFS auf Dualen Graphen: O(n) Zeit
• Berechne P0:
Zusammenfassung: Alg. 1.4
• Triangulation von P: O(n) Zeit und Platz
• Dualer Graph der Triangulation: O(n) Zeit und Platz
• DFS auf Dualen Graphen: O(n) Zeit
• Berechne P0: O(n) Zeit und Platz
Zusammenfassung: Alg. 1.4
• Triangulation von P: O(n) Zeit und Platz
• Dualer Graph der Triangulation: O(n) Zeit und Platz
• DFS auf Dualen Graphen: O(n) Zeit
• Berechne P0: O(n) Zeit und Platz
• Berechne Shortest Path zu End-Diagonale, induktiv:
Zusammenfassung: Alg. 1.4
• Triangulation von P: O(n) Zeit und Platz
• Dualer Graph der Triangulation: O(n) Zeit und Platz
• DFS auf Dualen Graphen: O(n) Zeit
• Berechne P0: O(n) Zeit und Platz
• Berechne Shortest Path zu End-Diagonale, induktiv: O(n)??
Zusammenfassung: Alg. 1.4
• Triangulation von P: O(n) Zeit und Platz
• Dualer Graph der Triangulation: O(n) Zeit und Platz
• DFS auf Dualen Graphen: O(n) Zeit
• Berechne P0: O(n) Zeit und Platz
• Berechne Shortest Path zu End-Diagonale, induktiv: O(n)??
• Shortest Path von A nach B innerhalb P in O(n) Zeit und Platz!
Zusammenfassung: Alg. 1.4
• Triangulation von P: O(n) Zeit und Platz
• Dualer Graph der Triangulation: O(n) Zeit und Platz
• DFS auf Dualen Graphen: O(n) Zeit
• Berechne P0: O(n) Zeit und Platz
• Berechne Shortest Path zu End-Diagonale, induktiv: O(n)??
• Shortest Path von A nach B innerhalb P in O(n) Zeit und Platz!
optimal!!
Zusammenfassung: Alg. 1.4
• Triangulation von P: O(n) Zeit und Platz
• Dualer Graph der Triangulation: O(n) Zeit und Platz
• DFS auf Dualen Graphen: O(n) Zeit
• Berechne P0: O(n) Zeit und Platz
• Berechne Shortest Path zu End-Diagonale, induktiv: O(n)??
• Shortest Path von A nach B innerhalb P in O(n) Zeit und Platz!
optimal!!
• Theorem 1.11
Verbleibt: Indukiver Schritt!
Verbleibt: Indukiver Schritt!
• Trichter Situation! DS: Zwei Ketten/Shortest Path!
r[2]
l[4]
l[5]
r[4]
s
r[3]
vr
l[1]
di
A l[3]
l[2]
di+1
Verbleibt: Indukiver Schritt!
• Trichter Situation! DS: Zwei Ketten/Shortest Path!
• N¨achste Diagonale! Tangententest!
r[2]
l[4]
l[5]
r[4]
s
r[3]
vr
l[1]
di
A l[3]
l[2]
di+1
Verbleibt: Indukiver Schritt!
• Trichter Situation! DS: Zwei Ketten/Shortest Path!
• N¨achste Diagonale! Tangententest!
r[2]
l[4]
l[5]
r[4]
s
r[3]
vr
l[1]
di
A l[3]
l[2]
di+1
Verbleibt: Indukiver Schritt!
• Trichter Situation! DS: Zwei Ketten/Shortest Path!
• N¨achste Diagonale! Tangententest!
r[2]
l[4]
l[5]
r[4]
s
r[3]
vr
l[1]
di
A l[3]
l[2]
di+1
Verbleibt: Indukiver Schritt!
• Trichter Situation! DS: Zwei Ketten/Shortest Path!
• N¨achste Diagonale! Tangententest!
r[2]
l[4]
l[5]
r[4]
s
r[3]
vr
l[1]
di
A l[3]
l[2]
di+1
Verbleibt: Indukiver Schritt!
• Trichter Situation! DS: Zwei Ketten/Shortest Path!
• N¨achste Diagonale! Tangententest!
r[2]
l[4]
l[5]
r[4]
s
r[3]
vr
l[1]
di
A l[3]
l[2]
di+1
Verbleibt: Indukiver Schritt!
• Trichter Situation! DS: Zwei Ketten/Shortest Path!
• N¨achste Diagonale! Tangententest!
r[2]
l[4]
l[5]
r[4]
s
r[3]
vr
l[1]
di
A l[3]
l[2]
di+1
Verbleibt: Indukiver Schritt!
• Trichter Situation! DS: Zwei Ketten/Shortest Path!
• N¨achste Diagonale! Tangententest!
r[2]
l[4]
l[5]
r[4]
s
r[3]
vr
l[1]
di
A l[3]
l[2]
di+1
Verbleibt: Indukiver Schritt!
• Trichter Situation! DS: Zwei Ketten/Shortest Path!
• N¨achste Diagonale! Tangententest!
r[2]
l[4]
l[5]
r[4]
s
r[3]
vr
l[1]
di
A l[3]
l[2]
di+1
Verbleibt: Indukiver Schritt!
• Trichter Situation! DS: Zwei Ketten/Shortest Path!
• N¨achste Diagonale! Tangententest!
r[2]
l[4]
l[5]
r[4]
s
r[3]
vr
l[1]
di
A l[3]
l[2]
di+1
Verbleibt: Indukiver Schritt!
• Trichter Situation! DS: Zwei Ketten/Shortest Path!
• N¨achste Diagonale! Tangententest!
r[2]
l[4]
l[5]
r[4]
s
r[3]
vr
l[1]
di
A l[3]
l[2]
di+1
Verbleibt: Indukiver Schritt!
• Trichter Situation! DS: Zwei Ketten/Shortest Path!
• N¨achste Diagonale! Tangententest!
r[2]
l[4]
l[5]
r[4]
s
r[3]
vr
l[1]
di
A l[3]
l[2]
di+1
Verbleibt: Indukiver Schritt!
• Trichter Situation! DS: Zwei Ketten/Shortest Path!
• N¨achste Diagonale! Tangententest!
r[2]
l[4]
l[5]
r[4]
s
r[3]
vr
l[1]
di
A l[3]
l[2]
di+1
Verbleibt: Indukiver Schritt!
• Trichter Situation! DS: Zwei Ketten/Shortest Path!
• N¨achste Diagonale! Tangententest!
r[2]
l[4]
l[5]
r[4]
s
r[3]
vr
l[1]
di
A l[3]
l[2]
di+1
Verbleibt: Indukiver Schritt!
• Trichter Situation! DS: Zwei Ketten/Shortest Path!
• N¨achste Diagonale! Tangententest! N¨achster Trichter!
r[1]
s
vr
l[1]
di
A l[3]
l[2]
di+1
Verbleibt: Indukiver Schritt!
• Trichter Situation! DS: Zwei Ketten/Shortest Path!
• N¨achste Diagonale! Tangententest! N¨achster Trichter!
• Insgesamt, nicht mehr O(n) Tests!!
r[1]
s
vr
l[1]
di
A l[3]
l[2]
di+1
Rand von P
Zusammenfassung: Lee/Preparata: Shortest Path innerhalb P
• Triangulation von P: O(n) Zeit und Platz
• Dualer Graph der Triangulation: O(n) Zeit und Platz
• DFS im Dualen Graphen: O(n) Zeit
• Berechnung P0: O(n) Zeit und Platz
• Berechnung Shortest Path f¨ur End-Diagonale, induktiv: O(n)
• Shortest Path von A nach B in P in O(n) Zeit und Platz
• Optimal f¨ur einzelne Anfrage!!
• Theorem 1.11