algorithmische geometrie: abfragen orthogonaler bereiche
TRANSCRIPT
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Algorithmische Geometrie: Abfragen OrthogonalerBereiche
Nico Duvelmeyer
WS 2009/2010, 8.12.2009
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Uberblick
1 1-dimensionale Bereichsabfragen
2 Kd-BaumStrukturAufbauAbfrage mit dem Kd-Baum
3 Range-Baum
4 Entartete Lage
5 Fractional Cascading
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Motivation Datenbankabfragen
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Motivation Computergraphik
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Uberblick
1 1-dimensionale Bereichsabfragen
2 Kd-BaumStrukturAufbauAbfrage mit dem Kd-Baum
3 Range-Baum
4 Entartete Lage
5 Fractional Cascading
Nico Duvelmeyer 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 ′] = [6, 10]ges: P ∩ [x , x ′]
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Algorithmus 6.1
Eingabe: ein Baum T und zwei Zahlen x , x ′ mit x 6 x ′
Ausgabe: der Knoten v , an dem sich die Pfade zu x und x ′ trennen oderdas Blatt, mit dem beide Pfade enden
1: Funktion FINDETRENNKNOTEN(T, x , x ′)2: v ← Wurzel(T)3: Solange v kein Blatt von T ist und (x ′ 6 xv oder x > xv ), mache4: Wenn x ′ 6 xv dann5: v ← linkerSohn(v)6: sonst7: v ← rechterSohn(v)
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Algorithmus 6.1 (gekurzt)8: Funktion 1DBEREICHSABFRAGE(T, [x , x ′])9: vt ←FINDETRENNKNOTEN(T, x , x ′)
10: Wenn vt ein Blatt ist, dann11: teste, ob der Punkt in vt in [x , x ′] liegt und liefere diesen
gegebenenfalls zuruck.12: sonst13: v ← linkerSohn(vt)14: Solange v kein Blatt ist, mache15: Wenn x 6 xv dann16: LIEFERETEILBAUM(rechterSohn(v))17: v ← linkerSohn(v)18: sonst19: v ← rechterSohn(v) .
20: Liefere gegebenenfalls den Punkt, der in v gespeichert ist.21: Folge analog dem Pfad zu x ′ und liefere dabei alle Punkte in
Teilbaumen links des Pfades. Behandel das gefundene Blatt.Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Lemma 6.2
Die Funktion 1DBEREICHSABFRAGE(T, [x , x ′]) von Algorithm 6.1 liefertgenau die gesuchten Punkte.
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Satz 6.3
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Uberblick
1 1-dimensionale Bereichsabfragen
2 Kd-BaumStrukturAufbauAbfrage mit dem Kd-Baum
3 Range-Baum
4 Entartete Lage
5 Fractional Cascading
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Struktur Kd-Baum
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Algorithmus 6.4(gekurzt)Eingabe: eine Punktmenge P ⊂ R2 und eine aktuelle Tiefe tAusgabe: die Wurzel eines Kd-Baums, der P speichert
1: Funktion BAUEKDBAUM(P, t)2: Wenn P nur einen Punkt enthalt, dann3: liefere ein Blatt, das genau diesen Punkt speichert.4: sonst5: Wenn t gerade ist, dann6: teile P durch eine vertikale Gerade l in zwei gleich große
Teilmengen P1,P2.7: sonst8: Teile P durch eine horizontale Gerade l in zwei gleich große
Teilmengen P1,P2.9: vl ← BAUEKDBAUM(P1, t + 1)
10: vr ← BAUEKDBAUM(P2, t + 1)11: Erzeuge einen neuen Knoten v mit linkem Sohn vl und rechten
Sohn vr , in dem l gespeichert ist.12: Liefere v zuruck.
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Lemma 6.5Kd-Baum
Speicherplatz in O(n)Aufbauzeit in O(n log n)
Beweis.
Baum mit n Blattern hat n − 1 innere KnotenMediane 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 Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Bereich b(v)
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Algorithmus 6.6
1: Funktion SUCHEIMKDBAUM(v ,R)2: Wenn v ein Blatt ist, dann3: liefere den Punkt in v , falls er zu R gehort.4: sonst5: Wenn b(linkerSohn(v)) ⊂ R, dann6: LIEFERETEILBAUM(linkerSohn(v))7: sonst8: Wenn b(linkerSohn(v)) ∩ R 6= ∅, dann9: SUCHEIMKDBAUM(linkerSohn(v),R)
10: Wenn b(rechterSohn(v)) ⊂ R, dann11: LIEFERETEILBAUM(rechterSohn(v))12: sonst13: Wenn b(rechterSohn(v)) ∩ R 6= ∅, dann14: SUCHEIMKDBAUM(rechterSohn(v),R)
Nico Duvelmeyer 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) ausgefuhrt werden,
wobei k die Anzahl der gelieferten Punkte bezeichnet.
Nico Duvelmeyer 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 LIEFERETEILBAUM(·)ubergeben wurden
Zahlen Schnittpunkte Rand von R mit b(v)
Rekursion fur maximale Anzahl Q(n) der von Vertikalen lgeschnittenen Bereiche:
Q(n) =
{O(1), falls n = 1
2 + 2Q(n/4), falls n > 1 .
Q(n) ∈ O(√
n)
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Satz 6.8
Ein Kd-Baum fur eine Menge von n Punkten der Ebene benotigtSpeicherplatz in O(n) und zum initialisieren Zeit in O(n log n). EineAbfrage mit einem achsenparallelem Rechteck auf dem Kd-Baum benotigtZeit in O(
√n + k), wobei k die Anzahl gelieferter Punkte ist.
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Kd-Baume im Rd , d > 2
Speicherplatz in O(n)
Initialisierungszeit in O(n log n)
Abfragezeit in O(n1−1/d + k)
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Uberblick
1 1-dimensionale Bereichsabfragen
2 Kd-BaumStrukturAufbauAbfrage mit dem Kd-Baum
3 Range-Baum
4 Entartete Lage
5 Fractional Cascading
Nico Duvelmeyer 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 Suchstrukturnach y -Koordinate
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Algorithmus 6.91: Funktion BAUE2DRANGEBAUM(P)2: Initialisiere die zugeordnete Struktur: baue einen binaren
Suchbaum Ts auf der Menge Py der y -Koordinaten. Speichere in denBlattern von Ts vollstandig die Originalpunkte.
3: Wenn P nur einen Punkt enthalt, dann4: erzeuge ein Blatt v , das genau diesen Punkt und Ts speichert.5: sonst6: 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 mitx 6 xm, und P2 ← P \ P1.
7: vl ← BAUE2DRANGEBAUM(P1)8: vr ← BAUE2DRANGEBAUM(P2)9: Erzeuge einen neuen Knoten v mit Vergleichswert xv := xm,
linkem Sohn vl , rechten Sohn vr , und zugeordneter Struktur Ts.10: Liefere v zuruck.
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Lemma 6.10
Ein Range-Baum fur n Punkte der Ebene benotigt Speicherplatz inO(n log n).
Beweis.
primarer 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 Große
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Algorithmus 6.11 (gek.)1: Funktion 2DBEREICHSABFRAGE(T, [x , x ′]× [y , y ′])2: vt ←FINDETRENNKNOTEN(T, x , x ′)3: Wenn vt ein Blatt ist, dann4: teste, ob der Punkt in vt in [x , x ′]× [y , y ′] liegt und liefere
diesen gegebenenfalls zuruck.5: sonst6: v ← linkerSohn(vt)7: Solange v kein Blatt ist, mache8: Wenn x 6 xv dann9: 1DBEREICHSABFRAGE(Ts(rechterSohn(v)), [y , y ′])
10: v ← linkerSohn(v)11: sonst12: v ← rechterSohn(v) .
13: Liefere gegebenenfalls den Punkt, der in v gespeichert ist.14: Folge analog dem Pfad von vt zu x ′ und fuhre
1DBEREICHSABFRAGE(Ts, [y , y ′]) fur alle Teilbaume links des Pfadesaus.Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Lemma 6.12
Eine Abfrage mit einem achsenparallelem Rechteck in einemRange-Baum mit n Punkten der Ebene benotigt 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 1DBEREICHSABFRAGE konstante Zeit fur v .
Zeit fur 1DBEREICHSABFRAGE in O(log n ′ + kv ) fur kv aus n ′ 6 nPunkten
Gesamtzeit in∑
v O(log n + kv ), mit∑
v kv = k
Nico Duvelmeyer 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 fur Pkann mit Speicherplatz in O(n log n) in einer Zeit in O(n log n) aufgebautwerden. Durch eine Abfrage mit diesem Baum konnen die Punkte von Pinnerhalb eines achsenparallelen rechteckigen Abfragegebietes in Zeit inO((log n)2 + k) bestimmt werden, wobei k die Anzahl der geliefertenPunkte ist.
Nico Duvelmeyer 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 furP 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 konnen diePunkte von P innerhalb eines achsenparallelen rechteckigenAbfragegebietes in Zeit in O((log n)d + k) bestimmt werden, wobei k dieAnzahl der gelieferten Punkte ist.
Beweis.
analog mit Induktion
Jeder Punkt einmal pro Tiefe in zugeordneten Strukturen:(d − 1)-dimensionaler Range-Baum
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Uberblick
1 1-dimensionale Bereichsabfragen
2 Kd-BaumStrukturAufbauAbfrage mit dem Kd-Baum
3 Range-Baum
4 Entartete Lage
5 Fractional Cascading
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
allgemeine Zahlbereiche
Zahlbereich vollstandig 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 ′]× [y , y ′] in R2 wird zu Rechteck in (R)2
R := [(x ,−∞), (x ′,+∞)]× [(y ,−∞), (y ′,+∞)]
Nico Duvelmeyer 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 istp ∈ R ⇐⇒ p ∈ R.
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Uberblick
1 1-dimensionale Bereichsabfragen
2 Kd-BaumStrukturAufbauAbfrage mit dem Kd-Baum
3 Range-Baum
4 Entartete Lage
5 Fractional Cascading
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Uberlagerte Range-Baume
Nico Duvelmeyer WS 2009/2010, 8.12.2009
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche
Satz 6.16
Der uberlagerte Range-Baum fur P ⊂ Rd benotigt
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 ′]× [y , y ′]):
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 LIEFERETEILBAUM(v ) in Zeit in O(1 + kv ).
Rest wie bisher
Nico Duvelmeyer WS 2009/2010, 8.12.2009