• Keine Ergebnisse gefunden

Eigenschaften von Strecken

N/A
N/A
Protected

Academic year: 2021

Aktie "Eigenschaften von Strecken"

Copied!
7
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]

746

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

p02

p1+p02 y

x

747

Abbiegerichtung

p0

p1

p2

p0

p1

p2

nach links:

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

nach rechts:

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

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: p1undp2 auf der gleichen Seite vonp3p4

Schnitt:p1aufp3p4 Kein Schnitt: p3undp4 auf der gleichen Seite vonp1p2

(2)

Schnittpunkt vieler Strecken

750

Sweepline Prinzip

751

Vereinfachende Annahmen

Keine Strecke verläuft senkrecht

Jeder Schnittpunkt wird von maximal zwei Strecken gebildet.

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.

(3)

Sweep-Line bewegen

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

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

754

Sweep-Line Status

VorordnungT der geschnittenen Strecken Benötigte Operationen:

Insert(T, s)Füge Strecke sinT ein Delete(T, s)EntfernesvonT

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

Rot-Schwarz Baum etc.)

755

Algorithmus Any-Segments-Intersect( S )

Input : Liste von StreckenS

Output : R¨uckgabe obS schneidende Strecken enth¨alt T ← ∅

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

for Sortierte Endpunktepdo

if plinker Endpunkt einer Streckesthen Insert(T, s)

if Above(T, s)s6=∅ ∨ Below(T, s)s6= then returntrue if prechter Endpunkt einer Streckes then

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

returnfalse;

Illustration

a b

c

d

e

a b

de c ab

c

b da ec ab

ec

e d e e dc

×!

(4)

Analyse

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

n Iterationen der For-Schleife. Jede Operation auf dem balancierten BaumO(logn)

InsgesamtO(nlogn)

758

Konvexe H¨ulle

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

p0 p1

p2 p4 p5

p6 p7

p8

p9

p12

p14

p3

p10 p11

p13

p15

759

Algorithmus Graham-Scan

Input : Menge von PunktenQ

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 <2 then returnS

Push(S, p0); Push(S, p1); Push(S, p2) for i3to mdo

whileWinkel (NextToTop(S), Top(S),pi) nicht nach links gerichtetdo Pop(S);

Push(S, pi) returnS

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

(5)

Analyse

Laufzeit des Algorithmus Graham-Scan SortierenO(nlogn)

n Iterationen der For-Schleife

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

InsgesamtO(nlogn)

762

Jarvis Marsch / Gift Wrapping Algorithmus

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

2 Suche Punktq, so dasspq am weitesten rechts liegende Gerade, d.h. jeder andere Punkt liegt links von der Geradenpq (oder auf der Geraden näher beip).

3 Fahre mitp← q bei (2) weiter, bisp=p0.

763

Illustration Jarvis

p0 p1

p2

p4 p5 p6 p7

p8

p9

p12

p14

p3

p10

p11

p13

p15

Analyse Gift-Wrapping

Seihdie Anzahl Eckpunkte der konvexen Hülle.

Laufzeit des AlgorithmusO(h·n).

(6)

Dichtestes Punktepaar

Euklidischer Abstand d(s, t) zweier Punktesundt:

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, s6=t.

Naiv: alle n2

= Θ(n2) Punktepaare.

766

Divide And Conquer

PunktmengeP, zu Beginn P ← Q ArraysX undY, welche die Punkte ausP enthalten, sortiert nachx- bzw.

nachy-Koordinate.

Teile Punktmenge ein in zwei

(annähernd) gleich grosse MengenPL undPR, getrennt durch vertikale Gerade durch einen Punkt vonP. Teile ArraysX undY entsprechend in XL, XR. YL undYR.

767

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.

Kombinieren

Erzeuge ArrayY0 mity-sortierten Punkten ausY, die innerhalb des2δ Streifens um die Trennlinie befinden Betrachte für jeden Punktp∈Y0die sieben* (!) aufpfolgenden Punkte.

Berechne minimale Distanzδ0. Wennδ0 < δ, dann noch dichteres Paar inP als inPL undPR gefunden.

Rückgabe der minimalen Distanz.

*Man kann zeigen, dass maximal acht Punkte aus P im gezeigten Rechteck liegen können. Hier ohne Beweis.

2δ δ

δ δ

δ0

(7)

Implementation

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

Nichttrivial: nur Arrays Y undY0

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

x-Koordinate folgend anYL undYR an. Genauso fürY0. Laufzeit O(|Y|).

Gesamtlaufzeit: O(nlogn).

770

Referenzen

ÄHNLICHE DOKUMENTE

Der Leitungsmechanismus wird an sich in der ganzen Legierungsreihe durch die Zustands- änderung in gleichartiger Weise beeinflußt, die effek- tive Trägerdichte nimmt ab, die

Tipp:  Eine  gute  Vorbereitung  für  das  Praktikum  ist  es,  wenn  Sie  das  Koordinatensystem  und   die  Laufzeitkurven  in  Java    programmieren  und  mit

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

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

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

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