Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen
Inhalt Closest Pair Divide & Conquer Bereichssuche Gitterverfahren k-d-tree Sweep-Line-Algorithmen Voronoi-Diagramme Fortune s Algorithmus Koordinatenkompression Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 2
Inhalt Closest Pair Divide & Conquer Bereichssuche Gitterverfahren k-d-tree Sweep-Line-Algorithmen Voronoi-Diagramme Fortune s Algorithmus Koordinatenkompression Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 3
Closest Pair In gegebener Menge von Punkten die beiden finden mit dem geringsten Abstand zueinander Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 4
Closest Pair Lösungsansätze Naiver Ansatz: BruteForce Für jeden Punkt Abstand zu den anderen berechnen O(n²) Alternative: Divide & Conquer O(n log n) Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 5
Closest Pair Divide & Conquer Vorgehensweise: Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 6
Closest Pair Divide & Conquer Vorgehensweise: Punktemenge aufteilen Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 7
Closest Pair Divide & Conquer Vorgehensweise: Punktemenge aufteilen Closest Pair für beide Seiten bestimmen (Rekursiv) Problem: Gesuchte Punkte liegen nicht auf der gleichen Seite Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 8
Closest Pair Divide & Conquer Vorgehensweise: Punktemenge aufteilen Closest Pair für beide Seiten bestimmen (Rekursiv) Problem: Gesuchte Punkte liegen nicht auf der gleichen Seite Lösung: Vergleich der Punkte deren maximaler Abstand zur Trennlinie kleiner als dright ist (max. 3 Vergleiche pro Punkt) Laufzeit: O(n log n) Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 9
Inhalt Closest Pair Divide & Conquer Bereichssuche Gitterverfahren k-d-tree Sweep-Line-Algorithmen Voronoi-Diagramme Fortune s Algorithmus Koordinatenkompression Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 10
Bereichssuche Gegeben: Menge von Punkten P Bereich/Intervall B Gesucht: Alle Punkte aus P die in B liegen Beispiele: Datenbankabfragen Geographische Informationssysteme Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 11
Bereichssuche - Lösungansätze Naiver Lösungsansatz: Jeden Punkt einzeln testen O(n) Alternative: Gitterverfahren Verwendung von k-d-trees Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 12
Bereichssuche - Gitterverfahren Idee Ebene wird mithilfe eines Gitters aufgeteilt Punkte werden in die jeweiligen Flächen einsortiert Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 13
Bereichssuche - Gitterverfahren Query: Es müssen nur die relevanten Flächen überprüft werden Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 14
Bereichssuche - Gitterverfahren Vorteile Leicht zu implementieren Verbesserung der Laufzeit Nachteile Gittergröße muss vorher bekannt sein zu klein: viele leere Felder zu groß: viele Punkte pro Feld Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 15
k-d-tree Definition k-d-tree ist ein k-dimensionaler binärer Suchbaum mit der Besonderheit das in jeder Tiefe nach einer anderen Dimension aufgeteilt wird Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 16
k-d-tree - Konstruktion P := Punktemenge d := Aktuelle Höhe im Baum BUILDTREE(P, d) { IF(P enthält nur einen Punkt) Return Blatt, das diesen Punkt enthält ELSE IF (d ist eine gerade Zahl) Splitte P via vertikalen Median in P1 (links) und P2 (rechts) auf ELSE Splitte P via horizontalen Median in P1 (oben) und P2 (unten) auf } vleft = BUILDTREE(P1, d+1) vright = BUILDTREE(P2, d+1) Erzeuge Knoten v mit den Kindern vleft und vright Return v Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 17
k-d-tree Beispiel Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 18
k-d-tree Beispiel Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 19
k-d-tree Beispiel Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 20
k-d-tree Beispiel - Bereichssuche v := Startknoten R := Bereich indem gesucht wird d := Aktuelle Höhe im Baum List RANGEQUERY(v, R, d) { IF(v == NULL) return leere Liste liste = leere Liste IF(v ist im Bereich R) Füge v zu liste hinzu IF(v ist größer als linker/unterer Rand von R) // abhängig von d vleft ist linkes Kind von v Füge RANGEQUERY(vLeft, R, d+1) zu liste hinzu IF(v ist kleiner gleich rechter/oberer Rand von R) // abhängig von d vright ist rechtes Kind von v Füge RANGEQUERY(vRight, R, d+1) zu liste hinzu return liste } Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 21
k-d-tree Beispiel - Bereichssuche Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 22
k-d-tree Vorteile & Nachteile Vorteile Laufzeit: Aufbau: O(n log n) Anfrage: O(log n + x) Nachteile Aufwendig zu implementieren Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 23
Inhalt Closest Pair Divide & Conquer Bereichssuche Gitterverfahren k-d-tree Sweep-Line-Algorithmen Voronoi-Diagramme Fortune s Algorithmus Koordinatenkompression Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 24
Sweep-Line-Algorithmen Ziel: k-dimensionales statisches Problem in k-1-dimensionales dynamisches Problem umwandeln Idee: Eine Sweep-Line die diskret über die sortierten Punkte wandert und sie verarbeitet Beispiel: HEISENBERG aus dem Online-Judge Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 25
Sweep-Line-Algorithmen - Heisenberg Sweep-Line trifft Streckenbeginn: Füge Strecke zu S hinzu Sweep-Line trifft auf Streckenende: Entferne Strecke aus S Sweep-Line trifft auf vertikale Strecke: Berechne Schnittpunkte mit Strecken aus S S{1} Schnitte: 0 Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 26
Sweep-Line-Algorithmen - Heisenberg Sweep-Line trifft Streckenbeginn: Füge Strecke zu S hinzu Sweep-Line trifft auf Streckenende: Entferne Strecke aus S Sweep-Line trifft auf vertikale Strecke: Berechne Schnittpunkte mit Strecken aus S S{1,2} Schnitte: 0 Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 27
Sweep-Line-Algorithmen - Heisenberg Sweep-Line trifft Streckenbeginn: Füge Strecke zu S hinzu Sweep-Line trifft auf Streckenende: Entferne Strecke aus S Sweep-Line trifft auf vertikale Strecke: Berechne Schnittpunkte mit Strecken aus S S{1,2} Schnitte: 1 Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 28
Sweep-Line-Algorithmen - Heisenberg Sweep-Line trifft Streckenbeginn: Füge Strecke zu S hinzu Sweep-Line trifft auf Streckenende: Entferne Strecke aus S Sweep-Line trifft auf vertikale Strecke: Berechne Schnittpunkte mit Strecken aus S S{1} Schnitte: 3 Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 29
Sweep-Line-Algorithmen - Heisenberg Sweep-Line trifft Streckenbeginn: Füge Strecke zu S hinzu Sweep-Line trifft auf Streckenende: Entferne Strecke aus S Sweep-Line trifft auf vertikale Strecke: Berechne Schnittpunkte mit Strecken aus S S{} Schnitte: 4 Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 30
Sweep-Line-Algorithmen - Heisenberg Sweep-Line trifft Streckenbeginn: Füge Strecke zu S hinzu Sweep-Line trifft auf Streckenende: Entferne Strecke aus S Sweep-Line trifft auf vertikale Strecke: Berechne Schnittpunkte mit Strecken aus S Laufzeit: O(n log n) S{} Schnitte: 4 Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 31
Inhalt Closest Pair Divide & Conquer Bereichssuche Gitterverfahren k-d-tree Sweep-Line-Algorithmen Voronoi-Diagramme Fortune s Algorithmus Koordinatenkompression Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 32
Topcoder Watchtower Gegeben: Menge an Wachtürmen mit dazugehörigen Koordinaten Gesucht: Größe der Fläche für die jeder Wachturm verantwortlich ist Fläche der Polygone mit den Punkten die dem jeweiligen Wachturm am nächsten sind Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 33
Topcoder Watchtower - Lösungsansatz Naiver Lösungsansatz: Berechne für jeden Punkt Geraden Schnittpunkte der Geraden bestimmen O(n⁴) Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 34
Voronoi-Diagramm - Definition Das Voronoi-Diagramm für eine Punktmenge P ist die Einteilung der Ebene in Gebiete gleicher nächster Nachbarn Für den Punkt p ϵ P ist die Voronoi Region V(p) die Menge aller Punkte die näher zu p sind als zu irgend einem andern Punkt aus der Menge P Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 35
Voronoi-Diagramm Fortune's Algorithmus Beach-Line: Besteht aus zusammenhängenden Parabeln Punkte auf der Beach-Line haben den gleichen Abstand zur Sweep-Line, wie zu ihrem nähesten Punkt Wird durch binären Suchbaum realisiert Sweep-Line: diskret wandernde Linie Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 36
Voronoi-Diagramm Fortune s Algorithmus Site-Event: Sweep-Line passiert nächsten Punkt Knoten zu binärem Suchbaum hinzugefügt Circle-Event: neuer Punkt für das fertige Diagramm bestimmbar Punkt wird aus Suchbaum entfernt Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 37
Voronoi-Diagramm Fortune's Algorithmus P := Menge der gegebenen Punkte K := doppelt verkettete Liste der Kanten Q := Prioritätswarteschlange mit Events (sortiert nach y-koordinate) B := Binärer Suchbaum für Beach-Line FOR ALL p aus P { Erstelle ein Site-Event für p und füge es zu Q hinzu; } WHILE(!q.empty) { e = Das erste Element von der Warteschlange; IF(e ist Site-Event) { Erstelle zu e zugehöriges Circle-Event Füge dieses Event zu B hinzu if(event schneidet anderes Event) { Entferne beide Events aus Q Berechne neues Circle-Event und speichere es in Q } } ELSE { Entferne alle Nachbarn von e aus Q Berechne daraus die neue Kante und speichere sie in K Aktualisiere die Circle-Events der neuen Nachbarn in Q } } Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 38
Voronoi-Diagramm Fortune's Algorithmus Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 39
Voronoi-Diagramm Fortune's Algorithmus Laufzeit O(n log n) Speicher O(n) Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 40
Inhalt Closest Pair Divide & Conquer Bereichssuche Gitterverfahren k-d-tree Sweep-Line-Algorithmen Voronoi-Diagramme Fortune s Algorithmus Koordinatenkompression Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 41
Koordinatenkompression Gegeben: Großer Raum mit wenig Objekten Ziel: Lücken entfernen Beispiel: SafeJourney Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 42
Topcoder - SafeJourney Gegeben: Stadtplan mit horizontalen und vertikalen Straßen Gesucht: Minimale Anzahl an zu überquerenden Straßen um von Punkt A zu einem Punkt B zu gelangen Problem: Sehr große Fläche der Ebene Nur wenige relevante Punkte Lösung: Koordinatenkompression Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 43
Koordinatenkompression Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 44
Koordinatenkompression Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 45
Koordinatenkompression Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 46
Koordinatenkompression Danach: Dijkstra Breitensuche Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 47
Fragen?? Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 48
Quellen Hallo Welt -Vorträge zu Geometrie 2 von 2010, 2012, 2013 http://www.cs.umd.edu/~mount/754/lects/754lects.pdf Closest Pair https://www.cs.ucsb.edu/~suri/cs235/closestpair.pdf https://en.wikipedia.org/wiki/closest_pair_of_points_proble m Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 49
Quellen Bereichssuche, k-d-tree http://ls11-www.cs.unidortmund.de/people/gutweng/ad08/vo23_26_quadtre esws08.pdf http://algo.informatik.unifreiburg.de/bibliothek/books/ad-buch/k7/slides/05.pdf https://www.cise.ufl.edu/class/cot5520fa09/cg_rangek Dtrees.pdf Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 50
Quellen Voronoi-Diagramme http://blog.ivank.net/fortunes-algorithm-andimplementation.html http://www.ams.org/samplings/feature-column/fcarcvoronoi http://community.topcoder.com/tc?module=static&d1=m atch_editorials&d2=sr176 http://mapviewer.skynet.ie/java/algorithm.html http://community.topcoder.com/i/srm/srm176_2.gif Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 51
Quellen Koordinatenkompression http://www.quora.com/what-is-coordinate-compression http://community.topcoder.com/stat?c=problem_statement &pm=5918&rd=8074 https://community.topcoder.com/tc?module=static&d1=mat ch_editorials&d2=srm277 Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 52