Hallo Welt für Fortgeschrittene
Geometrie II
Benjamin Zenke
Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen
Inhalt
Closest Pair
□ Divide & Conquer
Bereichssuche
□ Gitterverfahren
□ k-D-Tree
Sweep-Line-Algorithmen
Voronoi-Diagramme
□ Fortune‘s Algorithmus
Koordinatenkompression
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 2
Inhalt
Closest Pair
□ Divide & Conquer
Bereichssuche
□ Gitterverfahren
□ k-D-Tree
Sweep-Line-Algorithmen
Voronoi-Diagramme
□ Fortune‘s Algorithmus
Koordinatenkompression
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 3
Closest Pair
In gegebener Menge von Punkten die beiden finden
mit dem geringsten Abstand zueinander
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 4
Closest Pair – Lösungsansätze
Naiver Ansatz:
□ BruteForce
□ Für jeden Punkt Abstand zu den anderen berechnen
□ O(n²)
Alternative:
□ Divide & Conquer
□ O(n log n)
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 5
Closest Pair – Divide & Conquer
Vorgehensweise:
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 6
Closest Pair – Divide & Conquer
Vorgehensweise:
□ Punktemenge aufteilen
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 7
Closest Pair – Divide & Conquer
Vorgehensweise:
□ Punktemenge aufteilen
□ Closest Pair für beide Seiten
bestimmen (Rekursiv)
Problem: Gesuchte Punkte liegen
nicht auf der gleichen Seite
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 8
Closest Pair – Divide & Conquer
Vorgehensweise:
□ Punktemenge aufteilen
□ Closest Pair für beide Seiten
bestimmen (Rekursiv)
Problem: Gesuchte Punkte liegen
nicht auf der gleichen Seite
Lösung: Vergleich der Punkte deren
maximaler Abstand zur Trennlinie
kleiner als dRight ist (max. 3
Vergleiche pro Punkt)
Laufzeit: O(n log n)
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 9
Inhalt
Closest Pair
□ Divide & Conquer
Bereichssuche
□ Gitterverfahren
□ k-D-Tree
Sweep-Line-Algorithmen
Voronoi-Diagramme
□ Fortune‘s Algorithmus
Koordinatenkompression
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 10
Bereichssuche
Gegeben:
□ Menge von Punkten P
□ Bereich/Intervall B
Gesucht:
□ Alle Punkte aus P die in B liegen
Beispiele:
□ Datenbankabfragen
□ Geographische Informationssysteme
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 11
Bereichssuche - Lösungansätze
Naiver Lösungsansatz:
□ Jeden Punkt einzeln testen
□ O(n)
Alternative:
□ Gitterverfahren
□ Verwendung von k-D-Trees
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 12
Bereichssuche - Gitterverfahren
Idee
□ Ebene wird mithilfe eines Gitters aufgeteilt
□ Punkte werden in die jeweiligen Flächen einsortiert
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 13
Bereichssuche - Gitterverfahren
Query: Es müssen nur die relevanten Flächen überprüft
werden
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 14
Bereichssuche - Gitterverfahren
Vorteile
□ Leicht zu
implementieren
□ Verbesserung der
Laufzeit
Nachteile
□ Gittergröße muss
vorher bekannt sein
zu klein: viele leere
Felder
zu groß: viele Punkte
pro Feld
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 15
k-D-Tree
Definition
□ k-D-Tree ist ein k-dimensionaler binärer Suchbaum mit
der Besonderheit das in jeder Tiefe nach einer anderen
Dimension aufgeteilt wird
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 16
k-D-Tree - Konstruktion
P := Punktemenge
d := Aktuelle Höhe im Baum
BUILDTREE(P, d) {
IF(P enthält nur einen Punkt)
Return Blatt, das diesen Punkt enthält
ELSE IF (d ist eine gerade Zahl)
Splitte P via vertikalen Median in P1 (links) und P2 (rechts) auf
ELSE
Splitte P via horizontalen Median in P1 (oben) und P2 (unten) auf
vLeft = BUILDTREE(P1, d+1)
vRight = BUILDTREE(P2, d+1)
Erzeuge Knoten v mit den Kindern vLeft und vRight
Return v
}
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 17
k-D-Tree – Beispiel
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 18
k-D-Tree – Beispiel
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 19
k-D-Tree – Beispiel
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 20
k-D-Tree – Beispiel - Bereichssuche
v := Startknoten
R := Bereich indem gesucht wird
d := Aktuelle Höhe im Baum
List RANGEQUERY(v, R, d) {
IF(v == NULL)
return leere Liste
liste = leere Liste
IF(v ist im Bereich R)
Füge v zu liste hinzu
IF(v ist größer als linker/unterer Rand von R) // abhängig von d
vLeft ist linkes Kind von v
Füge RANGEQUERY(vLeft, R, d+1) zu liste hinzu
IF(v ist kleiner gleich rechter/oberer Rand von R) // abhängig von d
vRight ist rechtes Kind von v
Füge RANGEQUERY(vRight, R, d+1) zu liste hinzu
return liste
}
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 21
k-D-Tree – Beispiel - Bereichssuche
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 22
k-D-Tree – Vorteile & Nachteile
Vorteile
□ Laufzeit:
□ Aufbau: O(n log n)
□ Anfrage: O(log n + x)
Nachteile
□ Aufwendig zu
implementieren
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 23
Inhalt
Closest Pair
□ Divide & Conquer
Bereichssuche
□ Gitterverfahren
□ k-D-Tree
Sweep-Line-Algorithmen
Voronoi-Diagramme
□ Fortune‘s Algorithmus
Koordinatenkompression
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 24
Sweep-Line-Algorithmen
Ziel: k-dimensionales statisches Problem in
k-1-dimensionales dynamisches Problem umwandeln
Idee: Eine Sweep-Line die diskret über die sortierten Punkte
wandert und sie verarbeitet
Beispiel: HEISENBERG aus dem Online-Judge
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 25
Sweep-Line-Algorithmen - Heisenberg
Sweep-Line trifft
Streckenbeginn:
□ Füge Strecke zu S hinzu
Sweep-Line trifft auf
Streckenende:
□ Entferne Strecke aus S
Sweep-Line trifft auf vertikale
Strecke:
□ Berechne Schnittpunkte
mit Strecken aus S
S{1}
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 26
Schnitte: 0
Sweep-Line-Algorithmen - Heisenberg
Sweep-Line trifft
Streckenbeginn:
□ Füge Strecke zu S hinzu
Sweep-Line trifft auf
Streckenende:
□ Entferne Strecke aus S
Sweep-Line trifft auf vertikale
Strecke:
□ Berechne Schnittpunkte
mit Strecken aus S
S{1,2}
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 27
Schnitte: 0
Sweep-Line-Algorithmen - Heisenberg
Sweep-Line trifft
Streckenbeginn:
□ Füge Strecke zu S hinzu
Sweep-Line trifft auf
Streckenende:
□ Entferne Strecke aus S
Sweep-Line trifft auf vertikale
Strecke:
□ Berechne Schnittpunkte
mit Strecken aus S
S{1,2}
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 28
Schnitte: 1
Sweep-Line-Algorithmen - Heisenberg
Sweep-Line trifft
Streckenbeginn:
□ Füge Strecke zu S hinzu
Sweep-Line trifft auf
Streckenende:
□ Entferne Strecke aus S
Sweep-Line trifft auf vertikale
Strecke:
□ Berechne Schnittpunkte
mit Strecken aus S
S{1}
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 29
Schnitte: 3
Sweep-Line-Algorithmen - Heisenberg
Sweep-Line trifft
Streckenbeginn:
□ Füge Strecke zu S hinzu
Sweep-Line trifft auf
Streckenende:
□ Entferne Strecke aus S
Sweep-Line trifft auf vertikale
Strecke:
□ Berechne Schnittpunkte
mit Strecken aus S
S{}
Schnitte: 4
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 30
Sweep-Line-Algorithmen - Heisenberg
Sweep-Line trifft
Streckenbeginn:
□ Füge Strecke zu S hinzu
Sweep-Line trifft auf
Streckenende:
□ Entferne Strecke aus S
Sweep-Line trifft auf vertikale
Strecke:
□ Berechne Schnittpunkte
mit Strecken aus S
Laufzeit: O(n log n)
S{}
Schnitte: 4
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 31
Inhalt
Closest Pair
□ Divide & Conquer
Bereichssuche
□ Gitterverfahren
□ k-D-Tree
Sweep-Line-Algorithmen
Voronoi-Diagramme
□ Fortune‘s Algorithmus
Koordinatenkompression
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 32
Topcoder – Watchtower
Gegeben:
□ Menge an Wachtürmen mit dazugehörigen Koordinaten
Gesucht:
□ Größe der Fläche für die jeder Wachturm verantwortlich
ist
Fläche der Polygone mit den Punkten die dem jeweiligen
Wachturm am nächsten sind
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 33
Topcoder – Watchtower - Lösungsansatz
Naiver Lösungsansatz:
□ Berechne für jeden Punkt Geraden
□ Schnittpunkte der Geraden bestimmen
□ O(n⁴)
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 34
Voronoi-Diagramm - Definition
Das Voronoi-Diagramm für eine Punktmenge P ist die
Einteilung der Ebene in Gebiete gleicher nächster Nachbarn
Für den Punkt p ϵ P ist die Voronoi Region V(p) die Menge
aller Punkte die näher zu p sind als zu irgend einem andern
Punkt aus der Menge P
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 35
Voronoi-Diagramm – Fortune's Algorithmus
Beach-Line:
□ Besteht aus zusammenhängenden Parabeln
□ Punkte auf der Beach-Line haben den gleichen Abstand
zur Sweep-Line, wie zu ihrem nähesten Punkt
□ Wird durch binären Suchbaum realisiert
Sweep-Line:
□ diskret „wandernde“ Linie
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 36
Voronoi-Diagramm – Fortune‘s Algorithmus
Site-Event:
□ Sweep-Line passiert nächsten Punkt
□ Knoten zu binärem Suchbaum hinzugefügt
Circle-Event:
□ neuer Punkt für das fertige Diagramm bestimmbar
□ Punkt wird aus Suchbaum entfernt
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 37
Voronoi-Diagramm – Fortune's Algorithmus
P
K
Q
B
:=
:=
:=
:=
Menge der gegebenen Punkte
doppelt verkettete Liste der Kanten
Prioritätswarteschlange mit Events (sortiert nach y-Koordinate)
Binärer Suchbaum für Beach-Line
FOR ALL p aus P {
Erstelle ein Site-Event für p und füge es zu Q hinzu;
}
WHILE(!q.empty) {
e = Das erste Element von der Warteschlange;
IF(e ist Site-Event) {
Erstelle zu e zugehöriges Circle-Event
Füge dieses Event zu B hinzu
if(Event schneidet anderes Event) {
Entferne beide Events aus Q
Berechne neues Circle-Event und speichere es in Q
}
} ELSE {
Entferne alle Nachbarn von e aus Q
Berechne daraus die neue Kante und speichere sie in K
Aktualisiere die Circle-Events der neuen Nachbarn in Q
}
}
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 38
Voronoi-Diagramm – Fortune's Algorithmus
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 39
Voronoi-Diagramm – Fortune's Algorithmus
Laufzeit O(n log n)
Speicher O(n)
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 40
Inhalt
Closest Pair
□ Divide & Conquer
Bereichssuche
□ Gitterverfahren
□ k-D-Tree
Sweep-Line-Algorithmen
Voronoi-Diagramme
□ Fortune‘s Algorithmus
Koordinatenkompression
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 41
Koordinatenkompression
Gegeben:
□ Großer Raum mit wenig Objekten
Ziel:
□ Lücken entfernen
Beispiel:
□ SafeJourney
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 42
Topcoder - SafeJourney
Gegeben:
□ „Stadtplan“ mit horizontalen und vertikalen Straßen
Gesucht:
□ Minimale Anzahl an zu überquerenden Straßen um von
Punkt A zu einem Punkt B zu gelangen
Problem:
□ Sehr große Fläche der Ebene
□ Nur wenige relevante Punkte
Lösung: Koordinatenkompression
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 43
Koordinatenkompression
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 44
Koordinatenkompression
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 45
Koordinatenkompression
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 46
Koordinatenkompression
Danach:
□ Dijkstra
□ Breitensuche
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 47
Fragen?
?
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 48
Quellen
„Hallo Welt“-Vorträge zu Geometrie 2 von 2010, 2012, 2013
http://www.cs.umd.edu/~mount/754/Lects/754lects.pdf
Closest Pair
□ https://www.cs.ucsb.edu/~suri/cs235/ClosestPair.pdf
□ https://en.wikipedia.org/wiki/Closest_pair_of_points_proble
m
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 49
Quellen
Bereichssuche, k-D-Tree
□ http://ls11-www.cs.unidortmund.de/people/gutweng/AD08/VO23_26_QuadTre
esWS08.pdf
□ http://algo.informatik.unifreiburg.de/bibliothek/books/ad-buch/k7/slides/05.pdf
□ https://www.cise.ufl.edu/class/cot5520fa09/CG_RangeK
Dtrees.pdf
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 50
Quellen
Voronoi-Diagramme
□ http://blog.ivank.net/fortunes-algorithm-andimplementation.html
□ http://www.ams.org/samplings/feature-column/fcarcvoronoi
□ http://community.topcoder.com/tc?module=Static&d1=m
atch_editorials&d2=sr176
□ http://mapviewer.skynet.ie/java/Algorithm.html
□ http://community.topcoder.com/i/srm/srm176_2.gif
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 51
Quellen
Koordinatenkompression
□ http://www.quora.com/What-is-coordinate-compression
□ http://community.topcoder.com/stat?c=problem_statement
&pm=5918&rd=8074
□ https://community.topcoder.com/tc?module=Static&d1=mat
ch_editorials&d2=srm277
Hallo Welt für Fortgeschrittene Geometrie II Benjamin Zenke Folie 52
© Copyright 2026 ExpyDoc