Kapitel 6: Algorithmische Geometrie Gliederung 1. 2. 3. 4. 5. 6. 6/2, Folie 1 Motivation / Grundlagen Sortierverfahren Elementare Datenstrukturen / Anwendungen Bäume / Graphen Hashing Algorithmische Geometrie © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 6: Algorithmische Geometrie Anwendungen des Sweep-Line-Paradigmas Zentrale Problemstellung bestimme alle Objekte in einer gegebenen Objektmenge S, die in einer bestimmten Beziehung zu einem Objekt q stehen bzw. die eine bestimmte Eigenschaft haben Beispiele • • Schnittproblem für Liniensegmente Inklusions- und Schnittproblem für Rechtecke ... betrachten nur den zweidimensionalen, iso-orientierten Fall, d.h. alle Liniensegmente und Linien verlaufen parallel zu den Koordinaten-Achsen 6/2, Folie 2 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 6: Algorithmische Geometrie Schnittproblem für Liniensegmenten Problemstellung a A B C b E D c F 6/2, Folie 3 gegeben: Liniensegmente parallel zur x- und y-Achse gesucht: alle Paare von Liniensegmenten, die sich gegenseitig „schneiden“ © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 6: Algorithmische Geometrie Schnittproblem für Liniensegmente ... Problemgröße n – Anzahl der Liniensegmente Problemstellung a A B C b E D c F gegeben: Liniensegmente parallel zur x- und y-Achse (/* blau bzw. rot */) gesucht: alle Paare von Liniensegmenten, die sich gegenseitig „schneiden“ Für jedes blaue Liniensegment X bezeichnet X.x.l die x-Koordinate des linken und X.x.r die x-Koordinate des rechten Endpunkts sowie X.y die y-Koordinate aller Punkte des Liniensegments. Für jedes rote Liniensegment Y bezeichnet Y.y.u die y-Koordinate des unteren und Y.y.o die y-Koordinate des oberen Endpunkts sowie Y.x die x-Koordinate aller Punkte des Liniensegments. 6/2, Folie 4 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 6: Algorithmische Geometrie Schnittproblem für Liniensegmente ... triviale Lösung a A B C b E D c F • • bestimme alle Paare (X,Y) blauer und roter Liniensegmente teste für jedes Paar (X,Y), ob sich X und Y gegenseitig „schneiden“ ... benötigt offenbar Zeit Ω(n2) 6/2, Folie 5 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 6: Algorithmische Geometrie Schnittproblem für Liniensegmente ... Anmerkung ... auch der „cleverste“ Algorithmus wird im „worst case“ die Zeit Ω(n2) benötigen, da es (n/2)2 viele Paare sich schneidender Liniensegmente geben kann ... wenn die Anzahl der Schnittpunkte nicht quadratisch in der Anzahl der Liniensegmente ist, kann ein „cleverer“ Algorithmus effizienter sein 6/2, Folie 6 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 6: Algorithmische Geometrie Schnittproblem für Liniensegmente ... alternativer Ansatz • • 6/2, Folie 7 laß eine vertikale Sweep-Linie (SL) von links nach rechts über die gegebene Menge von Liniensegmenten laufen verwalte eine Sweep-Status-Struktur (SSS) • diese soll alle blauen Liniensegmente enthalten, die aktuell von der SL aktuell geschnitten werden • die „Sich-Schneiden-Beziehung“ der blauen Liniensegmente in der SSS mit dem roten Liniensegment, das die SL gerade trifft, wird analysiert • die „gewonnenen“ Einsichten werden ausgegeben © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 6: Algorithmische Geometrie Schnittproblem für Liniensegmente ... relevante Aufgaben a A B C b E D c F (1) (2) (3) 6/2, Folie 8 die SL in „geeigneten Sprüngen“ über die Liniensegmente verschieben die SSS „sinnvoll“ verwalten (/* ... geeignete Datenstruktur */) „Einsichten“ über die Beziehung zwischen den blauen Liniensegmenten in der SSS und dem gerade „getroffenen“ roten Liniensegment ableiten und ausgeben © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 6: Algorithmische Geometrie Schnittproblem für Liniensegmente Aufgabe (1) a A B C D b E c F • • • • 6/2, Folie 9 je blaues Liniensegment müssen sich die x-Koordinate des linken und die x-Koordinate des rechten Endpunkts „gemerkt“ werden je rotes Liniensegment müssen sich die „einheitliche“ x-Koordinate aller Punkte „gemerkt“ werden diese Punkte werden in einer aufsteigend sortierten Liste L gespeichert die SL „besucht“ nacheinander die Elemente von L © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 6: Algorithmische Geometrie Schnittproblem für Liniensegmente Aufgabe (2) a A B C D b E c F • • • 6/2, Folie 10 die SL trifft auf einen linken Endpunkt X.x.l eines blauen Liniensegments X • das Liniensegment X wird in die SSS aufgenommen die SL trifft auf den rechten Endpunkt X.x.r eines blauen Liniensegments X • das Liniensegment X wird aus der SSS entfernt die SL trifft auf ein rotes Liniensegment • SSS nicht ändern, aber Aufgabe (3) in Angriff nehmen © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 6: Algorithmische Geometrie Schnittproblem für Liniensegmente Aufgabe (3) a A B C D b E c F • 6/2, Folie 11 die Sweep-Line trifft auf ein rotes Liniensegment • dann müssen alle blauen Liniensegmente in der SSS ausgegeben werden, die von diesem roten Liniensegment geschnitten werden © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 6: Algorithmische Geometrie Schnittproblem für Liniensegmente Anforderungen an die Datenstruktur • Verwaltung von blauen Liniensegmenten, wobei die y-Koordinate der blauen Liniensegmente die relevante Information ist • • • Einfügen eines blauen Liniensegments in die SSS Entfernen eines blauen Liniensegments aus der SSS zu einem roten Liniensegment Y, das die SL trifft, sind alle blauen Liniensegmente X in der SSS zu bestimmen, die von Y geschnitten werden Ein blaues Liniensegment X wird von einem roten Liniensegment Y geschnitten, wenn Y.y.u ≤ X.y ≤ Y.y.o gilt. 6/2, Folie 12 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 6: Algorithmische Geometrie Schnittproblem für Liniensegmente Eine Möglichkeit: 2-3-Bäume • • • 6/2, Folie 13 in den Blättern sind die blauen Liniensegmente gespeichert die blauen Liniensegmente sind den Blättern in aufsteigender Reihenfolge bzgl. ihrer y-Koordinate von links nach rechts zugewiesen die Blätter sind zusätzlich als doppelt verkettete Liste organisiert © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 6: Algorithmische Geometrie Schnittproblem für Liniensegmente Illustration a A B C A.y D b E c E.y F F.y A.y E.y C.y A.y ... bestimme das blaue Liniensegment X in der SSS mit der kleinsten y-Koordinate größer gleich Y.y.u ... bestimme das blaue Liniensegment X‘ in der SSS mit der größten y-Koordinate kleiner gleich Y.y.o ... gib alle blauen Liniensegmente aus, die in der Liste zwischen X und X‘ liegen 6/2, Folie 14 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen Kapitel 6: Algorithmische Geometrie Schnittproblem für Liniensegmente Laufzeitanalyse (/* worst case */) Aufgabe (1): insgesamt in O(n*log(n)) (/* Sortieren */) Aufgabe (2): jeweils in O(1) (/* Listenverwaltung */) jeweils in O(log(n)) (/* 2-3-Baum */) jeweils in O(log(n)) + O(k‘) (/* Ableiten + Ausgeben */) Aufgabe (3): ... also insgesamt in O(n*log(n)) + O(k) 6/2, Folie 15 © 2010 Prof. Steffen Lange - HDa/FbI - Datenstrukturen