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