geometrische datenstrukturen haozhe chen aaron richardson
TRANSCRIPT
![Page 1: Geometrische Datenstrukturen Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/1.jpg)
Geometrische Datenstrukturen
Haozhe Chen
Aaron Richardson
![Page 2: Geometrische Datenstrukturen Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/2.jpg)
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 Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/3.jpg)
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 Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/4.jpg)
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 Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/5.jpg)
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 Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/6.jpg)
Komplexität
• Queryzeit: O((logn)^2 + k)
• Speicherbedarf: O(nlogn)
• Konstruierungszeit: O(nlogn)
![Page 7: Geometrische Datenstrukturen Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/7.jpg)
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 Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/8.jpg)
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 Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/9.jpg)
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 Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/10.jpg)
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 Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/11.jpg)
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 Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/12.jpg)
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 Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/13.jpg)
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 Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/14.jpg)
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 Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/15.jpg)
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 Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/16.jpg)
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 Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/17.jpg)
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 Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/18.jpg)
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 Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/19.jpg)
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 Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/20.jpg)
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 Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/21.jpg)
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 Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/22.jpg)
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 Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/23.jpg)
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 Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/24.jpg)
Intervalllist
Fügen die Knoten in die Intervalllist ein.
![Page 25: Geometrische Datenstrukturen Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/25.jpg)
Intervalllist
• Das Einfügen eines Intervalls ist in O(logN) Schritten ausführbar.
![Page 26: Geometrische Datenstrukturen Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/26.jpg)
Komlexität
Speicherbedarf: O(n log n)
Aufbauzeit: O(n log n)
![Page 27: Geometrische Datenstrukturen Haozhe Chen Aaron Richardson](https://reader033.vdocuments.pub/reader033/viewer/2022051515/55204d6149795902118b490a/html5/thumbnails/27.jpg)
Danke + Frage ?