geometrische datenstrukturen

27
Geometrische Datenstrukturen Haozhe Chen Aaron Richardson

Upload: swain

Post on 14-Jan-2016

48 views

Category:

Documents


0 download

DESCRIPTION

Haozhe Chen Aaron Richardson. Geometrische Datenstrukturen. Range Trees. 1D Range Tree: Ein Balance Binärbaum Jeder Blatt repräsentiert eine Punkte - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Geometrische Datenstrukturen

Geometrische Datenstrukturen

Haozhe Chen

Aaron Richardson

Page 2: Geometrische Datenstrukturen

Range Trees

1D Range Tree: • Ein Balance Binärbaum

• Jeder Blatt repräsentiert eine Punkte

• Jeder Innerknoten marken die größte Punkt an seinem Linken Teilbaum. Alle Elemente in dem rechten Teilbaum sind Größer als die Stamminnerknoten.

Page 3: Geometrische Datenstrukturen

Konstruieren

• Sortieren die Punkte. Fügen die Punkte in die Blätter.

• Suchen das Median aus, als die Begrenz teilt die Bereich zu 2 Teilen. Linkes Teil speichert im Linken Teilbaum, rechtes Teil speichert im rechten Teilbaum.

• Speichen die Wert der größten Punkt an dem linken Teilbaum in diesem Stamminnerknoten.

Page 4: Geometrische Datenstrukturen

Komplexität

• Speicherbedarf: O(n)

• Konstruierungszeit: O(nlogn)

• Laufzeit der Abfrage nach die punkte in einem gegebenen Bereich: O(k+logn)

Page 5: Geometrische Datenstrukturen

2D Range Tree

• Hauptbaum ist ein mit X Koordinate konstruiertes 1D Range Tree.

• Zubehöriger Baum ist ein mit Y Koordinate konstruiertes 1D Range Tree.

• Jeder Innerknoten repräsentiert einen zubehörigen Baum mit gleichen Blättern von seinem Teilbäume.

Page 6: Geometrische Datenstrukturen

Komplexität

• Queryzeit: O((logn)^2 + k)

• Speicherbedarf: O(nlogn)

• Konstruierungszeit: O(nlogn)

Page 7: Geometrische Datenstrukturen

kd-Trees

• Aufgabe: Suche nach einer Menge von Punkten innerhalb eines Quadrats [x, x′] × [y, y′], x < x′, y < y′.

• Ein Punkt p := (px, p

y) liegt im Quadrat

genau dann wenn px [x, x′] und p∈

y [y, y′]∈

Page 8: Geometrische Datenstrukturen

Algorithm: BuildKdTree (P, Depth)

• Input: A set of points p and the current depth depth• Output: The root of a kd-Tree storing P.• 1: if P contains only one point• 2: then return leaf with this point.• 3: else if depth is even• 4: then ℓ ist the median x-coordinate in P, then split P into two subsets

with all points in P1 smaller or equal to ℓ in the x-coordinate and P

2 the set of

point with x-coordinate larger than ℓ.• 5: else ℓ ist the median y-coordinate in P, then split P into two subsets

with all points in P1 smaller or equal to ℓ in the y-coordinate and P

2 the set of

point with y-coordinate larger than ℓ.• 6: νleft := BuildKDTree(P

1, depth + 1)

• 7: νright := BuildKDTree(P2, depth + 1)

• 8: create node ν storing ℓ, make νleft

left child of ν and make νright

right child of ν.

• 9: return ν

Page 9: Geometrische Datenstrukturen

Komplexität: BuildKdTree

• So ist die Aufbauzeit von n Punkten (nachdem sie nach x oder y einsortiertsind) ist

• T (n) = (O(1) ) if n = 1.

• O(n) + 2T ( n/2 ) ⌈ ⌉ if n > 1.

• was am Ende O(n log n) ist. Da auch das Sortieren O(n log n) ist, hat man eine Laufzeit von O(n log n).

Page 10: Geometrische Datenstrukturen

Algorithm: SearchKDTree (ν, R)

• Input: root of kd-tree and range R:=[x,x'] x [y,y']• Output: points at leaves below v that lie in range• 1: if ν is leaf• 2: then report point stored at ν if it lies in R.• 3: else if region((lc(ν)) is fully contained in R.• 4: then ReportSubtree(lc((ν)))• 5: else if region((lc(ν)) intersects R.• 6: then SearchKDTree(lc(ν))• 7: if region((rc(ν)) is fully contained in R.• 8: then ReportSubtree(rc((ν)))• 9: else if region((rc(ν)) intersects R.• 10: then SearchKDTree(rc(ν))

Page 11: Geometrische Datenstrukturen

Kömplexität: SearchKDTree

• So ist die Zahl der Nodes, die eine senkrechte

Gerade treffen, genau• Q(n) = (O(1)) if n = 1.• 2 + 2T (n/4) if n > 1.• oder nach Induktion Q(n) = O(√n). Q(√n) gilt

auch für waagerechte Geraden und allgemein für die Grenze eines Quadrats. (Die Grenzen müssen parellel mit den Achsen sein.) So ist die Komplexität der Abfrage O(√n + k).

Page 12: Geometrische Datenstrukturen

Intervallbäume

• Staat Punkte wollen wir nun Segmente archivieren und abfragen. Die Segmente sind hier eindimensional. Jedes Node des Baumes hat einen Wert x

mid. Am jedem

Node eines Baume speichern wir nur die Intervalle, die sog. Mittelintervalle,die den Punkt x

mid hat . Alle Intervalle links und

rechts von xmid

werden in den Unternodes gespeichert.

Page 13: Geometrische Datenstrukturen

Algorthm:ConstrctIntervalTree

• Input: set I of intervals on the real line• Output: root of an internal tree for I• 1: if I = empty set;• 2: then return empty leaf• 3: else• 4: create node ν. Compute x

mid, the median of the set of interval

endpoints, and store xmid

with ν.• 5: Sort out I

mid , I

left and I

right .Constuct two sorted lists for Imid: a

list Lleft

(ν) sorted on left endpoint and list Lright

(ν) sorted on right endpoint.

• 6: lc(ν):= ConstructIntervalTree(Lleft

)• 7: rc(ν):= ConstructIntervalTree(L

right)

• 8: return ν

Page 14: Geometrische Datenstrukturen

Komplexität: ConstrctIntervalTree

• Um die Listen Lleft

(ν) und Lright

(ν) zu sortieren brauchen wir O(n

mid log n

mid) in

jedem Node oder O(n log n) insgesamt.

Page 15: Geometrische Datenstrukturen

Algorithm: QueryIntervalTree (ν, R)

• Input: root ν of interval tree and query point qx

• Output: All intervals that contain qx

• 1: if ν is not a leaf• 2: then if (q

x < x

mid(ν)

• 3: then walk along list Lleft

(ν), starting at leftmost endpoint, reporting all the intervals that contain q

x. Stop

as soon intervall does not contain qx.• 4: QueryIntervallTree (lc(ν), qx)• 5: else walk along list L

right(ν), starting at rightmost

endpoint,reporting all the intervals that contain qx. Stop

as soon intervalldoes not contain qx.

• 6: QueryIntervallTree (rc(ν), qx)

Page 16: Geometrische Datenstrukturen

Komplexität: QueryIntervalTree

• Ein Query an jedem Node braucht O(1+kv)

Zeit (kv sind die Imid Intervallen am Node ν

zurückgegeben) und für alle Nodes braucht man O(log n + k) Zeit.

Page 17: Geometrische Datenstrukturen

Priorität-Suchbäume

Wir nehmen wieder an, die Punkte sind zweidimensional und haben paarweise verschiedene x- und y-Koordinaten. Wir suchen nach allen Punkten in einem Range (−∞, q

x] × [q

y, q'

y]) im Baum T.

Page 18: Geometrische Datenstrukturen

Der Baum wird so gebaut:

• wenn P = 0 dann der Baum hat ein leeres Blatt• sonst sei p

min der Punkt in P mit kleinster x-Koordinate. Es sei y

mid

Medien von den y-Koordinate. Dann istP

below := {p P\{p∈

min} : p

y < y

mid}

Pabove

:= {p P\{p∈min

} : py > y

mid}

So jeder (Unter)baum hat Node ν und die x- und y-Koordinate vom Node sind gespeichert.

• linker Unterbaum von ν is Priorität-Suchbaum von Pbelow

• rechter Unterbaum von ν is Priorität-Suchbaum von Pabove

Page 19: Geometrische Datenstrukturen

Algorithm: QueryPrioSearchTree (T , (−1, qx] × [qy, q′])

• Input: A priority search tree and a range, unbounded to the left.• Output: All points lying in the range.• 1: Search with q

y and q′

y in T . Let ν

split be the node where the

• two search paths split.• 2: for each node ν on the search path of q

y or q′

y

• 3: do if p(ν) in (−1, qx]x[qy, q′

y]then report p(v)

• 4: for each node ν on the path of qy in the left subtree of vsplit

• 5: do if the search path goes left at ν• 6: then ReportInSubtree(rc(ν), q

x)

• 7: for each node ν on the path of qy in the right subtree of vsplit

• 8: do if the search path goes left at ν• 9: then ReportInSubtree(rc(ν), q

x)

Page 20: Geometrische Datenstrukturen

Algorithm: ReportInSubtree (ν,qx)

• Input: The root ν of a subtree of a priority search tree and value q

x

• Output: All points in the subtree with x-coordinate at most q

x

• 1: if ν is not leaf and (p(ν))x <= q

x

• 2: then report P(ν))• 3: ReportInSubtree (lc(ν), qx)• 4: ReportInSubtree (rc(ν), qx)

Page 21: Geometrische Datenstrukturen

Komplexität: QueryPrioSearchTree

• Der Algorithmus braucht O(n) Platz (jeder Punkt einmal gespeichert) und kann in O(n log n) aufgebaut sein.

• Für eine Anfrage brauchen wir O(log n + k) Zeit.

Page 22: Geometrische Datenstrukturen

Segment-Bäume

• Elementares Segment

• Segment-Bäume– Vollständige Binärbäume– Jeder Blatt präsentiert ein elementares

Segment– Jeder Innerknoten präsentiert eine

Vereingung der Blätten an seinen Teilbäumen.

Page 23: Geometrische Datenstrukturen

Konstruieren

• Sortiere alle Endepunkte• Bauen einen leeren vollständigen

Binärbaum• Fügen die elementare Segmente ein• Fügen die Vereinigung der

elementaren Segmenten an die Innerknoten ein

Page 24: Geometrische Datenstrukturen

Intervalllist

Fügen die Knoten in die Intervalllist ein.

Page 25: Geometrische Datenstrukturen

Intervalllist

• Das Einfügen eines Intervalls ist in O(logN) Schritten ausführbar.

Page 26: Geometrische Datenstrukturen

Komlexität

Speicherbedarf: O(n log n)

Aufbauzeit: O(n log n)

Page 27: Geometrische Datenstrukturen

Danke + Frage ?