Mehrdimensionale Suchstrukturen Exkurs: Datenstruktur Quad Tree • 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. Prof. Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering LS11 Universität Dortmund • Beispiel: Datenbankabfragen 27. VO WS07/08 04. Februar 2008 Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 1 Anwendungsbereiche • • • • • • • • • • 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 3 Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 4 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: Automatisches Zeichnen von Graphen, WS07/08 2 Charakterisierung (1) Datenbanken Computergraphik / Computer Vision Computer-Aided Design Geographische Informationssysteme Bildverarbeitung Mustererkennung Document-Retrieval Data Mining ... Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 • Bereichsabfrage (Range Query): – Berichte alle Punkte aus S, deren k Schlüssel in den gewünschten Bereichen liegen. 5 Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 6 1 ``Fixed Grid´´ Methode Einfache Datenstrukturen • 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) Name 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 Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 • 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 7 Region Quadtrees Point-Region Quadtrees: Beispiel N=10 Punkte (0,100) 8 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´´ Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 9 Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 10 PR Quadtree für Beispiel (100,100) (50,50) (25,25) (75,25) t (75,75) y (0,0) xt (100,0) Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 12 2 Aufbau eines PR Quadtrees Morton Order 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 Morton 1966, space filling curve 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. Abb. aus Wikipedia Laufzeit ? Baum hat Tiefe N Point Quadtrees → Laufzeiten beider Aufbau-Algorithmen: O(N2) (0,100) (100,100) • 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 t 1 2 y 2 3 3 4 5 xt (0,0) 4 (100,0) 5 Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 Beispiel: 16 Point Quadtree zu Beispiel A G H K J C B L J F D F M N I K E L H G B I A M D C E N 3 Point Quadtrees: 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 K L H G M B D C M N 19 Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 20 Point Quadtrees: Analyse Aufbau • 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 N I E I E A A F Z C B L 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: Automatisches Zeichnen von Graphen, WS07/08 H K Z Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 Point Quadtrees: Deletion Beispiel: Deletion Deletion of A • Problem: – Geht nicht so leicht wie bei binären Suchbäumen – Beispiel: Deletion of A 24 G H K F D J C B L I E A M N Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 25 4 Beispiel: Deletion 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: Automatisches Zeichnen von Graphen, WS07/08 Point Quadtrees: Deletion Beispiel: Delete Punkt A • Problem: – Unterbäume der Wurzel 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. 28 G H K F D J C B L I E A M N Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 29 Quadtree zu Beispiel nach Deletion von A Beispiel nach Deletion von A B G H K D J L F J F N M C B E I K D H G C L E I M N Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 39 5 Point Quadtrees: Analyse Deletion Point Quadtree vor Delete A • Theoretisch (Bentley 1988): A J F M – 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. N • Empirisch (Bentley 1988): – Empirisch: N log4 N vs. deutlich größer in Original K L H G B – Gesamtpfadlänge verringert sich leicht vs. deutlich Verlängerung in Original I • Worst Case: D C – O(N2) E • Deletion sehr komplex! • Alternative: Pseudo Quadtrees Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 Pseudo Quadtrees Pseudo Quadtrees: Beispiel (0,100) • 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. (100,100) (60,75) TORONTO t 70,70 y (80,65) BUFFALO (40,50) (35,40) (5,45) DENVER CHICAGO (25,35) (26,37) OMAHA (85,15) ATLANTA (65,12) (50,10) Mobile Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 48 Pseudo Quadtree für Beispiel TORONTO BUFFALO (26,37) OMAHA DENVER CHICAGO (65,12) ATLANTA MIAMI MOBILE Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 (90,5) MIAMI (0,0) (100,0) xt Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 49 Pseudo Quadtrees: (40,50) (70,70) 47 50 • 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: Automatisches Zeichnen von Graphen, WS07/08 51 6 K-D Trees: Point Quadtrees: Diskussion • 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) • 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 Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 K-D Tree: Beispiel (0,100) (100,100) t (60,75) TORONTO y (80,65) BUFFALO (5,45) DENVER (25,35) OMAHA (85,15) (35,40) ATLANTA CHICAGO (50,10) Mobile (90,5) MIAMI xt (0,0) (100,0) K-D Tree: Einfügen (0,100) (100,100) (60,75) TORONTO (80,65) BUFFALO t Z y (5,45) DENVER (25,35) OMAHA (0,0) (85,15) (35,40) ATLANTA CHICAGO (50,10) Mobile (90,5) MIAMI xt (100,0) 52 Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 53 K-D Trees: • Datenstruktur: – LEFT, RIGHT: linkes und rechtes Kind (referenziert als SON(P,I) bzw. LOSON(P) und HISON(P)) – XCOORD, YCOORD, ... – NAME – DISC: Diskriminator bzgl. k-tem Schlüssel – Abmachung für Diskriminatoren: gleiche Schlüsselwerte befinden sich im rechten Teilbaum Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 55 K-D Trees: INSERT • Analog zu binären Suchbäumen: – Wir suchen den Punkt abwechselnde 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 Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 57 7 K-D Trees: Bereichssuche K-D Trees: Bereichssuche (0,100) (100,100) • 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 t (60,75) TORONTO y (5,45) DENVER (25,35) OMAHA Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 70 K-D Trees: Bereichssuche (85,15) (35,40) ATLANTA CHICAGO (50,10) Mobile (90,5) MIAMI (88,6), d=3 (0,0) (100,0) xt Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 71 Diskussion K-D Trees • Analyse: – Worst Case für vollständigen K-D Tree: – O(k N1-1/k) Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 (80,65) BUFFALO • 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 72 Petra Mutzel: Automatisches Zeichnen von Graphen, WS07/08 73 8