Lösungsansatz 3 Beispiel für T(S)

Werbung
geoinformation.net
Folie 1 von 43
Punkt-in-Polygon-Suche Übersicht
!
!
Praxisbeispiel/Problemstellung
Zählen von Schnittpunkten
Schnitt einer Halbgerade mit der Masche
Aufwandsbetrachtung
Streifenkarte
Vorgehen und Eigenschaften
Speicherung der Daten / Suche in den Daten
Aufwandsbetrachtung
Trapezkarte
"
"
!
"
"
"
!
geoinformation.net
Praxisbeispiel Rollover am Bildschirm
Folie 2 von 43
geoinformation.net
Folie 3 von 43
Problemstellung 1 In welcher Masche liegt Punkt P?
Allgemein:
Gegeben ist eine räumliche
Datenbank und eine Klasse typischer
Anfragen
Gesucht wird eine Datenstruktur, die
einen effizienten Algorithmus
unterstützt
!
!
Konkret:
Gegeben ist eine Landkarte S und ein
Punkt P
Gesucht wird die Masche M, die den
Punkt P beinhaltet
!
!
geoinformation.net
Folie 4 von 43
Lösungsansatz 1 Halbgerade am Punkt anlegen
Aus dem >>Jordanschen Kurvensatz
folgt:
!
!
!
1x
Konstruiere ausgehend von P eine
Halbgerade in beliebiger Richtung
P liegt außerhalb des begrenzten
Gebietes, wenn eine gerade Anzahl
von Schnittpunkten entsteht.
P liegt innerhalb des begrenzten
Gebietes, wenn eine ungerade
Anzahl von Schnittpunkten entsteht.
geoinformation.net
Folie 5 von 43
Theorem Jordanscher Kurvensatz
Nach Jordan:
!
!
Eine geschlossene Jordankurve S
zerlegt die Ebene in zwei
zusammenhängende Gebiete, von
denen genau eines nicht beschränkt
ist.
Zwei Punkte der Ebene können genau
dann durch eine Jordankurve J
verbunden werden, die S nicht
schneidet, wenn sie entweder beide
im Inneren oder beide im Äußeren
von S liegen.
geoinformation.net
Folie 6 von 43
Lösungsansatz 1 Suchaufwand
Das Verfahren muss für jede Masche
iteriert werden:
!
!
Aufwand für ein Polygon mit n
Kanten: O(n)
Aufwand bei m Polygonen: O(m*n)
Der Aufwand für eine Suche nach dem
Jordanschen Kurvensatz beträgt
O(m*n).
Mit welchem Verfahren kann der
Suchaufwand verringert werden?
geoinformation.net
Folie 7 von 43
Praxisbeispiel Bundesrepublik Deutschland
In der Praxis kann die Anzahl der Maschen und Kanten sehr schnell hoch werden:
Bundesrepublik Deutschland:
1 Masche
Bundesländer:
16 Maschen mit 17.700 Kanten
Kreise:
440 Maschen mit 75.000 Kanten
Gemeinden:
13.900 Maschen mit 300.000 Kanten
Angaben für den Massstab 1:500.000 Quelle: ArcDeutschland 500, ESRI
geoinformation.net
Folie 8 von 43
Vorgehensweise 2 Konstruktion eines Index
Der Aufbau eines Index kostet Zeit. Diese
amortisiert sich jedoch bei der Abfrage.
Allgemein:
Gegeben: Räumliche Datenbank und
eine Klasse typischer Anfragen
Gesucht: Datenstruktur, die einen
möglichst schnellen Algorithmus
unterstützt
Konkret:
Gegeben: Landkarte S und ein Punkt P
Gesucht: Index für die schnelle
Identifikation der zugeordneten
Masche M .
!
!
!
!
geoinformation.net
Folie 9 von 43
Lösungsansatz 2 Konstruktion der Streifenkarte S'
Vorgehen:
!
Konstruktion einer Karte S' durch
Aufteilung der Landkarte mit
vertikalen Geraden durch alle
Knoten.
Folge:
!
In allen Schnittpunkten der Geraden
mit den Kanten entstehen neue
Knoten.
2x
geoinformation.net
Folie 10 von 43
Lösungsansatz 2 Eigenschaften von S'
S' hat folgende Eigenschaften:
!
!
2x
Die Maschen sind in Trapeze (ggf.
Dreiecke) zerlegt.
Kanten sind in Teilkanten zerlegt.
geoinformation.net
Folie 11 von 43
Lösungsansatz 2 Vorteil von S'
Die Karte erhält eine Struktur, die wir
ausnutzen können:
!
!
Die Streifen sind in x-Richtung
angeordnet.
Innerhalb eines Streifens sind die
Teilkanten und damit die Trapeze in
y-Richtung angeordnet.
2x
geoinformation.net
Folie 12 von 43
Lösungsansatz II Speicherung der Daten
Die Datenspeicherung erfolgt in Arrays:
!
!
Ein Array enthält die x-Koordinaten
der Streifen.
Jeder Streifen enthält ein Array der
y-Koordinaten der Teilkanten.
geoinformation.net
Folie 13 von 43
Lösungsansatz 2 Intervall-Bisektion
Zwei schnelle binäre Suchalgorithmen
werden für die Suche nach der Masche
hintereinander geschaltet:
!
!
Binäre Suche im Array der xKoordinaten nach dem Streifen, der P
enthält.
Binäre Suche nach dem zugehörigen
Trapez in diesem Streifen.
Sobald die Teilkante direkt >>unterhalb/
oberhalb von P gefunden ist, ist die
gesuchte Masche gefunden.
3x
geoinformation.net
Folie 14 von 43
Bemerkungen Eigenschaften der Maschen
Es gilt:
!
!
!
Jeder Abschnitt eines Streifens liegt
genau in einer Masche.
Jede Kante lässt sich einer in yRichtung folgenden Masche zuordnen.
Die Fläche"Außen" muss ebenfalls als
Masche angesehen werden.
geoinformation.net
Folie 15 von 43
Lösungsansatz 2 Suchaufwand
Der Suchaufwand dieses Lösungsansatzes entsteht durch:
!
!
Binäre Suche im Array der x-Koordinaten nach dem Streifen, der P enthält:
Binäre Suche in einem Array mit maximaler Länge 2n: O(log n)
Binäre Suche nach der Lage von P zu den Teilkanten im Array der y-Koordinaten:
Binäre Suche in einem Array mit maximaler Länge n: O(log n)
Der Aufwand für die binäre Suche in einer Streifenkarte beträgt O(log n).
Im >>Vergleich zum Lösungsansatz 1 hat sich der Suchaufwand verbessert.
geoinformation.net
Folie 16 von 43
Vergleich Suchaufwand der zwei Lösungsansätze
Der Aufwand für eine Suche nach dem
Jordanschen Kurvensatz beträgt O(n).
Der Suchaufwand für die binäre Suche in
einer Streifenkarte beträgt O(log n).
geoinformation.net
Folie 17 von 43
Lösungsansatz 2 Speicherbedarf
Es entsteht eine hohe Speicheranforderung durch:
!
!
die sortierte Speicherung der x-Koordinaten der vertikalen Geraden in einem
Array:
Array der x-Koordinaten: O(n)
die sortierte Speicherung der y-Koordinaten der Teilkanten jedes Streifens von
oben nach unten in einem Array:
Array der y-Koordinaten: O(n)
Die Speicheranforderung für die Daten dieses Lösungsansatzes beträgt O(n²)
geoinformation.net
Folie 18 von 43
Lösungsansatz 2 Worst Case Speicherbedarf
Der Worst Case tritt tatsächlich auf:
!
In ungünstigen Fällen erfolgt mit
diesem Verfahren eine sehr hohe
Knoten- und Teilkantenbildung und
damit ein hohes Datenaufkommen.
Wie kann der Speicherbedarf verringert
werden?
1x
geoinformation.net
Folie 19 von 43
Problemstellung 3 Verringerung des Speicherbedarfs
Zwischenresümee:
!
!
Die Zerlegung in Streifen führt zu
einer schnellen Suche.
Allerdings ist der Speicherbedarf
unvertretbar hoch.
Problem:
!
Gibt es eine bessere Zerlegung, die
die Laufzeit erhält und den
Speicherbedarf verringert?
geoinformation.net
Folie 20 von 43
Lösungsansatz 3 Vereinfachung des Beispiels
Um im Folgenden die Übersicht zu
wahren, wird die Beispielkarte
geändert:
!
!
2x
Löschen zweier Knoten: Ersetzen von
drei Kanten durch eine Kante
Verschieben zweier Knoten
geoinformation.net
Folie 21 von 43
Lösungsansatz 3 Vereinfachende Annahmen
!
!
Umschließen der Karte durch ein
achsenparalleles Rechteck R:
Vermeidung der unbeschränkte
Masche "Außen"
Es existieren keine Knoten mit
gleicher x-Koordinate:
Scherung oder Rotation um den
Winkel ε um den Ursprung
ε ist sehr klein wodurch die
Topologie erhalten bleibt
Später wird gezeigt, dass diese
Transformation rein virtuell ist
"
"
2x
geoinformation.net
Folie 22 von 43
Lösungsansatz 3 Konstruktion der Trapezkarte T(S)
Vorgehen:
!
2x
Bei der Salamikarte werden alle
Kanten der Landkarte
durchschnitten. Beim Tranchieren
endet der Schnitt an der Kante.
Dadurch werden nur die direkt
betroffenen Kanten zerlegt.
geoinformation.net
Folie 23 von 43
Lösungsansatz 3 Konstruktionsprinzip Trapezkarte
Gegeben ist eine Landkarte S, umschlossen von einem Rechteck R; es existieren
keine Knoten mit gleicher x-Koordinate
Konstruiere für jeden Knoten aus S eine obere und eine untere vertikale
Extension (Linie); diese Linien enden am Schnittpunkt mit der nächsten Kante aus
S oder an R
!
Die Trapezkarte T(S) ist eine Zerlegung, bestehend aus der Landkarte S, dem
Rechteck R und den vertikalen Extensionen
T(S) besteht aus disjunkten Trapezen (Dreiecken), die von (höchstens) vier Seiten
(Kanten) begrenzt werden:
Ein oder zwei vertikale Seiten, gebildet aus den Extensionen
Genau zwei nicht-vertikale Seiten, gebildet aus Segmenten von Kanten
!
"
"
geoinformation.net
Folie 24 von 43
Lösungsansatz 3 Eigenschaften von T(S)
5 Fälle für die vertikalen Kanten (in der
Abbildung die linken Kanten):
1. Die Kante entartet zu einem Punkt
2. Die untere vertikale Erweiterung
trifft auf eine Kante von S
3. Die obere vertikale Erweiterung trifft
auf eine Kante von S
4. Die Kante besteht aus oberer und
unterer Extension
5. Die Kante besteht aus einer Kante
des Rechtecks R (genau zwei
Trapeze)
5x
geoinformation.net
Folie 25 von 43
Lösungsansatz 3 Bezeichnungen
Ein Trapez ∆ ist durch vier Elemente
eindeutig festgelegt:
!
!
!
!
top(∆)
bottom(∆)
leftp(∆):
Linker Endpunkt von top(∆) oder
bottom(∆) oder rechter Knoten einer
dritten Kante (Trapez ganz links:
einer der linken Knoten von R)
rightp(∆):
analog zu leftp(∆)
geoinformation.net
Lösungsansatz 3 Komplexität der Trapezkarte
Satz 1:
Eine Trapezkarte T(S) einer Landkarte S mit n Kanten enthält höchstens:
a) 6n + 4 Knoten und
b) 3n + 1 Trapeze.
Beweis:
a) >>Addition der vorkommenden Knoten
b) mit Eulers Formel aus a) (als Übung)
Folie 26 von 43
geoinformation.net
Folie 27 von 43
Lösungsansatz 3 Beweis zu Satz 1a
Satz 1:
Eine Trapezkarte T(S) einer Landkarte S mit n Kanten enthält höchstens:
(a) 6n + 4 Knoten
Beweis:
Ein Knoten der Trapezkarte ist entweder
4
ein Eckpunkt von R
2·n
ein Knoten der Karte S
2
·2·n
Endknoten einer Extension
(n Kanten
2 · n Knoten
2 · 2 · n Endknoten)
Insgesamt: 6n + 4
!
!
!
geoinformation.net
Folie 28 von 43
Lösungsansatz 3 Adjazenz von Trapezen
Zwei Trapeze ∆ und ∆' heißen adjazent,
wenn sie sich entlang einer vertikalen
Linie berühren.
Es gilt entweder: top(∆) = top(∆')
oder: bottom(∆) = bottom(∆')
Ein Trapez kann höchstens zu vier
Trapezen adjazent sein.
geoinformation.net
Folie 29 von 43
Lösungsansatz 3 Datenstruktur für T(S)
!
!
Möglich wäre eine doppelt verkettete Kantenliste
Wegen der einfachen Struktur der Trapeze bietet sich folgende Alternative an:
Elemente für Knoten (mit Koordinaten) von S (leftp(∆), rightp(∆))
Elemente für Kanten (mit Referenzen auf Knoten) von S (top(∆), bottom(∆))
Elemente für Trapeze von S'' mit Referenzen auf:
leftp(∆)
rightp(∆)
top(∆)
bottom(∆)
alle (maximal 4) adjazenten Trapeze
"
"
"
#
#
#
#
#
!
Beachte: Die Geometrie der Trapeze ist nur implizit, kann aber in konstanter Zeit
rekonstruiert werden
geoinformation.net
Folie 30 von 43
Lösungsansatz 3 Konstruktion und Suche
!
Probleme:
Konstruktion der Trapezkarte T(S)
Unterstützung der Suche in einer Trapezkarte
"
"
!
Idee für das weitere Vorgehen:
Unterstützung der Suche durch eine Art „binärer Suchbaum“ D mit 2 Arten
von Elementen
X-Elemente für Knoten: Links oder Rechts?
Y-Elemente für Kanten: Oben oder Unten?
Trapezkarte und „Baum“ werden simultan konstruiert
"
#
#
"
geoinformation.net
Folie 31 von 43
Lösungsansatz 3 Beispiel für T(S) und D
geoinformation.net
Lösungsansatz 3 Aufbau des Beispiels
33x
Folie 32 von 43
geoinformation.net
Folie 33 von 43
Lösungsansatz 3 Zum Algorithmus
!
!
!
!
!
!
!
T(S) und D werden simultan konstruiert
Die Suchstrukur wird schrittweise aufgebaut: Nach "Einfügen" eines Elements in
der Karte S erfolgt ein Update von Suchstruktur und Trapezkarte
D ist kein Baum, sondern ein „DAG“, ein „directed acyclic graph“, ein
gerichteter azyklischer Graph
Dieser DAG ist zusammenhängend, hat genau eine Wurzel und genau ein Blatt für
jedes Trapez von T(S)
In der berechneten Suchstruktur referenzieren sich die Blätter von D und die
Trapeze von T(S) gegenseitig
Wie stets hängt die Tiefe (=Güte) des Baumes von der Reihenfolge der
Bearbeitung der Segmente ab
Idee: Zufällige Permutation der Segmente von S
geoinformation.net
Folie 34 von 43
Lösungsansatz 3 Pseudocode: Aufbau von T(S) & D
Input: Eine Landkarte S mit n Kanten
Output:Eine Trapezkarte T(S) und eine Suchstruktur D für T(S) in einem Rechteck R
1.
2.
3.
4.
5.
6.
Konstruiere ein umschließendes Rechteck R
Berechne eine Permutation s1, s2,...,sn der Kanten von S
for i = 1 to n
do Finde die Trapeze ∆0,..., ∆k in T(Si-1), die von si geschnitten werden
Lösche ∆0,..., ∆k aus T(Si-1) und ersetze sie durch neue Trapeze
Entferne die Elemente für ∆0,..., ∆k aus Di-1 und füge neue innere
Knoten und Blätter an
geoinformation.net
Folie 35 von 43
Lösungsansatz 3 Übergang von i-1 zu i
Offene Frage: Wie finden wir ∆0,..., ∆k?
!
!
!
Konstruktion von T(Si) und Di mit Si = {s1, ..., si} unter Verwendung
von T(Si-1) und Di-1
"Schleifeninvariante": T(Si-1) ist eine Trapezkarte und D(Si-1) ist eine Suchstruktur
für diese Trapezkarte
Der Unterschied zwischen "i - 1" und " i " betrifft genau die Trapeze in T(Si-1), die
von si geschnitten werden
geoinformation.net
Lösungsansatz 3 Pseudocode: Finde Trapeze
Input: Das Segment si , T(Si-1) und D(Si-1)
Output: Die Trapeze ∆0, ..., ∆k, die von si geschnitten werden.
1.
2.
3.
4.
5.
6.
7.
8.
9.
Seien pi und qi linker und rechter Knoten von si
Punkt-in-Polygon für pi in Di-1: Finde ∆0
j = 0;
while qi liegt rechts von rightp(∆j)
do if rightp(∆j) liegt oberhalb von si
then ∆j+1 ist der untere rechte Nachbar von ∆j
else ∆j+1 ist der obere rechte Nachbar von ∆j
j = j + 1
return ∆0, ..., ∆k
Wir erhalten zwei Fälle
Folie 36 von 43
geoinformation.net
Folie 37 von 43
Lösungsansatz 3 Trapezfolge Fall 1
geoinformation.net
Lösungsansatz 3 Beispiel zum Fall 1
15x
Folie 38 von 43
geoinformation.net
Folie 39 von 43
Lösungsansatz 3 Trapezfolge Fall 2
geoinformation.net
Lösungsansatz 3 Beispiel für Fall 2
21x
Folie 40 von 43
geoinformation.net
Folie 41 von 43
Lösungsansatz 3 Effizienz I - Erwartungswerte
Der oben beschriebene Algorithmus hat folgende Erwartungswerte (gemittelt über
alle Permutationen von n Segmenten):
!
!
!
Konstruktion von T(S) und Aufbau von D(S): O(n log n)
Speicherplatz von D(S): O(n)
Punkt-in-Polygon-Suche mittels D(S): O(log n)
geoinformation.net
Folie 42 von 43
Lösungsansatz Effizienz II - Bemerkungen
!
!
!
!
Der Erwartungswert bezieht sich auf die Menge aller Permutationen
Pech bei der Permutation kann zum Worst – Case O(n) für die Suche und zu
entsprechender Tiefe der Suchstruktur führen
Abhilfe durch Stop-Loss-Punkt setzen: Brich ab, falls D(S) zu tief wird, und fange
neu an mit einer neuen Permutation
Differenz zum Worst-Case O(n) für die Suche und O(n2) für die Konstruktion kann
beliebig klein gemacht werden, ohne daß man von der O(n log n) – Laufzeit für
die Konstruktion von D(S) sehr stark abweicht
geoinformation.net
Folie 43 von 43
Lösungsansatz 3 Sonderfallbetrachtung
Was macht man, wenn 2 Knoten die gleichen x-Koordinaten haben?
!
!
!
!
!
Beobachtung: die vertikalen Extensionen müssen eigentlich nicht vertikal,
sondern nur parallel sein
Wichtig sind nur die topologischen Invarianten links / rechts an den x-Knoten und
oben / unten an den y-Knoten
Abhilfe durch Transformation (x,y)
(x + ε * y, y) für „geeignet kleines“ Epsilon
Diese Transformation wird aber in Wirklichkeit gar nicht durchgeführt, sondern:
(x,y) liegt rechts von (x',y') falls x > x' oder x = x' und y > y'
Oben / Unten – Vergleich an y-Knoten für Segmente „in the same spirit“ (als
Übung)
Herunterladen