Hallo Welt für Fortgeschrittene Geometrie II Tiago Joao Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen
Inhalt Koordinatenkompression Beispiel: SafeJourney Typische compress-funktion Bereichssuche Gitterverfahren k-d-baum Nearest Neighbour Closest Pair Divide and Conquer k-d-baum Voronoi-Diagramme Fortune's Algorithmus Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 2
Koordinatenkompression Wann: Großer Koordinatenraum Wenige Koordinaten Wozu: Raum verkleinern, d.h. unnötige Bereiche weglassen Algorithmus soll schneller laufen Vorsicht: wichtige Informationen dürfen dadurch nicht verloren gehen Ergebnis darf nicht verfälscht werden Meist bei Problem mit Flächenberechnung nutzbar Oft Vorstufe zum Flut-Algorithmus Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 3
Problem SafeJourney Eingabe: Stadt-Layout mit Straßen Anfangspunkt A und Zielpunkt Z Lösung: Finde einen Weg zwischen A und Z, wobei so wenig Straßen wie möglich überquert werden Ausgabe: Minimale Anzahl an zu überquerenden Straßen Genaue Problembeschreibung: [2] Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 4
Safejourney Beispiel A Z Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 5
Lösung: Flut-Algorithmus Die Kompression ist nur ein Vorschritt um das Problem hinterher effizienter zu lösen Man flutet alle erreichbaren Bereiche ohne eine Straße zu überqueren Ist der Punkt Z darin, so ist die Antwort 0. Nun flutet man alle angrenzenden Koordinaten Ist der Punkt Z darin, so ist die Antwort 1. Das wird solange wiederholt bis Z gefunden wird Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 6
Safejourney Beispiel A Z Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 7
Interessante Punkte: Die Straßen Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 8
Interessante Punkte: A und Z Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 9
Unnötige Punkte entfernt Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 10
Kompression Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 11
Lösung: Flut-Algorithmus Blau = 0 Rot = 1 Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 12
Compress-Funktion Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 13
Compress-Funktion Werte einfügen Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 14
Compress-Funktion Werte einfügen sortieren Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 15
Compress-Funktion Werte einfügen sortieren Duplikate löschen Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 16
Compress-Funktion Werte einfügen sortieren Duplikate löschen Kompression Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 17
Bereichssuche Gegeben: Menge von Punkten in einem k-dimensionalem Raum Bereich R k R k Gesucht: Alle Punkte Beispiele: 1D: Welche Zahlen liegen im Intervall [i, j]? 2D: Welche dieser Städte liegt in einem 20 km Umkreis? 3D: Welche Flugzeuge muss ich warnen, damit sie um dieses einen 1km Abstand halten? Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 18
Bereichssuche Naive Lösung: Über alle iterieren und überprüfen Laufzeit bei n Punkten: O n Mit ein bisschen Voranalyse müsste es doch schneller gehen Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 19
Gitterverfahren Idee: R k schon zu Beginn in Unterräume aufteilen Gegebene Punkte in diese einsortieren Nur infrage kommende Räume untersuchen Bsp: 3D: vorzugsweise in Würfel 2D: in Quadrate Dadurch entsteht ein Gitter (2D-Array aus Listen) Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 20
Gitterverfahren 2D Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 21
Gitterverfahren 2D Bereich fragwürdig Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 22
Gitterverfahren Pro: Contra: Einfach zu implementieren Gittergröße d sollte vorher Wahrscheinlich schneller bekannt sein!! als naiver Ansatz Sonst: Viele leere Quadrate d<< werden überprüft Zu viele Punkte werden d>> überprüft Das führt zu schlechtem Laufzeitverhalten Laufzeit: nicht bestimmbar Worst-case: Best-case: O n O x, x N n Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 23
k-d-baum k dimensionaler binärer Suchbaum Idee: In jeder Ebene des Baums sortiert man nach einer anderen Dimension, und beginnt dann wieder von vorne in der selben Reihenfolge. Bsp. 2D: x, y, x, y,... oder y, x, y, x, Bsp. 3D: x, y, z, x, y, z, Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 24
k-d-baum O n k log n Aufbau des Baums in: O n log 2 n Bei einem Sortieralgorithmus von Median, wie z.b. Heapsort Besser wäre Quickselect mit Ohne Median droht Entartung! O n O n log n für den Speicherplatz für den Baum: O n 1 1 k a O k n Bereichsanfrage: Wobei die Antwortgröße bezeichne a Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 25
k-d-baum 1D: ganz normaler Binärbaum kd: analog zu 2D Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 26
2-d-Baum Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 27
2-d-Baum Annahme: keine zwei Punkte haben die selbe Koordinate! Median wäre besser! Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 28
2-d-Baum Was passiert dann mit diesem Beispiel: Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 29
2-d-Baum 1-d-Baum 1-d-Baum überprüfen 1-d-Baum Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 30
2-d-Baum Beispiel für Bereichssuche x in [1, 2] y in [2, 3] Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 31
2-d-Baum Beispiel für Bereichssuche unnötig unnötig unnötig x in [1, 2] y in [2, 3] testen Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 32
Nearest Neighbour in 2D Nächster-Nachbar-Problem Ermittle aus n Punkten, den Punkt mit dem kleinsten Abstand zum Punkt x Naiv: Alle überprüfen O n Mit Hilfe eine 2-d-Baums: O log n Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 33
Nearest Neighbour in 2D Erster Schritt Radius zur Wurzel ist das aktuelle Minimum Nur dort absteigen, wo das Minimum größer ist als der Abstand zur Bounding Box Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 34
Nearest Neighbour - Beispiel (3, 5) Abstand = 1 Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 35
Nearest Neighbour - Beispiel Abstand = 2 (3, 5) Abstand > 1 Abstand = 1 Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 36
Nearest Neighbour - Beispiel Abstand = 2 (3, 5) Abstand > 1 Nicht testen! Nicht testen! Abstand = 1 Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 37
Nearest Neighbour in 2D Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 38
Nearest Neighbour in 2D ungünstiger Fall Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 39
Closest Pair im 2D Auch MinimalPaar genannt Gegeben: n Punkte Gesucht: Die zwei Punkte, die den kürzesten (euklidischen) Abstand zueinander haben Naiver Ansatz: Jede Kombination von Punkten prüfen O n 2 Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 40
Closest Pair im 2D mit Divide and Conquer Divide: Teile die Punktmenge in zwei fast gleich große Mengen Conquer: Finde rekursiv in jeder Menge das Closest Pair Ist das korrekt? Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 41
Closest Pair im 2D mit Divide and Conquer Divide: Teile die Punktmenge in zwei fast gleich große Mengen Conquer: Finde rekursiv in jeder Menge das Closest Pair Combine: Finde das Closest Pair mit jeweils einem Punkt aus beiden Mengen Return: Closest Pair aus den drei Ergebnissen Laufzeit: O n log n Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 42
Closest Pair im 2D mit Divide and Conquer Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 43
Closest Pair im 2D mit k-d-baum Berechne für jeden Knoten den minimalen Abstand zu allen anderen Knoten: Steige hier immer nur im k-d-tree ab, wenn der Abstand des Punktes zur Bounding Box des Unterbaums kleiner als der bisherige minimale Abstand ist. Man berechnet zu jedem Knoten den nächsten Nachbarn Man muss den Suchknoten explizit ausschließen Laufzeit: O n log n Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 44
Closest Pair im 2D mit k-d-baum Berechne für jeden Knoten den minimalen Abstand zu allen anderen Knoten: Steige hier immer nur im k-d-tree ab, wenn der Abstand des Punktes zur Bounding Box des Unterbaums kleiner als der bisherige minimale Abstand ist. Man berechnet zu jedem Knoten den nächsten Nachbarn Man muss den Suchknoten explizit ausschließen Laufzeit: O(n log(n)) Closest Pair im kd mit k-d-baum Laufzeit: O(n log(n)) Die Anzahl an Dimensionen ist unwichtig! Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 45
Voronoi-Diagramme Definition: Gegeben sei eine Menge Dann ist ein Voronoi-Bereich definiert als M ={P 1,..., P n } R 2 V P i = {Q R 2 d Q, P i d Q, P j, für j i} Gesamtheit der Voronoi-Bereiche ist das Voronoi-Diagramm Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 46
Voronoi-Diagramme Voronoi-Kante: Für jeden Punkt der Kante existiert ein Kreis, der genau zwei Punkte aus M schneidet Voronoi-Knoten: Es existiert ein Kreis der mind. drei Punkte aus M schneidet V(i) V-Knoten V-Kante Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 47
Voronoi-Diagramme Anwendungen: Problem Watchtower [8] Postamt- oder Feuerwehrproblem in Bestimmung des größten leeren Kreises Bestimmung aller nächsten Nachbarn in Sowie des Closest Pair O log n O n Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 48
Voronoi-Diagramm: Konstruktion Naiver Ansatz: Für jeden Punkt aus M Berechne die Geraden zu jedem anderen Punkt aus M Lass die Geraden sich schneiden O n 2 Wähle die richtigen Schnittpunkte O n 3 O n 4 O n Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 49
Voronoi-Diagramm: Konstruktion Naiver Ansatz: Für jeden Punkt aus M Berechne die Geraden zu jedem anderen Punkt aus M Lass die Geraden sich schneiden O n 2 Wähle die richtigen Schnittpunkte O n 3 O n 4 O n Divide and Conquer: O n log n Leider sehr schwer zu implementieren! Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 50
Voronoi-Diagramm: Konstruktion Fortune's Algorithmus: Laufzeit: Speicherplatz: Sweep-Line O n log n O n fertig beach-line sweep-line Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 51
Fortune P : Menge von Punkten VD : Doppelt-verlinkte Kantenliste : Binärer Suchbaum für Beach-Line (x-sortiert) Q : Prioritätswarteschlange mit zwei verschiedenen Events (y-sortiert) Site-Event: neuer Punkt aus M Es entsteht ein neuer Bogen in der Beach-Line Circle-Event: ein Bogen wird zu einem Punkt Es entsteht ein Voronoi-Knoten Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 52
Fortune Algorithmus: Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 53
Fortune Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 54
Fortune Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 55
Fragen? Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 56
Literatur [1] Problem Sculpture http://2008.nwerc.eu/problems/nwerc08-problemset.pdf [2] Problem SafeJourney, TopCoder Inc. http://community.topcoder.com/stat? c=problem_statement&pm=5918&rd=8074 http://community.topcoder.com/tc? module=static&d1=match_editorials&d2=srm277 [3] Hallo Welt! Folien 2010, 2012, 2013 Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 57
Literatur [4] Rolf Klein Algorithmische Geometrie Springer, Berlin; 2. Auflage [5] G. Aumann, K. Spitzmüller Computerorientierte Geometrie BI Wissenschaftsverlag, 1993 [6] Raymond Hill Javascript-Voronoi https://github.com/gorhill/javascript-voronoi Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 58
Literatur [7] Allan Odgaard, Benny Kjær Nielsen A visual implementation of Fortune's Voronoi algorithm http://www.diku.dk/hjemmesider/studerende/duff/fortune/ [8] Problem Watchtower, TopCoder Inc. http://community.topcoder.com/stat? c=problem_statement&pm=2014 Hallo Welt für Fortgeschritten Geometrie II Tiago Joao Folie 59