Literatur Kap. 6: Geometrische Algorithmen • M. de Berg, O. Cheong, M. van Krefeld, und M. Overmars: Computational Geometry, Springer 2008, Kap. 5: Orthogonal Range Searching, Kap. 14: Quadtrees • F. P. Preparata und M. I. Shamos: Computational geometry: an introduction, 1985, Springer, Kap. 2.3 Range-Searching Problems • R.A. Finkel und J.L. Bentley: Quad trees: A data stucture for retrieval on composite keys, Acta Informatica 4, 1974, S. 1-9 • J. L. Bentley: Multidimensional binary search trees used for associative searching, Communications of the ACM, vol. 18, no. 9, 1975, S. 509-517 6.1 Mehrdimensionale Suchstrukturen Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund 23./24. VO A&D WS 08/09 20./22. Januar 2009 Petra Mutzel Alg. & Dat. WS 08/09 1 Petra Mutzel Alg. & Dat. WS 08/09 2 6.1.1 Einführung in mehrdimensionale Suchstrukturen Überblick: 6.1 Mehrdimensionale Suchstrukturen • Gegeben: – Menge S von N Punkten in Rk – Familie U von Untermengen von Rk (Ranges) – δ∈U • Gesucht: – Vorverarbeitung von S, so dass Abfragen der Art: ``Berichte alle Punkte in S∩δ´´ effizient berichtet werden können. 6.1.1 Einführung in mehrdimensionale Suchstrukturen 6.1.2 Point-region quad trees 6.1.3 Point quad trees 6.1.4 K-d trees 6.1.5 Range trees • Beispiel: Datenbankabfragen Petra Mutzel Alg. & Dat. WS 08/09 3 Anwendungsbereiche • • • • • • • • • Alg. & Dat. Alg. & Dat. WS 08/09 4 Charakterisierung (1) Datenbanken Computergraphik / Computer Vision Computer-Aided Design Geographische Informationssysteme Bildverarbeitung Mustererkennung Document-Retrieval Data Mining ... Petra Mutzel Petra Mutzel • Welche Datentypen werden gespeichert? – S ist ungeordnete Menge (z.B. Index) – S ist kartes. Produkt S1х S2 х...х Sk geordn. Mengen • Dimension: – k ist kleiner gleich 10 • Operationen: – Find, Insert, Delete, (Pred., Succ., Min, Max) • Welche Speichermedien? – intern vs. extern WS 08/09 5 Petra Mutzel Alg. & Dat. WS 08/09 6 1 Wir betrachten folgende Abfragen: Charakterisierung (2) • Welche Objekttypen werden gespeichert? – Punkte, Container (z.B. Quader in 3D), komplexere – Lage fixiert oder beweglich? • Punkt-Abfrage (Point Query): – Ist ein gegebener Datenpunkt in S∈Rk enthalten, und falls ja, dann finde diesen. • Welche Abfragen und wie oft? – Ist Punkt enthalten? – Aufzählung aller Punkte, die in gewünschtem k-dim. Bereich liegen – Welche Punkte liegen in der Nähe eines Punktes? – Finde die n nächsten Nachbarn eines Punktes – Exakte vs. partielle Abfragen – Einmalige vs. viele Abfragen Petra Mutzel Alg. & Dat. WS 08/09 • Bereichsabfrage (Range Query): – Berichte alle Punkte aus S, deren k Schlüssel in den gewünschten Bereichen liegen. 7 • Sequentielle Liste – Aufwand: O(N k) • Invertierte Liste (Knuth 1973) – Sortierte Liste pro Schlüssel – Durchschnittlicher Aufwand: O(N1-1/k) – Aufwand: O(N k) Petra Mutzel „Trie“ X-key Y-key D 5 45 C 35 40 O 25 35 M 50 10 X-key Y-key D M O O C C M D Alg. & Dat. WS 08/09 9 WS 08/09 8 Petra Mutzel Alg. & Dat. WS 08/09 10 6.1.2 Point-Region Quadtrees voneines Punkten in einem k-dim. Bereich • Repräsentation Repräsentation 2-dim. Binärbildes (Region Data) • Rekursive Teilung eines quadratischen 0/1Bereiches in vier gleich große Quadranten, STOP falls Block nur 0 oder nur 1 Punkt enthält • Jedem Feld wird ein Knoten in einem Suchbaum mit Maximal- Grad 4 zugeordnet • Jedes Kind eines Knotens repräsentiert Quadranten (NW,NE,SW,SE) • Blätter ← Aufteilung nicht weiter notwendig • Blätter sind entweder ``weiß´´ (falls kein Punkt enthalten ist) oder ``schwarz´´ (sonst), innere Knoten sind ``grau´´ • Repräsentation eines 2-dim. Binärbildes (Region Data) • Rekursive Teilung eines 0/1-Bereiches in vier gleich große Quadranten, STOP falls Block nur 0 oder nur 1 enthält • Suchbaum mit Grad 4 (s. Beispiel) • Jedes Kind eines Knotens repräsentiert Quadranten (NW,NE,SW,SE) • Blätter → Aufteilung nicht weiter notwendig • Blätter sind entweder ``weiß´´ oder ``schwarz´´, innere Knoten sind ``grau´´ Alg. & Dat. WS 08/09 • Suchraum wird in gleiche Teile (Buckets) der Größe r aufgeteilt, wobei r der Suchradius ist • Realisiert als k-dim. Array mit einem Eintrag per Bucket; jeder Bucket enthält Punkte in Form einer einfachen Liste • Durchschnittlicher Suchaufwand für Bereichssuche (Bentley 1977): O(F 2k), wobei F die Anzahl der berichteten Punkte ist • Effizient, wenn fixer Radius und Datenpunkte gleichmäßig im Raum verteilt sind (Kartographie) • Teilt den Raum auf Region Quadtrees Petra Mutzel Alg. & Dat. ``Fixed Grid´´ Methode Einfache Datenstrukturen Name Petra Mutzel 11 Petra Mutzel Alg. & Dat. WS 08/09 12 2 Point-Region Quadtrees: Beispiel N=10 Punkte k=2 (0,100) PR Quadtree für Beispiel (100,100) (50,50) (25,25) (75,25) (75,75) y (0,0) x (100,0) Petra Mutzel Aufbau eines PR Quadtrees k=2: Top-Down Aufbau: • Starte mit Feld B, das alle Knoten enthält • Sei vB der zugehörige Knoten im Suchbaum • Falls B mehr als einen Knoten enthält, dann – erzeuge 4 Kinder von vB im Suchbaum – weise jedem Kind-Feld Bi alle Knoten aus B zu, welche in Bi enthalten sind – entferne leere Kind-Felder vBi im Baum „Z-Order, DFS-Order“ Alg. & Dat. WS 08/09 Morton Order [Morton 1966] space filling curve: bildet einen k-dimensionalen Bereich auf eine Dimension ab Alternativ: Insert-Aufbau: • Starte mit leerem Feld B und füge iterativ die Knoten ein • Einfügen geht ähnlich wie bei binären Suchbäumen: suche das richtige Feld, Suche endet an Blatt, füge ein. Laufzeit ? Baum hat Tiefe N → Laufzeiten beider Aufbau-Algorithmen: O(N2) (0,100) (100,100) 2 y 2 3 3 5 (0,0) Abb. aus Wikipedia 6.1.3 Point Quad Trees • Eingeführt von Finkel & Bentley 1974 • Multidimensionale Verallgemeinerung von binären Suchbäumen • Verheiratung von ``Fixed Grid´´ mit binären Suchbäumen • Rekursive Teilung an Datenpunkten in jeweils vier Teile: NW,NE,SW, SE • Hier Annahme: – k=2, Verallg. einfach – Jeder Punkt wird nur einmal besetzt 1 1 14 4 x (100,0) 4 5 Petra Mutzel Alg. & Dat. WS 08/09 18 3 Beispiel: Point Quadtree zu Beispiel A G H K J C B L J F D F M N I K E H L G B I A M D C E N Point Quad Trees: Operation Insert Beispiel: Insert Z • Jeder innere Knoten enthält – Zeiger zu Kindern NW,NE,SW,SE – CHILD(P,I): gibt Kind im Quadranten I von Knoten P an – XCOORD, YCOORD: Koordinaten von Punkt – NAME: Information über Punkt (z.B. Name) G Alg. & Dat. WS 08/09 K L H G M B D C I E Z I E A M N Petra Mutzel Alg. & Dat. WS 08/09 22 Point Quadtrees: Analyse Aufbau A F Z C B L 21 Point Quadtree zu Beispiel: Insert Z J F D J • Ähnlich wie für binäre Suchbäume: – Suche den Punkt (nach x und y-key) – Wenn Blatt erreicht ist, dann bestimme Position, an die eingefügt werden muss. Petra Mutzel H K N • Aufbau eines Point Quadtrees: – Aufwand ist äquivalent zur Gesamtpfadlänge = Kosten, um nach allen Elementen einmal zu suchen • Gesamtpfadlänge: – Hängt von Reihenfolge der Einfügungen der Punkte ab – Empirisch: N log4 N (Finkel & Bentley) – Worst Case: θ(N2) • Aufwand für Insert und Search – Empirisch: O(log4 N) – Worst Case: O(N) – Re-Balancing Methoden sind möglich Petra Mutzel Alg. & Dat. WS 08/09 26 4 Point Quadtrees: Deletion Beispiel: Deletion Delete A: • Problem: – Geht nicht so leicht wie bei binären Suchbäumen – Beispiel: Entfernung von A G H K F D J C B L I E A M N Petra Mutzel Alg. & Dat. WS 08/09 27 Beispiel: Deletion Delete A: Point Quadtrees: Deletion • Problem: – Unterbäume des gelöschten Knotens müssen eventuell neu eingefügt werden, denn sie sind nicht mehr im richtigen Quadranten bzgl. der neuen Wurzel – Original-Vorschlag war daher: alle diese Unterbäume neu einfügen – Besser: Vorschlag von Samet: G H K F D J C B L I E A M N Petra Mutzel Alg. & Dat. WS 08/09 30 Wunsch: Finde einen Punkt Z, so dass die Zwischen-RegionBeispiel: def. durch Z und A leer ist Point Quadtrees: Deletion • Problem: – Unterbäume des entfernten Knotens müssen neu eingefügt werden – Alle Knoten mit deren Unterbäumen, die in der Zwischenregion liegen, müssen neu eingefügt werden. • Idee: – Wähle in jedem Unterquadranten des zu entfernenden Knotens einen Kandidaten aus, der am nächsten bei x oder y-Koordinate ist. – Wähle aus diesen vier Kandidaten dann den besten aus. G H K F D J C B L I E A M N Petra Mutzel Alg. & Dat. WS 08/09 31 Petra Mutzel & Dat. WS 08/09 Problem: Z muss nichtAlg.existieren! 32 5 Deletion: FIND_CANDIDATE(P,Q) Kriterium 1: Wähle denjenigen, der am nächsten Beispiel: Kandidaten bei A liegt bzgl. x und y nach Punkt mit Kriterium 1 muss nicht existieren: Bsp FIND_CAND Pointer node procedure FIND_CANDIDATE(P,Q) // P pointer to the son in quadrant Q of the node to be deleted. // // OPQUAD(Q) gives quadrant 180 degrees apart from Q // 1. begin 2. if not(null(P)) 3. while not(null(CHILD(P,OPQUAD(Q)))) do 4. P CHILD(P,OPQUAD(Q)); 5. return(P); 6. end; Petra Mutzel Alg. & Dat. WS 08/09 G M N 33 F C B L I E A x Denn: Punkt im Quadranten gegenüber liegt sicher nicht in Zwischenregion und mind. ein anderer Punkt ist auch außerhalb. M Kriterium 1 garantiert, dass Zwischenregion leer ist N Kriterium 2 garantiert, dass höchstens ein anderer Kandidat innerhalb der Zwischenregion liegt Delete Punkt A Beispiel: Kriterium 1 garantiert, dass Zwischenregion leer ist Point Quadtrees: Deletion - Vorgehen G D I E A H J C B L Beispiel: Kandidaten nach FIND_CAND K F D J Kriterium 1: Wähle denjenigen, der am nächsten bei A liegt bzgl. x und y Kriterium 2 (NEU): Wähle denjenigen Punkt i mit kleinstem Punkt 1 muss nichtmin existieren: Bsp Abstandmit zu Kriterium einer Koordinatenachse: (|xi-x|,|yi-y|) y H K • Sei P der zu entfernende Punkt, R ist Wurzel • Falls P kein oder nur ein Kind hat: einfach • Sonst: – Bestimme die vier Kandidaten pro Quadrant – Bestimme den besten Kandidaten nach Kriterien 1,2 – Sei J bester Kandidat, J liegt in Quadrant Q bzgl. P: – Kopiere xcoord, ycoord, name – Rekursiver Umbau des nächsten Quadranten im Uhrzeigersinn CQUAD(Q) mit Hilfe von ADJQUAD() – Rekursiver Umbau des nächsten Quadranten im Gegenuhrzeigersinn CCQUAD(Q) mit Hilfe von ADJQUAD() – Rekursiver Umbau des Quadranten Q mit Hilfe von NEWROOT() Beispiel nach Deletion von A G G H K C B L D F D J H K J I L E F C B E I A M M N N 6 Quadtree zu Beispiel nach Deletion von A Point Quadtree vor Delete A A B F J D H G C L E K I F L H G Petra Mutzel Alg. & Dat. WS 08/09 M B D C N I E 42 Point Quadtrees: Analyse Deletion Pseudo Quadtrees • Theoretisch (Bentley 1988): – Aufwand bei gleichmäßig verteilten Daten für die Anzahl der Neueinfügungen geht um 83% zurück gegenüber der Neueinfügung aller Teilbäume. • Empirisch (Bentley 1988): – Empirisch: N log4 N vs. deutlich größer in Original – Gesamtpfadlänge verringert sich leicht vs. deutlich Verlängerung in Original • Overmars und van Leeuwen 1982 • Idee: – Rekursive Aufteilung des Raumes an Punkten, die nicht Datenpunkte sind, in Quadranten, Unterquadranten, etc., bis jeder Unterquadrant höchstens einen Datenpunkt enthält. • Worst Case: – O(N2) • Deletion sehr komplex! • Alternative: Pseudo Quadtrees Petra Mutzel Alg. & Dat. WS 08/09 Pseudo Quadtrees: Beispiel (0,100) 50 Petra Mutzel Alg. & Dat. WS 08/09 51 Pseudo Quadtree für Beispiel (100,100) (40,50) (60,75) TORONTO 70,70 K J N M y (80,65) BUFFALO (40,50) (35,40) (5,45) DENVER CHICAGO (25,35) (26,37) OMAHA (0,0) (85,15) ATLANTA (65,12) (50,10) Mobile x (70,70) TORONTO BUFFALO (26,37) (65,12) OMAHA DENVER CHICAGO ATLANTA MIAMI MOBILE (90,5) MIAMI (100,0) Petra Mutzel Alg. & Dat. WS 08/09 53 7 Pseudo Quadtrees: Point Quadtrees: Diskussion • Nachteile bei höheren Dimensionen: – An jedem Knoten des Baumes sind k Vergleiche notwendig (um den Quadranten zu bestimmen) – Hoher Speicherplatzverbrauch: Jedes Blatt benötigt k viele NULL Pointer, auch jeder innere Knoten besitzt immer wieder NULL Pointer – Speicherplatzverbrauch pro Knoten: k+2k+1 Wörter für Koordinaten, Kinder und Info • Aufbau: – Für je N Datenpunkte im k-dim. Raum existiert ein Partitionierungspunkt, so dass jeder Quadrant höchstens ┌N/(k+1)┐ Datenpunkte enthält. • Analyse: – Dann besitzt der Pseudo Quadtree eine Tiefe von höchstens ┌logk+1N┐ und kann in Zeit O(N logk+1N) gebaut werden. Petra Mutzel Alg. & Dat. WS 08/09 54 Petra Mutzel 6.1.4 K-D Trees: Alg. & Dat. WS 08/09 (0,100) y (0,0) 56 (80,65) BUFFALO (5,45) DENVER (25,35) OMAHA (85,15) (35,40) ATLANTA CHICAGO (50,10) Mobile (90,5) MIAMI x (100,0) K-D Tree: Einfügen (0,100) (100,100) (60,75) TORONTO y (5,45) DENVER (25,35) OMAHA WS 08/09 58 (80,65) BUFFALO Z • Datenstruktur: – LEFT, RIGHT: linkes und rechtes Kind (referenziert als CHILD(P,I) bzw. LOCHILD(P) und HICHILD(P)) – XCOORD, YCOORD, ... – NAME – DISC: Diskriminator bzgl. k-tem Schlüssel – Abmachung für Diskriminatoren: gleiche Schlüsselwerte befinden sich im rechten Teilbaum Alg. & Dat. 55 (100,100) (60,75) TORONTO K-D Trees: Petra Mutzel WS 08/09 K-D Tree: Beispiel • Jon Louis Bentley 1975 • Idee: – Binärer Suchbaum mit der Eigenschaft, dass in jeder Tiefe nach einer anderen Dimension orthogonal aufgeteilt wird. – Z.B. k=2: nach x-Koordinaten auf den Schichten mit gerader Nummer (Beginn bei Schicht 0), nach yKoordinaten auf den ungeraden Schichten. – Aufteilung basiert auf den Datenpunkten – BSP Trees (Fuchs, Kedem, Naylor 1980): K-D Trees, bei denen nicht orthogonal aufgeteilt wird (beliebige Hyperebenen) Petra Mutzel Alg. & Dat. (0,0) (85,15) (35,40) ATLANTA CHICAGO (50,10) Mobile (90,5) MIAMI x (100,0) 8 K-D Trees: INSERT Adaptive K-D Trees • Analog zu binären Suchbäumen: – Wir suchen den Punkt abwechselnd basierend auf den k Schlüsseln – Wenn das Blatt erreicht ist, haben wir die EinfügePosition gefunden • Analyse: – Form des Baumes hängt von Einfügereihenfolge ab – Durchschnittliche Tiefe: O(log2 N) – Worst Case Tiefe: O(N), Aufbau: O(N2) – Optimierung ähnlich wie bei Quad Trees – Alternative: Adaptive K-D Tree • Idee: – Wie K-D Trees, ausser, dass die Aufteilung zwischen (statt an) den Datenpunkten gemacht wird – Datenpunkte werden nur in den Blättern gespeichert – Jeder innere Knoten enthält den Median der Menge der noch übrigen, in diesem Teil befindlichen Knoten (bzgl. einem Schlüssel) – Aufteilung nicht mehr abwechselnd nach Schlüsseln, sondern nach dem Schlüssel, der noch die größte Differenz zwischen min und max besitzt. Petra Mutzel Alg. & Dat. WS 08/09 60 Adaptiver K-D Tree: Beispiel (0,100) y (5,45) DENVER (25,35) OMAHA (0,0) Alg. & Dat. WS 08/09 61 Adaptive K-D Trees (100,100) (60,75) TORONTO Petra Mutzel • Diskussion: – Ist nicht notwendigerweise balanciert – Statische Datenstruktur (alle Punkte müssen vorher bekannt sein, sonst nicht sinnvoll) – Deletion ist sehr komplex – Suchen: ähnlich wie bei K-D Trees (80,65) BUFFALO (35,40) CHICAGO (50,10) Mobile x Petra Mutzel (85,15) ATLANTA (90,5) MIAMI (100,0) Alg. & Dat. WS 08/09 62 Petra Mutzel Alg. & Dat. WS 08/09 63 K-D Trees: Deletion K-D Trees: Deletion • Diskussion (k=2): – Deletion ist nicht so leicht wie bei binären Suchbäumen – Problem: nach Entfernung von Knoten aus Baum stimmen die Diskriminatoren nicht mehr (z.B. 2 Mal xKoordinaten hintereinander) • Idee: Rekursiv: – DELETION(a,b) – Finde Ersatzknoten (c,d) in einem Unterbaum – Überschreibe (a,b) mit (c,d) – DELETION(c,d) • Kandidaten für Ersatzknoten: – Sei (a,b) x-Diskriminator, dann: – (1) Entweder Knoten im linken Teilbaum mit größter xKoordinate – (2) Oder Knoten im rechten Teilbaum mit kleinster xKoordinate Petra Mutzel Alg. & Dat. WS 08/09 64 – (1) scheidet aus wegen Abmachung bzgl. gleicher Schlüsselwerte, denn – Annahme: sei (c,d) aus linkem Teilbaum, dann könnte ein anderer Knoten (c,z) in linkem Teilbaum existieren Petra Mutzel Alg. & Dat. WS 08/09 65 9 K-D Trees: Beispiel Deletion • Kandidaten für Ersatzknoten: – Sei (a,b) x-Diskriminator, dann ist Kandidat: – Knoten im rechten Teilbaum von a mit kleinster xKoordinate • Problem: rechter Teilbaum von a ist leer • Lösung: – Finde Knoten (c,d) mit kleinster x-Koordinate in linkem Teilbaum von a – Hänge den linken Teilbaum von (a,b) an den rechten Teilbaum von (c,d) – Rekursiver Aufruf von DELETION(c,d) • Beispiel: Petra Mutzel Alg. & Dat. WS 08/09 66 K-D Trees: Deletion Alg. & Dat. WS 08/09 K-D Trees: Bereichssuche (0,100) C(25,50) G(55,40) E(30,45) H(45,35) B(10,30) F(30,35) I(50,30) y D(35,25) A(20,20) (0,0) x (60,0) 68 • Ausgabe aller Knoten (x,y), die sich innerhalb des Gebietes mit Radius d (euklidisch) um (a,b) befinden,d.h. (a-x)2+(b-y)2≤d2 Petra Mutzel Alg. & Dat. WS 08/09 72 K-D Trees: Bereichssuche (100,100) (60,75) TORONTO y (60,60) K-D Trees: Bereichssuche • Problem reduziert auf: • Bestimme den Knoten mit kleinsten x- bzw. y-Koordinate in Teilbaum von (a,b): – Muss im linken Teilbaum eines x-Diskrimina-tors sein – Kann im linken oder rechten Teilbaum eines yDiskriminators sein • Analyse: – Dieser Aufwand ist O(N1-1/k) Petra Mutzel (0,60) K-D Trees: Deletion • Analyse: – Worst Case für vollständigen K-D Tree: – O(k N1-1/k) (80,65) BUFFALO (5,45) DENVER (25,35) OMAHA (0,0) (85,15) (35,40) ATLANTA CHICAGO (50,10) Mobile (90,5) MIAMI x (88,6), d=3 (100,0) Petra Mutzel Alg. & Dat. WS 08/09 74 10 Diskussion K-D Trees • An jedem Knoten muss nur jeweils ein Schlüsselvergleich durchgeführt werden. • Speicherplatz: – Blätter: es gibt nur maximal zwei NULL-Pointer – Benötigter Speicherplatz pro innerer Knoten: 1+1+1+1+k für LEFT, RIGHT, NAME, DISC + k Wörter für k Schlüssel • Adaptive K-D Trees: – Innere Knoten benötigen nur 5 Wörter • Nachteil gegenüber Quadtree: – Quadtree ist eine parallele Datenstruktur (k Schlüsselvergleiche), K-D Trees nicht Petra Mutzel Alg. & Dat. WS 08/09 75 11