Algorithmische Geometrie: Abfragen Orthogonaler Bereiche

Werbung
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Algorithmische Geometrie: Abfragen Orthogonaler
Bereiche
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Überblick
1
1-dimensionale Bereichsabfragen
2
Kd-Baum
Struktur
Aufbau
Abfrage mit dem Kd-Baum
3
Range-Baum
4
Entartete Lage
5
Fractional Cascading
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Motivation Datenbankabfragen
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Motivation Computergraphik
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Überblick
1
1-dimensionale Bereichsabfragen
2
Kd-Baum
Struktur
Aufbau
Abfrage mit dem Kd-Baum
3
Range-Baum
4
Entartete Lage
5
Fractional Cascading
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
1-dimensionale Bereichsabfragen
geg: P := {p1 , . . . , pn } ⊂ R, P = {5, 3, 8, 9, 1, 13}
geg: Intervall [x , x 0 ] = [6, 10]
ges: P ∩ [x , x 0 ]
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Algorithmus 6.1
Eingabe: ein Baum T und zwei Zahlen x , x 0 mit x 6 x 0
Ausgabe: der Knoten v , an dem sich die Pfade zu x und x 0 trennen oder
das Blatt, mit dem beide Pfade enden
1:
2:
3:
4:
5:
6:
7:
Funktion F INDE T RENN K NOTEN(T, x , x 0 )
v ← Wurzel(T)
Solange v kein Blatt von T ist und (x 0 6 xv oder x > xv ), mache
Wenn x 0 6 xv dann
v ← linkerSohn(v )
sonst
v ← rechterSohn(v )
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Algorithmus 6.1 (gekürzt)
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
Funktion 1DB EREICHS A BFRAGE(T, [x , x 0 ])
vt ←F INDE T RENN K NOTEN(T, x , x 0 )
Wenn vt ein Blatt ist, dann
teste, ob der Punkt in vt in [x , x 0 ] liegt und liefere diesen
gegebenenfalls zurück.
sonst
v ← linkerSohn(vt )
Solange v kein Blatt ist, mache
Wenn x 6 xv dann
L IEFERE T EILBAUM(rechterSohn(v ))
v ← linkerSohn(v )
sonst
v ← rechterSohn(v ) .
Liefere gegebenenfalls den Punkt, der in v gespeichert ist.
Folge analog dem Pfad zu x 0 und liefere dabei alle Punkte in
Teilbäumen links des Pfades. Behandel das gefundene Blatt.
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Lemma 6.2
Die Funktion 1DB EREICHS A BFRAGE(T, [x , x 0 ]) von Algorithm 6.1 liefert
genau die gesuchten Punkte.
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Satz 6.3
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Überblick
1
1-dimensionale Bereichsabfragen
2
Kd-Baum
Struktur
Aufbau
Abfrage mit dem Kd-Baum
3
Range-Baum
4
Entartete Lage
5
Fractional Cascading
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Struktur Kd-Baum
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Algorithmus 6.4(gekürzt)
Eingabe: eine Punktmenge P ⊂ R2 und eine aktuelle Tiefe t
Ausgabe: die Wurzel eines Kd-Baums, der P speichert
1:
2:
3:
4:
5:
6:
7:
8:
Funktion B AUE K D B AUM(P , t)
Wenn P nur einen Punkt enthält, dann
liefere ein Blatt, das genau diesen Punkt speichert.
sonst
Wenn t gerade ist, dann
teile P durch eine vertikale Gerade l in zwei gleich große
Teilmengen P1 , P2 .
sonst
Teile P durch eine horizontale Gerade l in zwei gleich große
Teilmengen P1 , P2 .
vl ← B AUE K D B AUM(P1 , t + 1)
10:
vr ← B AUE K D B AUM(P2 , t + 1)
11:
Erzeuge einen neuen Knoten v mit linkem Sohn vl und rechten
Sohn vr , in dem l gespeichert ist.
9:
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Lemma 6.5
Kd-Baum
Speicherplatz in O (n)
Aufbauzeit in O (n log n)
Beweis.
Baum mit n Blättern hat n − 1 innere Knoten
Mediane finden:
einmal sortieren in O (n log n)
dauernd aktuell halten
Menge aufteilen: lokal lineare Zeit
T (n ) =
O (1),
falls n = 1
O (n) + 2T (n/2), falls n > 1 ,
T (n) ∈ O (n log n)
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Bereich b(v )
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Algorithmus 6.6
1:
2:
3:
4:
5:
6:
7:
8:
9:
Funktion S UCHE I M K D B AUM(v , R)
Wenn v ein Blatt ist, dann
liefere den Punkt in v , falls er zu R gehört.
sonst
Wenn b(linkerSohn(v )) ⊂ R, dann
L IEFERE T EILBAUM(linkerSohn(v ))
sonst
Wenn b(linkerSohn(v )) ∩ R 6= ∅, dann
S UCHE I M K D B AUM(linkerSohn(v ), R)
10:
11:
12:
13:
14:
Nico Düvelmeyer
Wenn b(rechterSohn(v )) ⊂ R, dann
L IEFERE T EILBAUM(rechterSohn(v ))
sonst
Wenn b(rechterSohn(v )) ∩ R 6= ∅, dann
S UCHE I M K D B AUM(rechterSohn(v ), R)
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Lemma 6.7
Eine Abfrage mit einem achsenparallelen Rechteck in einem Kd-Baum,
√
der n Punkte speichert, kann in Zeit in O ( n + k ) ausgeführt werden,
wobei k die Anzahl der gelieferten Punkte bezeichnet.
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Beweis Lemma 6.7
Zeile 6 und 11 zusammen Zeit in O (k )
Anzahl besuchter Knoten v , die nicht an L IEFERE T EILBAUM(·)
übergeben wurden
Zählen Schnittpunkte Rand von R mit b(v )
Rekursion für maximale Anzahl Q (n) der von Vertikalen l
geschnittenen Bereiche:
Q (n ) =
O (1),
falls n = 1
2 + 2Q (n/4), falls n > 1 .
√
Q (n ) ∈ O ( n )
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Satz 6.8
Ein Kd-Baum für eine Menge von n Punkten der Ebene benötigt
Speicherplatz in O (n) und zum initialisieren Zeit in O (n log n). Eine
Abfrage mit einem achsenparallelem Rechteck auf dem Kd-Baum benötigt
√
Zeit in O ( n + k ), wobei k die Anzahl gelieferter Punkte ist.
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Kd-Bäume im Rd , d > 2
Speicherplatz in O (n)
Initialisierungszeit in O (n log n)
Abfragezeit in O (n1−1/d + k )
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Überblick
1
1-dimensionale Bereichsabfragen
2
Kd-Baum
Struktur
Aufbau
Abfrage mit dem Kd-Baum
3
Range-Baum
4
Entartete Lage
5
Fractional Cascading
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Idee Range-Baum
mehr Geschwindigkeit
mehr Speicherplatz
erst nach x-Koordinate suchen, dort mit angepasster Suchstruktur
nach y-Koordinate
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Algorithmus 6.9
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Funktion B AUE 2DR ANGE B AUM(P)
Initialisiere die zugeordnete Struktur: baue einen binären
Suchbaum Ts auf der Menge Py der y-Koordinaten. Speichere in den
Blättern von Ts vollständig die Originalpunkte.
Wenn P nur einen Punkt enthält, dann
erzeuge ein Blatt v , das genau diesen Punkt und Ts speichert.
sonst
Teile P in zwei Teilmengen auf. Dazu sei xm der kleinste Median
aller x-Koordinaten in P. P1 sei die Menge der Punkte (x , y ) in P mit
x 6 xm , und P2 ← P \ P1 .
vl ← B AUE 2DR ANGE B AUM(P1 )
vr ← B AUE 2DR ANGE B AUM(P2 )
Erzeuge einen neuen Knoten v mit Vergleichswert xv := xm ,
linkem Sohn vl , rechten Sohn vr , und zugeordneter Struktur Ts .
Liefere v zurück.
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Lemma 6.10
Ein Range-Baum für n Punkte der Ebene benötigt Speicherplatz in
O (n log n).
Beweis.
primärer Suchbaum: O (n)
jeder Punkt p ∈ P in jeder Tiefe in genau einer zugeordneten Struktur
maximale Tiefe: O (log n)
Speicherplatz zugeordneten Struktur: linear in lokaler Größe
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Algorithmus 6.11 (gek.)
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
Funktion 2DB EREICHS A BFRAGE(T, [x , x 0 ] × [y , y 0 ])
vt ←F INDE T RENN K NOTEN(T, x , x 0 )
Wenn vt ein Blatt ist, dann
teste, ob der Punkt in vt in [x , x 0 ] × [y , y 0 ] liegt und liefere
diesen gegebenenfalls zurück.
sonst
v ← linkerSohn(vt )
Solange v kein Blatt ist, mache
Wenn x 6 xv dann
1DB EREICHS A BFRAGE(Ts (rechterSohn(v )), [y , y 0 ])
v ← linkerSohn(v )
sonst
v ← rechterSohn(v ) .
Liefere gegebenenfalls den Punkt, der in v gespeichert ist.
Folge analog dem Pfad von vt zu x 0 und führe
1DB EREICHS A BFRAGE(Ts , [y , y 0 ]) für alle Teilbäume links des Pfades
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Lemma 6.12
Eine Abfrage mit einem achsenparallelem Rechteck in einem
Range-Baum mit n Punkten der Ebene benötigt Zeit in O ((log n)2 + k ),
wobei k die Anzahl der gefundenen Punkte ist.
Beweis.
O (log n) viele besuchte Knoten v von T
Ausserhalb von 1DB EREICHS A BFRAGE konstante Zeit für v .
Zeit für 1DB EREICHS A BFRAGE in O (log n 0 + kv ) für kv aus n 0 6 n
Punkten
Gesamtzeit in
Nico Düvelmeyer
P
v
O (log n + kv ), mit
P
v
kv = k
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Satz 6.13
Es sei P eine Menge von n Punkten der Ebene. Ein Range-Baum für P
kann mit Speicherplatz in O (n log n) in einer Zeit in O (n log n) aufgebaut
werden. Durch eine Abfrage mit diesem Baum können die Punkte von P
innerhalb eines achsenparallelen rechteckigen Abfragegebietes in Zeit in
O ((log n)2 + k ) bestimmt werden, wobei k die Anzahl der gelieferten
Punkte ist.
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Satz 6.14
Es sei P eine Menge von n Punkten im Rd mit d > 2. Ein Range-Baum für
P kann mit Speicherplatz in O (n(log n)d −1 ) in einer Zeit in O (n(log n)d −1 )
aufgebaut werden. Durch eine Abfrage mit diesem Baum können die
Punkte von P innerhalb eines achsenparallelen rechteckigen
Abfragegebietes in Zeit in O ((log n)d + k ) bestimmt werden, wobei k die
Anzahl der gelieferten Punkte ist.
Beweis.
analog mit Induktion
Jeder Punkt einmal pro Tiefe in zugeordneten Strukturen:
(d − 1)-dimensionaler Range-Baum
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Überblick
1
1-dimensionale Bereichsabfragen
2
Kd-Baum
Struktur
Aufbau
Abfrage mit dem Kd-Baum
3
Range-Baum
4
Entartete Lage
5
Fractional Cascading
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
allgemeine Zahlbereiche
Zahlbereich vollständig geordnet
Folgen von reellen Zahlen
Folgen in R ∪ {+∞, −∞}, den zusammengesetzte Zahlen in R̂.
p = (x , y ) von R2 wird im (R̂)2 zu p̂ := ((x , y ), (y , x )).
Rechteck R = [x , x 0 ] × [y , y 0 ] in R2 wird zu Rechteck in (R̂)2
R̂ := [(x , −∞), (x 0 , +∞)] × [(y , −∞), (y 0 , +∞)]
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Lemma 6.15
Sei p ein Punkt der Ebene und R ein rechteckiger Bereich. Dann ist
p∈R
⇐⇒
p̂ ∈ R̂.
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Überblick
1
1-dimensionale Bereichsabfragen
2
Kd-Baum
Struktur
Aufbau
Abfrage mit dem Kd-Baum
3
Range-Baum
4
Entartete Lage
5
Fractional Cascading
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Überlagerte Range-Bäume
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Satz 6.16
Der überlagerte Range-Baum für P ⊂ Rd benötigt
Speicherplatz in O (n(log n)d −1 )
Aufbauzeit in O (n(log n)d −1 )
Abfragezeit in O ((log n)d −1 + k )
Beweis.
2-dimensionaler Fall (Abfragegebiet [x , x 0 ] × [y , y 0 ]):
in Ts (vt ) suchen wir ersten Punkt (px , py ) mit py > y
Zeit in O (log n)
halten dann beim Absteigen diese Position in konstanter Zeit aktuell
Anpassung von L IEFERE T EILBAUM(v ) in Zeit in O (1 + kv ).
Rest wie bisher
Nico Düvelmeyer
WS 2009/2010, 8.12.2009
Herunterladen