KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2...

36
KD-Bäume ein Vortrag von Jan Schaefer

Transcript of KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2...

Page 1: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

ein Vortrag vonJan Schaefer

Page 2: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Überblick

- Kurzer Rückblick: Quad Trees- KD-Baum bauen- Effizienz des Konstruktionsalgorithmus- Regionen- Bereichssuche- Effizienz des Suchalgorithmus- Anwendungsgebiete

Page 3: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Rückblick - Quad Trees

- Teilen die Ebene immer in der geometrischen Mitte- Nehmen keinen Bezug zur Verteilung der Punkte- Kann zu unbalancierten Bäumen führen- Es folgt Ineffizienz

Page 4: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Den Baum aufbauen

- Punktmenge gegeben- Teilung in zwei möglichst gleich mächtige Untermengen- Wiederhole für Untermengen rekursiv- Teilung geschieht reihum entlang der Dimensionsachsen- Produkt ist fast immer balancierter Binärbaum- Problem: Punkte mit gleichen Koordinaten

Page 5: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Page 6: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Page 7: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Page 8: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Page 9: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Page 10: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Page 11: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Page 12: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Page 13: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Page 14: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Page 15: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Page 16: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Page 17: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Page 18: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Page 19: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Page 20: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Page 21: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Page 22: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Page 23: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Page 24: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Pseudocode - Aufbau des Baums (für 2 Dimensionen)

Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen

if P enthält nur einen Punkt then return Blatt in dem der Punkt gespeichert ist else if tiefe gerade then Teile P in zwei Untermengen mit Hilfe einer vertikalen Linie l durch die mittlere X-Koordinate der Punkte in P. Sei P1 die Punktmenge zur Linken von l und P2 die Punktmenge zur Rechten von l else Teile P in zwei Untermengen mit Hilfe einer horizontalen Linie l durch die mittlere Y-Koordinate der Punkte in P. Sei P1 die Punktmenge unterhalb von l und P2 die Punktmenge oberhalb von l vlinks <- BaueKdBaum(P1, tiefe + 1) vrechts <- BaueKdBaum(P2, tiefe + 1) Erstelle einen Knoten v, der l speichert, mache vlinks zu seinem linken Kindknoten und vrechts zu seinem rechten. return v

Page 25: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Effizienz des Aufbaualgorithmus

Speicher- n - 1 Knoten mit je O(1)- n Blätter mit je O(1)- Also: O(n)

Zeit- Vorsortieren: O(n log n)- Teilung in sortierte Untermengen: O(n)- Pro Ebene: n Schritte nötig- log n Ebenen- Also: O(n log n)

Page 26: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Regionen

- Knoten im Baum korrespondieren mit gewissen Regionen in der Ebene- Regionen lassen sich leicht ausrechnen- Notwendig für Bereichssuche

Page 27: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Region(L1)

- gesamte Ebene

Page 28: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Region(L3)

- Nach links von L1 begrenzte Region(L1)- Nach oben, unten und rechts offen

Page 29: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Region(L6)

- Region(L3) nun nach oben von L3 begrenzt- Nach unten und rechts offen

Page 30: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Region(L9)

- Region(L6) nach rechts begrenzt von L6- Nach unten offen

Page 31: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Bereichssuche (für 2 Dimensionen)

- Lege Rechteck R in Ebene mit Punkten- Frage: Welche Punkte liegen in R?- Besuche nur Knoten deren Region von R geschnitten- Wenn Region(Lx) vollständig in R, gib alle Punkte unter Lx zurück- Für geschnittene Regionen, prüfe für alle Punkte ob in R

Page 32: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Page 33: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Pseudocode - Bereichssuche im Baum (für 2 Dimensionen)

lc(v) liefert linken Unterbaum von vrc(v) liefert rechten Unterbaum von vMeldeUnterbaum(v) gibt alle unter v befindlichen Blätter zurück

Algorithmus DurchsucheKdBaum(v, R)

if v ist ein Blatt then melde den in v gespeicherten Punkt, wenn er in R liegt else if region(lc(v)) ist vollständig in R enthalten then MeldeUnterbaum(lc(v)) else if region(lc(v)) schneidet R then DurchsucheKdBaum(lc(v), R) if region(rc(v)) ist vollständig in R enthalten then MeldeUnterbaum(rc(v)) else if region(rc(v)) schneidet R then DurchsucheKdBaum(rc(v), R)

Page 34: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Effizienz der Bereichssuche (für 2 Dimensionen)

Speicher- O(n)

Zeit- Zurückgeben von k Punkten: O(k)- Vertikale Linie schneidet √n Regionen- Ebenso horizontale Linie- Es müssen maximal 4√n Knoten durchlaufen werden- Also: O(√n + k), k = Anzahl zurückgegebene Punkte- Sehr pessimistische Einschätzung- Suche meistens viel schneller, da Bereich i.d.R. klein

Page 35: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Anwendungsgebiete- Datenbanksuche- Spalten der Datenbanktabellen werden zu Dimensionen- Datensätze werden als Punkte aufgefasst, KD-Baum erzeugt- Range-Suche in O(n1-1/d + k)

Page 36: KD-Bäume - Uni Bielefeld · 2003-07-08 · KD-Bäume Pseudocode - Aufbau des Baums (für 2 Dimensionen) Algorithmus BaueKdBaum(P, tiefe) // P: vorsortierte Punktmengen if P enthält

KD-Bäume

Literatur

- de Berg, van Krefeld, Overmars, Schwarzkopf: Computational Geometry, Springer- Sedgewick: Algorithmen, Addison-Wesley- Preparata, Shamos: Computational Geometry, Springer- alle drei im Semesterapparat