kd-bäume - uni bielefeld · 2003-07-08 · kd-bäume pseudocode - aufbau des baums (für 2...
TRANSCRIPT
KD-Bäume
ein Vortrag vonJan Schaefer
KD-Bäume
Überblick
- Kurzer Rückblick: Quad Trees- KD-Baum bauen- Effizienz des Konstruktionsalgorithmus- Regionen- Bereichssuche- Effizienz des Suchalgorithmus- Anwendungsgebiete
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
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
KD-Bäume
KD-Bäume
KD-Bäume
KD-Bäume
KD-Bäume
KD-Bäume
KD-Bäume
KD-Bäume
KD-Bäume
KD-Bäume
KD-Bäume
KD-Bäume
KD-Bäume
KD-Bäume
KD-Bäume
KD-Bäume
KD-Bäume
KD-Bäume
KD-Bäume
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
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)
KD-Bäume
Regionen
- Knoten im Baum korrespondieren mit gewissen Regionen in der Ebene- Regionen lassen sich leicht ausrechnen- Notwendig für Bereichssuche
KD-Bäume
Region(L1)
- gesamte Ebene
KD-Bäume
Region(L3)
- Nach links von L1 begrenzte Region(L1)- Nach oben, unten und rechts offen
KD-Bäume
Region(L6)
- Region(L3) nun nach oben von L3 begrenzt- Nach unten und rechts offen
KD-Bäume
Region(L9)
- Region(L6) nach rechts begrenzt von L6- Nach unten offen
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
KD-Bäume
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)
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
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)
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