Exkurs: Datenstruktur Quad Tree Mehrdimensionale Suchstrukturen

Werbung
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
Herunterladen