• Keine Ergebnisse gefunden

26. Geometrische Algorithmen

N/A
N/A
Protected

Academic year: 2021

Aktie "26. Geometrische Algorithmen"

Copied!
25
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

26. Geometrische Algorithmen

Lage von Strecken, Schnitt vieler Strecken, Konvexe Hülle, Dichtestes Punktepaar [Ottman/Widmayer, Kap. 8.2,8.3,8.8.2, Cormen et al, Kap. 33]

(2)

Eigenschaften von Strecken

Kreuzprodukt zweier Vektoren p1 = (x1, y1), p2 = (x2, y2) in der Ebene

p1×p2 = det

x1 x2 y1 y2

= x1y2−x2y1

Vorzeichenbehafteter Flächeninhalt des Parallelogramms

+

p2

p1 p1+p2

p0

p1+p02 y

x

(3)

Abbiegerichtung

p0

p1

p2

p0 p1

p2

nach links:

(p1−p0)×(p2−p0) > 0

nach rechts:

(p1−p0)×(p2−p0) < 0

(4)

Schnitt zweier Strecken

p1

p2

p3 p4

p1

p2

p3 p4

p1

p2

p3 p4

p1

p2 p3

p4

Schnitt: p1 und p2

gegenüber bzgl. p3p4

und p3, p4 gegenüber bzgl.p1p2

Kein Schnitt: p1 und p2

auf der gleichen Seite vonp3p4

Schnitt:p1aufp3p4 Kein Schnitt: p3 undp4

auf der gleichen Seite vonp1p2

(5)

Schnittpunkt vieler Strecken

(6)

Sweepline Prinzip

(7)

Vereinfachende Annahmen

Keine Strecke verläuft senkrecht

Jeder Schnittpunkt wird von maximal zwei Strecken gebildet.

(8)

Anordnen von Strecken

s1 s2 s3

h1 h2 h3

Quasiordnung (Halbordnung ohne Antisymmetrie)

s2 2h1 s1 s1 2h2 s2 s2 2h2 s1 s3 2h2 s2

Bzgl. h3 sind die Strecken un- vergleichbar.

(9)

Sweep-Line bewegen

Sweep-Line Status : Beziehung der durch Sweep-Line geschnittenen Objekte

Ereignisliste : Folge von Ereignispunkten, nach x-Koordinate geordnet. Sweepline wandert von links nach rechts und hält an jedem Ereignispunkt.

(10)

Sweep-Line Status

VorordnungT der geschnittenen Strecken Benötigte Operationen:

Insert(T, s) Füge Streckes inT ein Delete(T, s) Entferne svon T

Above(T, s) Rückgabe Strecke unmittelbar oberhalb von sin T Below(T, s)Rückgabe Strecke unmittelbar unterhalb vons in T Mögliche Implementation: Balancierter Baum (AVL-Baum,

Rot-Schwarz Baum etc.)

(11)

Algorithmus Any-Segments-Intersect( S )

Input : Liste von StreckenS

Output : uckgabe ob S schneidende Strecken enth¨alt T ← ∅

Sortiere Endpunkte der Strecken in S von links nach rechts (links vor rechts und unten vor oben)

for Sortierte Endpunkte p do

if p linker Endpunkt einer Strecke s then Insert(T, s)

if Above(T, s)s6=∅ ∨ Below(T, s)s 6= then return true if p rechter Endpunkt einer Streckes then

if Above(T, s)Below(T, s)6=then return true Delete(T, s)

return false;

(12)

Illustration

a b

c

d

e

a b

de c ab

c

b da e ab

ec

e d

e e dc

×!

(13)

Analyse

Laufzeit des Algorithmus Any-Segments-Intersect SortierenO(nlogn)

nIterationen der For-Schleife. Jede Operation auf dem balancierten Baum O(logn)

Insgesamt O(nlogn)

(14)

Konvexe H ¨ulle

Konvexe HülleCH(Q) einer MengeQvon Punkten: kleinstes konvexes Polygon P, so dass jeder Punkt entweder auf dem Rand oder im Inneren liegt.

p2 p4 p5 p6 p7

p8

p9 p12

p14

p3 p10 p11

p13

p15

(15)

Algorithmus Graham-Scan

Input : Menge von Punkten Q

Output : StackS von Punkten der konvexen H¨ulle vonQ

p0: Punkt mit minimaler y- (gegebenenfalls zus¨atzlich minimalerx-) Koordinate (p1, . . . , pm)restlichen Punkte sortiert nach Polarwinkel gegen Uhrzeigersinn relativ

zu p0; Wenn Punkte mit gleichem Polarwinkel vorhanden, verwerfe alle ausser dem mit maximalen Abstand vonp0

S ← ∅

if m <2then return S

Push(S, p0); Push(S, p1); Push(S, p2) for i3to m do

while Winkel (NextToTop(S), Top(S), pi) nicht nach links gerichtet do Pop(S);

Push(S, pi) return S

(16)

Illustration Graham-Scan

p0 p1

p2

p4 p5

p7

p8 p10 p11

p12

p13 p3

p6

p9 p14

p15

Stack:

p15 p14 p9 p6

p2 p1 p0

(17)

Analyse

Laufzeit des Algorithmus Graham-Scan SortierenO(nlogn)

nIterationen der For-Schleife

Amortisierte Analyse des Multipop beim Stapel: amortisiert konstante Laufzeit des Multipop, ebenso hier: amortisiert konstante Laufzeit der While-Schleife.

Insgesamt O(nlogn)

(18)

Jarvis Marsch / Gift Wrapping Algorithmus

1 Starte mit Extrempunkt (z.B. unterster Punkt) p= p0

2 Suche Punkt q, so dasspq am weitesten rechts liegende

Gerade, d.h. jeder andere Punkt liegt links von der Geradenpq (oder auf der Geraden näher bei p).

3 Fahre mit p← q bei (2) weiter, bis p= p0.

(19)

Illustration Jarvis

p0 p1

p2 p4 p5 p6 p7

p8

p9

p12

p14

p3 p10 p11

p13

p15

(20)

Analyse Gift-Wrapping

Seih die Anzahl Eckpunkte der konvexen Hülle.

Laufzeit des AlgorithmusO(h·n).

(21)

Dichtestes Punktepaar

Euklidischer Abstand d(s, t) zweier Punktes und t:

d(s, t) = ks−tk2

= q

(sx−tx)2 + (sy −ty)2 Problem: Suche Punkte p und q aus Q, für welche gilt

d(p, q) ≤ d(s, t) ∀ s, t ∈ Q, s 6= t.

Naiv: alle n2

= Θ(n2) Punktepaare.

(22)

Divide And Conquer

PunktmengeP, zu Beginn P ← Q Arrays X und Y, welche die Punkte aus P enthalten, sortiert nachx- bzw.

nach y-Koordinate.

Teile Punktmenge ein in zwei

(annähernd) gleich grosse Mengen PL und PR, getrennt durch vertikale

Gerade durch einen Punkt vonP. Teile ArraysX und Y entsprechend in XL, XR. YL und YR.

(23)

Divide And Conquer

Rekursiver Aufruf jeweils mit

PL, XL, YL undPR, XR, YR. Erhalte minimale Abstände δLR.

(Wenn nur nochk ≤ 3Punkte:

berechne direkt minimalen Abstand) Nach reukrsivem Aufruf

δ = min(δL, δR). Kombiniere (nächste Folie) und gib bestes Resultat zurück.

(24)

Kombinieren

Erzeuge ArrayY0 mit y-sortierten Punkten ausY, die innerhalb des 2δ Streifens um die Trennlinie befinden Betrachte für jeden Punkt p ∈ Y0 die sieben* (!) aufp folgenden Punkte.

Berechne minimale Distanzδ0. Wennδ0 < δ, dann noch dichteres Paar in P als inPL und PR gefunden.

Rückgabe der minimalen Distanz.

*Man kann zeigen, dass maximal acht Punkte aus P im gezeigten

2δ δ

δ δ

δ0

(25)

Implementation

Ziel: Rekursionsgleichung (Laufzeit) T(n) = 2·T(n2) + O(n). Konsequenz: in den Schritten ist das Sortieren verboten!

Nichttrivial: nur ArraysY und Y0

Idee: Merge umgekehrt: durchlaufe (nach y-Koordinate vorsortiertes) Y und hänge dem Auswahlkriterium der

x-Koordinate folgend an YL und YR an. Genauso fürY0. Laufzeit O(|Y|).

Gesamtlaufzeit: O(nlogn).

Abbildung

Illustration Graham-Scan p 0 p 1 p 2p4p5p7p8p10p11p12p13p3 p 6p9p14p15 Stack:p15p14p9p6p2p1p0
Illustration Jarvis p 0 p 1p2 p 4p5p6p7p8p9p12p14 p 3p 10p11p13p15

Referenzen

ÄHNLICHE DOKUMENTE

Theorem 3.7 (entartet): Ein ausgeglichener 2d-Baum f¨ ur n Punkte in der Ebene l¨ aßt sich in Zeit O(n log n) konstruieren.. Anwendung

Untersuche, welches Volumen Sauerstoff für die Reaktion mit verschiedenen Massen Magnesium jeweils benötigt wird.. Wiege die bereitgelegte Magnesiarinne und gib anschließend

 Diese  Algorithmen  verarbeiten  alle  paarweise  Kombinationen   von  Datenelementen(möglicherweise  in  einer  doppelt  verschachtelten  Schleife). exponentielle

Nachdem man während ungefähr einer Stunde Strom durch das Coulombmeter fliessen liess, wird die dabei transportierte Menge Kupfer durch Wägen bestimmt und daraus die F ARADAY

Snob-Effekt : Der Nachfrager kauft teure Güter, da er Güter besitzen möchte, die andere nicht besitzen oder besitzen können?. Mitläufer-Effekt : Der Nachfrager kauft teure Güter, da

Amortisierte Analyse des Multipop beim Stapel: amortisiert konstante Laufzeit des Multipop, ebenso hier: amortisiert konstante Laufzeit der While-Schleife. Insgesamt O (n

*Man kann zeigen, dass maximal acht Punkte aus P im gezeigten Rechteck liegen können.. Rückgabe der

(c) Wann wird die Erde 15 Milliarden Einwohner haben, wenn die Bev¨ olkerung im selben Tempo weiterw¨ achst..