Algorithmische Geometrie 7. Punktsuche

Ähnliche Dokumente
Algorithmische Geometrie 3. Schnitte von Liniensegmenten

Bereichsabfragen II. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie

Bereichsabfragen II. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie

Was bisher geschah. 1. Zerlegung in monotone Polygone 2. Triangulierung der monotonen Teilpolygone

Algorithmische Geometrie 7. Punktsuche (Teil 2)

Algorithmische Geometrie 1. Einführung

Algorithmische Geometrie 5. Triangulierung von Polygonen

Dualität + Quad-trees

Geometrische Algorithmen

Geradenarrangements und Dualität von Punkten und Geraden

Geradenarrangements und Dualität von Punkten und Geraden

Punktlokalisation 1. Trapez-Zerlegungen. 2. Eine Suchstruktur. 3. Randomisierter, inkrementeller Algorithmus zur Konstruktion der Trapez-Zerlegung

Exkurs: Datenstruktur Quad Tree

Punkt-in-Polygon-Suche Übersicht

Geometrische Algorithmen Punkt-in-Polygon-Suche. Lernmodul 7: Geo-Algorithmen und -Datenstrukturen - Punkt-in-Polygon-Suche

Punkt-in-Polygon-Suche Übersicht

Algorithmische Geometrie 4. Schnitte planarer Unterteilungen

Hallo Welt für Fortgeschrittene

Aufgabensammlung zur algorithmischen Geometrie

2.4. Triangulierung von Polygonen

Grundlagen zur Delaunay-Triangulierung und zur konvexen Hülle. zum Begriff des Voronoi-Diagramms (vgl. auch Vorlesung "Algorithmische Geometrie"):

Kollisionserkennung

6. Algorithmen der Computer-Geometrie

Punktlokalisierung. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie INSTITUT FÜR THEORETISCHE INFORMATIK FAKULTÄT FÜR INFORMATIK

5/24/07. Allgemeine Regeln zur Optimierung. Octree / Quadtree. 5D-Octree für Strahlen [Arvo u. Kirk 1987] Primitive in adaptiven Gittern / Octrees

Beispiellösungen zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 6

Quadtrees und Meshing

KD-Bäume. ein Vortrag von Jan Schaefer

Mehrdimensionale Zugriffspfade und Dateiorganisation

Algorithmische Geometrie: Schnittpunkte von Strecken

Quadtrees und Meshing

Begriffsklärung: Dominanz

Quad-trees. Benjamin Niedermann Übung Algorithmische Geometrie

Geometrische Algorithmen

Geometrische Algorithmen Einige einfache Definitionen: Ist ein Punkt in einem Polygon? Punkt-in-Polygon-Problem. Das Punkt-in-Polygon-Problem

Voronoi-Diagramme INSTITUT FÜR THEORETISCHE INFORMATIK FAKULTÄT FÜR INFORMATIK. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie

Definition Ein Heap (priority queue) ist eine abstrakte Datenstruktur mit folgenden Kennzeichen:

Quadtrees und Meshing

Kapitel 9 Algorithm. Geometrie. Kürzeste Abstände Konvexe Hülle

Uberblick 1. Kurzeste Wege 2. Sichtbarkeitsgraphen 3. Berechnung des Sichtbarkeitsgraphen 4. Kurzeste Wege fur polygonale Roboter 1

2.7.1 Inside-Test Konvexe Hülle Nachbarschaften Schnittprobleme

Geometrische Algorithmen Voronoi-Diagramme. Lernmodul 7: Geo-Algorithmen und -Datenstrukturen - Voronoi-Diagramme

Binäre Suchbäume. Mengen, Funktionalität, Binäre Suchbäume, Heaps, Treaps

Kapitel Andere dynamische Datenstrukturen

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

7. Sortieren Lernziele. 7. Sortieren

Abschnitt 18: Effizientes Suchen in Mengen

Übung zur Vorlesung Algorithmische Geometrie

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Polygontriangulierung

Algorithmen und Datenstrukturen I AVL-Bäume

Datenstrukturen und Algorithmen D-INFK

Mehrwegbäume Motivation

Algorithmische Geometrie

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

M. Pester 29. Ein konvexes d-polytop ist eine begrenzte d-dimensionale polyedrale Menge. (d = 3 Polyeder, d = 2 Polygon)

Übung Algorithmen I

Suchstrukturen. Übersicht. 8 Suchstrukturen. Allgemeines. H. Täubig (TUM) GAD SS

Wiederholung. Bäume sind zyklenfrei. Rekursive Definition: Baum = Wurzelknoten + disjunkte Menge von Kindbäumen.

Musterlösung Datenstrukturen und Algorithmen

INTERVALLBÄUME. Tanja Lehenauer, Besart Sylejmani

Algorithmen und Datenstrukturen Bereichsbäume

Parallele Algorithmen in der Bildverarbeitung

Heapsort / 1 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]

{0,1} rekursive Aufteilung des Datenraums in die Quadranten NW, NE, SW und SE feste Auflösung des Datenraums in 2 p 2 p Gitterzellen

4.4 Quadtrees. Literatur

Seminar Computerspiele Räumliche Datenstrukturen. Ralf Pramberger

Datenstrukturen und Algorithmen. 7. Suchen in linearen Feldern

Vorlesung Algorithmische Geometrie Konvexe Hülle im R 3

Algorithmen und Datenstrukturen Heapsort

Geometrische Datenstrukturen

Theoretische Informatik. Exkurs: Komplexität von Optimierungsproblemen. Optimierungsprobleme. Optimierungsprobleme. Exkurs Optimierungsprobleme

Informatik II Prüfungsvorbereitungskurs

Datenstrukturen und Algorithmen

Geometrie I. Sebastian Redinger Informatik 2 Programmiersysteme Martensstraße Erlangen

Klausur Algorithmen und Datenstrukturen II 29. Juli 2013

lim log 2n n = > 0 Da es einen Limes gibt, gibt es auch einen Limes inferior, der gleich diesem Limes ist.

3. Binäre Suchbäume. 3.1 Natürliche binäre Suchbäume. EADS 3.1 Natürliche binäre Suchbäume 78/598 ľernst W. Mayr

Geometrische Algorithmen Segmentschnitt

Geometrie 1. Christian Bay Christian Bay Geometrie / 46

14. Rot-Schwarz-Bäume

Datenstrukturen & Algorithmen Lösungen zu Blatt 4 FS 15

Konvexe Hülle. Abbildung: [Wikipedia]: Nicht-konvexe Menge (links), konvexe Menge (rechts) KIT Institut für Theoretische Informatik 510

5.1. Intervallbäume (Intervall Trees)

Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1

Quadtrees. Christian Höner zu Siederdissen

Transkript:

Algorithmische Geometrie 7. Punktsuche JProf. Dr. Heike Leitte Computergraphik und Visualisierung

Inhaltsverzeichnis 1. Einführung 2. Konvexe Hülle 3. Schnitte von Liniensegmenten 4. Schnitte planarer Unterteilungen 5. Triangulierung von Polygonen 6. Lineare Programme 7. Punktsuche 8. Voronoidiagramme und Delaunay-Triangulierung 9. Allgemeine Suchstrukturen 2

Was ist wo? Kollisionserkennung (Beispiel Diablo III) 3

Was ist wo? Beispiel RayCasting [wikipedia] 4

Was ist wo? [Christoph Garth, 2008] 5

Volker Gaede, Oliver Günther. Multidimensional access methods. ACM Comput. Surv., 30(2):170-231, 1998. 6

Volker Gaede, Oliver Günther. Multidimensional access methods. ACM Comput. Surv., 30(2):170-231, 1998. 7

Anfrage an Räuml. Datenbanken Raumbezogene Datenbanken (spatial databases) enthalten geometrische Objekte wie Punkte, Liniensegmente, Kurvensegmente, Polygone, Flächenstücke oder Polyeder. An solche Datenbanken werden verschiedene Suchanfragen gerichtet. Man unterscheidet [Gaede/Günther, S. 11/12] Exact Match Query (EMQ): Zu einem Objekt o' mit räumlicher Ausdehnung o.g E finde alle Objekte o mit der gleichen räumlichen Ausdehnung wie o'! d EMQ (o ' )= {o o. G=o '. G } d Point Query (PQ): Zu einem Punkt p E finde alle Objekte o, die p enthalten! PQ ( p)= {o p o.g = p } Range Query (RQ): zu einem d-dimensionalen Interval Id = [l1, u1]x... x [ld, ud] finde alle Objekte o mit mindestens einem Punkt in Id! RQ ( I d )= { o I d o.p } 8

Anfrage an Räuml. Datenbanken 9

Anfrage an Räuml. Datenbanken Intersection Query (IQ): Zu einem Objekt o' mit räumlicher Ausdehnung o '. G E finde alle Objekte o, die o' schneiden! d IQ (o ' )= {o o. G o '. G } Enclosure Query (EQ): Zu einem Objekt o' mit räumlicher Ausdehnung o'. G Ed finde alle Objekte o, die o' umschließen! EQ(o ' )= {o o '.G o. G=o '. G } Containment Query (CQ): Zu einem Objekt o' mit räumlicher Ausdehnung o '. G E finde alle Objekte o, die o' enthalten sind! d CQ (o ' )= { o o '. G o.g =o. G } Adjacency Query (AQ): Zu einem Objekt o' mit räumlicher Ausdehnung o '.G E d finde alle zu o' inzidenten Objekte o! AQ (o' )= { o o. G o '. G o.g o o ' G o = } 10

Anfrage an Räuml. Datenbanken Nearest Neighbor Query (NNQ): Zu einem Objekt o' mit räumlicher Ausdehnung o '.G E d finde alle Objekte o mit minimalem Abstand von o'! NNQ (o ' )= { o o ' ' : dist (o '.G, o.g ) dist (o '.G, o ' '.G ) } Spatial Join: Für zwei Mengen räumlicher Objekte R, S und ein raum-bezogenes Prädikat Q finde alle Paare o, o ' R S mit o. G,o '.G =TRUE! R Θ S = {(o, o ' ) o R o ' S Θ(o.G, o '.G ) } Beispiele für Q sind intersects, contains, is-enclosed-by, adjacent, northwest distance is larger than.... Wir werden uns in diesem Kapitel nur mit der Point Query befassen, sowie der Range Query (Bereichsabfrage) für Punktdatenbanken. Weitere Datenstrukturen werden in Kapitel 9 besprochen. 11

1D Bereichssuche in bin. Suchbaum Bevor wir zwei Dimensionen und dann die höheren Dimensionen betrachten, nehmen wir uns den eindimensionalen Fall vor. Wir nutzen einen binären Suchbaum. (Arrays lassen sich nicht gut verallgemeinern.) Für ein Intervall [x, x'] suchen wir dann sowohl x als auch x' und finden so den gesuchten Teil des Baumes, etwa für [x, x'] =[18, 77] im folgenden Bild. 12

1D Bereichssuche in bin. Suchbaum Wir erhalten letztlich eine Reihe von Teilbäumen, die komplett innerhalb [x, x'] liegen und die Elemente entlang der Suchpfade, die drinnen oder draußen liegen können. 13

1D Bereichssuche Algorithmus Um zu einem Algorithmus zu kommen, müssen wir den Knoten finden, an dem obere und untere Schranke getrennt werden. 14

1D Bereichssuche Algorithmus Dann können wir den Algorithmus angeben: 15

Bereichssuche Komplexität Es gilt offensichtlich Lemma 3.4: Algorithmus 1DRANGEQUERY liefert genau die Punkte der Bereichssuche. Da ReportTree in linearer Zeit ablaufen kann (der Baum hat weniger innere Knoten als Blätter), gilt Theorem3.5: Sei P eine Menge von n Punkten in R. Die Menge P kann in O(n log n) in einem balancierten binären Suchbaum gespeichert werden, der O(n) Speicher benötigt. Die Range Query benötigt O(k + log n) Zeit (k ist Anzahl der Ausgabepunkte). Somit ist der präsentierte Algorithmus ausgabensensitiv (worst case ist O(n), was man auch ohne Suchstruktur schaffen würde). 16

Point Quadtree Eine ältere, bekannte Datenstruktur für Punktdaten ist der Point Quadtree [R.A. Finkel, J.L. Bentley, Quad trees: a data structure for retrieval on composite keys, Acta Informatica 4(1):1-9, 1974]. Hier werden die Punkte in der Datenbank zur Zerlegung der Ebene genutzt, indem die Punkte in einem Quadtree einsortiert werden und jeder Punkt ein Rechteck durch seine Koordinaten in vier kleinere Rechtecke zerlegt, die den Kindern zugeordnet werden. Optimierungsstrategien helfen bei der Balancierung der Bäume. Natürlich gibt es auch Octrees für Punkte in E3 und d-dim. Point Quadtrees für Punkte im Ed. 17

kd-baum Da im Point Quadtree an jedem Knoten d Tests (d = Dimension der Daten) durchgeführt werden und auch d Werte abzulegen sind, hat man den kd-baum eingeführt, der als binärer Raum organisiert ist und in der Praxis deutlich effizienter arbeitet, sofern die Punkte irregulär sind. Wir betrachten eine Menge P von Punkten in der Ebene. Um diese in einen binären Suchbaum einsortieren zu können, unterteilen wir abwechselnd nach x- und nach ykoordinate. Also wechselt der Sortierschlüssel von Ebene zu Ebene und jeder Knoten zerlegt ein Rechteck in zwei Rechtecke. 18

kd-baum Algorithmus Damit der Algorithmus korrekt arbeitet, sollte bei geraden n der Median die kleinere der beiden mittleren Positionen liefern. 19

kd-baum Komplexität Der Median einer Menge von n Elementen kann in linearer Zeit ermittelt werden, etwa indem man beim Quicksort-Algorithmus nur das längere der beiden entstandenen Teile weiter durchsucht. (Dies ist kein worst-case linearer Algorithmus, aber zufällige Pivotwahl führt auf erwartete lineare Zeit. Ein echter worst case linearer Algorithmus ist kompliziert.) Für unseren Algorithmus ist es jedoch klüger, gleich alle Punkte nach x- und y-koordinate zu sortieren, da man den Median dann in konstanter Zeit finden kann und in linearer Zeit die sortierten Teilfelder für die Rekursion zu finden sind. Als Zeitkomplexität ergibt sich T n = { O 1 O n 2T n/ 2, n=0,1 n 1 } also O(n log n), was auch für die Sortierung gilt. Lemma 3.1: Ein kd-baum für n Punkte nutzt O(n) Speicher und kann in O(n log n) Zeit gebaut werden. 20

Bereichssuche auf kd-bäumen Zu jedem Knoten eines kd-baumes gehört ein (möglicherweise unbeschränktes) achsenparalleles Rechteck der Ebene. 21

Bereichssuche auf kd-bäumen Wir wenden uns nun einer Bereichsabfrage zu. Wir wollen also alle Punkte im kd-baum angeben, die in einem Bereich R = [l1, n1] x [l2, n2] liegen. Dazu müssen wir bei jedem Knoten des Baumes prüfen, ob das zugehörige Rechteck R schneidet oder nicht. Wenn R geschnitten wird und das Rechteck ganz in R liegt, können wir alle Punkte im Teilbaum einfach ausgeben. 22

Bereichssuche auf kd-bäumen Für die Schnitttests sollte man die achsenparallele Box des zugehörigen Knotens am besten stets übergeben und mittels der Koordinaten anpassen. 23

Bereichssuche auf kd-bäumen Komplexität Lemma 3.2: Die Bereichssuche (Range Query) mit einem achsenparallelen Rechteck R in einem Kd-Baum mit n Punkten kann in O n k Zeit ausgeführt werden, wobei k die Anzahl der Punkte in R ist. Beweis: Zunächst halten wir fest, dass die Zeit zur Ausgabe eines Teilbaumes linear ist, also in den Zeilen 4 und 8 O(k) Schritte anfallen. Nun müssen wir die Anzahl der Rekursionsschritte zählen. Diese fallen an, wenn die Region eines Knotens einen echten Schnitt mit R liefert. Dazu berechnen wir eine Schranke für die Anzahl der Unterteilungslinien, die die linke und rechte Kante von R schneiden. Sei l eine vertikale Linie und T ein kd-baum. Sei l (root (T)) die Linie zur Wurzel des kdbaumes. l schneidet nun entweder die Region links von l (root(t)) oder rechts davon, aber nicht beide. Wegen der Konstruktion der kd-bäume müssen wir noch eine Stufe tiefer gehen, bevor wir die gleiche Situation wie zu Beginn haben. Da in der 2. Ebene die Linien senkrecht zu l verlaufen, werden jetzt in einem Teil beide Bereiche von l getroffen. Als Rekursion für die Zeit Q(n) ergibt sich Q n = { 0 1 n=1 2 2Q n/ 4, n 1 } und letztlich Q n =O n. Die gilt natürlich analog für eine horizonq n ergeben sich tale Linie. Insgesamt Schnitte mit den Rändern von R. QED. 24

Bereichssuche auf kd-bäumen Für die Schnitttests sollte man die achsenparallele Box des zugehörigen Knotens am besten stets übergeben und mittels der Koordinaten anpassen. O( k ) O( n ) O( k ) 25

kd-bäume Komplexitäten Insgesamt gilt für kd-bäume: Theorem 3.3: Ein kd-baum für eine Menge P von n Punkten in der Ebene nutzt O(n) Speicher und kann in O(n log n) Zeit gebaut werden. Eine Bereichsabfrage (Range Query) benötigt O n k Zeit, wobei k die Anzahl der Punkte im Bereich ist. kd-bäume sind auch in höheren Dimensionen einsetzbar. Konstruktion erfolgt wieder in O(n log n) und für die Range Query ergibt sich O(n1-1/d + k). 26

Range Trees Um von den O n k des planaren kd-baumes zu O(log n + k) genauer O(log2n + k), zu kommen, kann man mehr Speicher einsetzen. Der Range Tree benötigt O(n log n). Wieder trennen wir xkoordinatensuche und y-koordinatensuche. Für eine Range Query R = [x, x'] x [y, y'] lösen wir den x-teil durch einen binären Suchbaum, der uns log n komplette Teilbäume liefert, deren Elemente in [x, x'] sind: Um nun letztlich die Punkte in R zu finden, nutzen wir an jedem Knoten im binären Baum der x-koordinaten einen Baum der y-koordinaten, der nach dem gleichen Prinzip organisiert ist und alle Punkte im entsprechenden y-teilbaum anhand der y-koordinaten organisiert. Dies ist eine Datenstruktur mit mehreren Ebenen (multi-level data structure). 27

2D Range Tree Man beachte, dass in den Blättern der y-bäume die Punkte und nicht nur die ykoordinaten stehen. 28

Range Tree Speicherbedarf Lemma 3.6: Ein Range Tree für eine Menge von n Punkten benötigt O(n log n) Speicher. Beweis: Für eine feste Tiefe des x-baumes steht ein Punkt nur in einem der dort verankerten (assoziierten) y-bäume. Da die y-bäume als binäre Bäume O(m) Speicher für m Elemente benötigen, benötigen alle y-bäume O(n) Speicher. Der x-baum hat Tiefe O(log n), also folgt O(n log n) für den Speicher des Range Trees. QED. 29

Range Tree Komplexität Der Algorithmus BUILD2DRANGETREE benötigt mehr als O(n log n) Zeit zum Aufbau, wenn die Punkte nicht bzgl. der y-koordinate sortiert sind, da ein binärer Suchbaum im Allgemeinen nur in O(m log m) zu bauen ist. Nach einer Sortierung der Punkte genügt O(m) und wir erhalten O(n log n) auch für die Zeit. 30

Range Tree Bereichssuche Mit Hilfe von 1DRANGEQUERY lässt sich nun auch 2DRANGEQUERY formulieren. 31

Range Tree Komplexität Suche Lemma 3.7: Eine Bereichsuche mit einem achsenparallelen Rechteck in einem Range Tree mit n Punkten benötigt O(log2 n + k) Zeit, wobei k die Anzahl der Elemente im gesuchten Bereich ist. Beweis: An jedem der bis zu O(log n) Punkte entlang des Suchpfades rufen wir möglicherweise 1DRANGEQUERY auf. Dies erfordert O(log n + kv) Schritte, wobei kv die im Teilbaum gesuchten Punkte sind. Insgesamt ergeben sich O(log2 n + k) Schritte, da S kv = k. QED. Theorem 3.8: Sei P eine Menge von n Punkten in der Ebene. Ein Range Tree für P nutzt O(n log n) Speicher und kann in O(n log n) gebaut werden. Die Bereichsabfrage (Range Query) mit einem achsenparallenen Rechteck erfordert O(log2 n + k) Schritte, wobei k die Anzahl der Punkte im Rechteck ist. 32

Literatur 33