• Keine Ergebnisse gefunden

26. Geometrische Algorithmen

N/A
N/A
Protected

Academic year: 2021

Aktie "26. Geometrische Algorithmen"

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

(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

p02

p1+p02 y

x

747

(3)

Abbiegerichtung

p0

p1

p2

p0 p1

p2

nach links:

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

nach rechts:

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

748

(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

749

(5)

Schnittpunkt vieler Strecken

750

(6)

Sweepline Prinzip

751

(7)

Vereinfachende Annahmen

Keine Strecke verläuft senkrecht

Jeder Schnittpunkt wird von maximal zwei Strecken gebildet.

752

(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.

753

(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.

754

(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.)

755

(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;

756

(12)

Illustration

a b

c

d

e

a b

de c ab

c

b da ec ab

ec

e d

e e dc

×!

757

(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)

758

(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.

p0 p1

p2 p4 p5 p6 p7

p8

p9 p12

p14

p3 p10 p11

p13

p15

759

(15)

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.

p0 p1

p2 p4 p5 p6 p7

p8

p9 p12

p14

p3 p10 p11

p13

p15

759

(16)

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

760

(17)

Illustration Graham-Scan

p0 p1

p2

p4 p5

p7

p8 p10 p11

p12

p13 p3

p6

p9 p14

p15

Stack:

p0

761

(18)

Illustration Graham-Scan

p0 p1

p2

p4 p5

p7

p8 p10 p11

p12

p13 p3

p6

p9 p14

p15

Stack:

p1 p0

761

(19)

Illustration Graham-Scan

p0 p1

p2

p4 p5

p7

p8 p10 p11

p12

p13 p3

p6

p9 p14

p15

Stack:

p2 p1 p0

761

(20)

Illustration Graham-Scan

p0 p1

p2

p4 p5

p7

p8 p10 p11

p12

p13 p3

p6

p9 p14

p15

Stack:

p3 p2 p1 p0

761

(21)

Illustration Graham-Scan

p0 p1

p2

p4 p5

p7

p8 p10 p11

p12

p13 p3

p6

p9 p14

p15

Stack:

p4 p2 p1 p0

761

(22)

Illustration Graham-Scan

p0 p1

p2

p4 p5

p7

p8 p10 p11

p12

p13 p3

p6

p9 p14

p15

Stack:

p5 p4 p2 p1

p0

761

(23)

Illustration Graham-Scan

p0 p1

p2

p4 p5

p7

p8 p10 p11

p12

p13 p3

p6

p9 p14

p15

Stack:

p4 p2 p1 p0

761

(24)

Illustration Graham-Scan

p0 p1

p2

p4 p5

p7

p8 p10 p11

p12

p13 p3

p6

p9 p14

p15

Stack:

p6 p2 p1 p0

761

(25)

Illustration Graham-Scan

p0 p1

p2

p4 p5

p7

p8 p10 p11

p12

p13 p3

p6

p9 p14

p15

Stack:

p7 p6 p2 p1

p0

761

(26)

Illustration Graham-Scan

p0 p1

p2

p4 p5

p7

p8 p10 p11

p12

p13 p3

p6

p9 p14

p15

Stack:

p8 p6 p2 p1

p0

761

(27)

Illustration Graham-Scan

p0 p1

p2

p4 p5

p7

p8 p10 p11

p12

p13 p3

p6

p9 p14

p15

Stack:

p9 p6 p2 p1

p0

761

(28)

Illustration Graham-Scan

p0 p1

p2

p4 p5

p7

p8 p10 p11

p12

p13 p3

p6

p9 p14

p15

Stack:

p10 p9 p6 p2

p1 p0

761

(29)

Illustration Graham-Scan

p0 p1

p2

p4 p5

p7

p8 p10 p11

p12

p13 p3

p6

p9 p14

p15

Stack:

p11 p9 p6 p2

p1 p0

761

(30)

Illustration Graham-Scan

p0 p1

p2

p4 p5

p7

p8 p10 p11

p12

p13 p3

p6

p9 p14

p15

Stack:

p12 p11 p9 p6

p2 p1 p0

761

(31)

Illustration Graham-Scan

p0 p1

p2

p4 p5

p7

p8 p10 p11

p12

p13 p3

p6

p9 p14

p15

Stack:

p13 p11 p9 p6

p2 p1 p0

761

(32)

Illustration Graham-Scan

p0 p1

p2

p4 p5

p7

p8 p10 p11

p12

p13 p3

p6

p9 p14

p15

Stack:

p11 p9 p6 p2

p1 p0

761

(33)

Illustration Graham-Scan

p0 p1

p2

p4 p5

p7

p8 p10 p11

p12

p13 p3

p6

p9 p14

p15

Stack:

p14 p9 p6 p2

p1 p0

761

(34)

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

761

(35)

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

761

(36)

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)

762

(37)

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.

763

(38)

Illustration Jarvis

p0 p1

p2 p4 p5 p6 p7

p8

p9

p12

p14

p3 p10 p11

p13

p15

764

(39)

Illustration Jarvis

p0 p1

p2 p4 p5 p6 p7

p8

p9

p12

p14

p3 p10 p11

p13

p15

764

(40)

Illustration Jarvis

p0 p1

p2 p4 p5 p6 p7

p8

p9

p12

p14

p3 p10 p11

p13

p15

764

(41)

Illustration Jarvis

p0 p1

p2 p4 p5 p6 p7

p8

p9

p12

p14

p3 p10 p11

p13

p15

764

(42)

Illustration Jarvis

p0 p1

p2 p4 p5 p6 p7

p8

p9

p12

p14

p3 p10 p11

p13

p15

764

(43)

Illustration Jarvis

p0 p1

p2 p4 p5 p6 p7

p8

p9

p12

p14

p3 p10 p11

p13

p15

764

(44)

Illustration Jarvis

p0 p1

p2 p4 p5 p6 p7

p8

p9

p12

p14

p3 p10 p11

p13

p15

764

(45)

Illustration Jarvis

p0 p1

p2 p4 p5 p6 p7

p8

p9

p12

p14

p3 p10 p11

p13

p15

764

(46)

Illustration Jarvis

p0 p1

p2 p4 p5 p6 p7

p8

p9

p12

p14

p3 p10 p11

p13

p15

764

(47)

Illustration Jarvis

p0 p1

p2 p4 p5 p6 p7

p8

p9

p12

p14

p3 p10 p11

p13

p15

764

(48)

Illustration Jarvis

p0 p1

p2 p4 p5 p6 p7

p8

p9

p12

p14

p3 p10 p11

p13

p15

764

(49)

Illustration Jarvis

p0 p1

p2 p4 p5 p6 p7

p8

p9

p12

p14

p3 p10 p11

p13

p15

764

(50)

Illustration Jarvis

p0 p1

p2 p4 p5 p6 p7

p8

p9

p12

p14

p3 p10 p11

p13

p15

764

(51)

Illustration Jarvis

p0 p1

p2 p4 p5 p6 p7

p8

p9

p12

p14

p3 p10 p11

p13

p15

764

(52)

Illustration Jarvis

p0 p1

p2 p4 p5 p6 p7

p8

p9

p12

p14

p3 p10 p11

p13

p15

764

(53)

Illustration Jarvis

p0 p1

p2 p4 p5 p6 p7

p8

p9

p12

p14

p3 p10 p11

p13

p15

764

(54)

Illustration Jarvis

p0 p1

p2 p4 p5 p6 p7

p8

p9

p12

p14

p3 p10 p11

p13

p15

764

(55)

Analyse Gift-Wrapping

Seih die Anzahl Eckpunkte der konvexen Hülle.

Laufzeit des AlgorithmusO(h·n).

765

(56)

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.

766

(57)

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.

766

(58)

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.

766

(59)

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 Arrays X und Y entsprechend in XL, XR. YL und YR.

767

(60)

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 Arrays X und Y entsprechend in XL, XR. YL und YR.

767

(61)

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 Arrays X und Y entsprechend in XL, XR. YL und YR.

767

(62)

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.

767

(63)

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.

768

(64)

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.

768

(65)

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.

768

(66)

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.

768

(67)

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 Rechteck liegen können. Hier ohne Beweis.

2δ δ

δ δ

769

(68)

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 Rechteck liegen können. Hier ohne Beweis.

2δ δ

δ δ

δ0

769

(69)

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 Rechteck liegen können. Hier ohne Beweis.

2δ δ

δ δ

δ0

769

(70)

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).

770

Abbildung

Illustration Graham-Scan p 0 p 1 p 2p4p5p7p8p10p11p12p13p3 p 6p9p14p15 Stack:p0 761
Illustration Graham-Scan p 0 p 1 p 2p4p5p7p8p10p11p12p13p3 p 6p9p14p15 Stack:p2p1p0 761
Illustration Graham-Scan p 0 p 1 p 2p4p5p7p8p10p11p12p13p3 p 6p9p14p15 Stack:p3p2p1p0 761
Illustration Graham-Scan p 0 p 1 p 2p4p5p7p8p10p11p12p13p3 p 6p9p14p15 Stack:p4p2p1p0 761
+7

Referenzen

ÄHNLICHE DOKUMENTE

Ebert

• Eine aussagenlogische Formel ist in konjunktiver Normalform (KNF), wenn sie eine Konjunktion von Disjunktionen von Literalen ist.. Konjunktionen immer alle Variablen genau

[r]

Übungen zu Funktionalanalysis Blatt 6. Besprechung in der Übung

Schon in den Anfangstagen der Quantenmechanik hat Dirac auf einen interessanten Zu- sammenhang zwischen der Eichinvarianz der Quantenmechanik und der Quantisierung der

Allgemeiner Hinweis: Für die Bearbeitung dieses Übungsblatts werden alle Resultate bis einschließlich Korollar 5.9 vorausgesetzt. Freiwillige Zusatzaufgaben sind mit einem *

Zeigen Sie, dass in der Menge der Primideale von R mindestens ein minimales Element bez¨ uglich der Inklusion enthalten ist.. (Tipp: Das Lemma von Zorn kann hier helfen.)

Sommersemester 2010 Universität Bielefeld. Ubungsaufgaben zur Analysis II ¨ Blatt III