Algorithmische Geometrie: Abfragen Orthogonaler Bereiche

34
Algorithmische Geometrie: Abfragen Orthogonaler Bereiche Algorithmische Geometrie: Abfragen Orthogonaler Bereiche Nico D ¨ uvelmeyer WS 2009/2010, 8.12.2009 Nico D ¨ uvelmeyer WS 2009/2010, 8.12.2009

Transcript of Algorithmische Geometrie: Abfragen Orthogonaler Bereiche

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