algorithmische geometrie thema: konvexe hull¨ enmhanheid/lehre/alggeo/convhull.pdfdenen die hul¨...

Post on 31-Aug-2019

10 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Algorithmische GeometrieThema: Konvexe Hullen

Christoph Hermes

Hermes@hausmilbe.de

17. Juni 2003

1Ausblick auf den Vortrag 1/32

• Was sind konvexe Hullen?

Wozu braucht man sie?

• Wie kann man sie berechnen → gibt es Algorithmen?

? naiver Algorithmus: Einwickeln

? Graham Scan

? Quickhull

• Wie kann man die Laufzeit verbessern?

→ innere Elimination

• Fazit/ Demonstration

1

2Was sind konvexe Hullen? 2/32

• mathematisch: definiert als

das kleinste Polygon, dass alle

Punkte enthalt

2Was sind konvexe Hullen? 2/32

• mathematisch: definiert als

das kleinste Polygon, dass alle

Punkte enthalt

• analog: kurzester Pfad, der

alle Punkte umschließt

2Was sind konvexe Hullen? 2/32

• mathematisch: definiert als

das kleinste Polygon, dass alle

Punkte enthalt

• analog: kurzester Pfad, der

alle Punkte umschließt

• oder auch: Jede Linie, die zwei Punkte dieser Punkt-

menge verbindet, muss innerhalb des Polygons liegen

2

3Wozu braucht man sie? 3/32

• Datamining

3Wozu braucht man sie? 3/32

• Datamining

• Computergraphik - Naherung fur Objektgeometrie

3Wozu braucht man sie? 3/32

• Datamining

• Computergraphik - Naherung fur Objektgeometrie

• Pathfinding

3

4Einwickeln - graphisch 4/32

• gegeben: Punktmenge P

4

5Einwickeln - graphisch 5/32

• gegeben: Punktmenge P

• Suche den Punkt mit y = min

5Einwickeln - graphisch 5/32

• gegeben: Punktmenge P

• Suche den Punkt mit y = min

• Finde den kleinsten Winkel von der

Horizontalen ausgehend

5

6Einwickeln - graphisch 6/32

• gegeben: Punktmenge P

• Suche den Punkt mit y = min

• Finde den kleinsten Winkel von der

Horizontalen ausgehend

• Suche den kleinsten Winkel zum nachsten Punkt

6

7Einwickeln - graphisch 7/32

• gegeben: Punktmenge P

• Suche den Punkt mit y = min

• Finde den kleinsten Winkel von der

Horizontalen ausgehend

• Suche den kleinsten Winkel zum nachsten Punkt

• Fahre so lange fort, bis der Anfangspunkt wieder erreicht ist

7

8Einwickeln - Bewertung 8/32

• Vorteil:

Algorithmus lasst sich auch auf hohere Dimensionen

erweitern

8Einwickeln - Bewertung 8/32

• Vorteil:

Algorithmus lasst sich auch auf hohere Dimensionen

erweitern

• Nachteil: Effizienz leidet erheblich

Laufzeit:N−1∑i=1

(N − i) = N2−N2 ⇒ Θ(N2)

Das ist auch gleichzeitig Worst Case: O(N 2)

8Einwickeln - Bewertung 8/32

• Vorteil:

Algorithmus lasst sich auch auf hohere Dimensionen

erweitern

• Nachteil: Effizienz leidet erheblich

Laufzeit:N−1∑i=1

(N − i) = N2−N2 ⇒ Θ(N2)

Das ist auch gleichzeitig Worst Case: O(N 2)

• Es geht auch besser: Graham Scan (von R.L. Graham,

1972)

8

9GrahamScan - graphisch 9/32

• wieder gegeben: Punktmenge P mit

A als Minimum und Pivot

(A.y = min ∨A.x = max)

9

10GrahamScan - graphisch 10/32

• wieder gegeben: Punktmenge P mit

A als Minimum und Pivot

(A.y = min ∨A.x = max)

• erzeuge ein einfaches Polygon

10GrahamScan - graphisch 10/32

• wieder gegeben: Punktmenge P mit

A als Minimum und Pivot

(A.y = min ∨A.x = max)

• erzeuge ein einfaches Polygon

• A und B stehen schon als Teil der

konvexen Hulle fest

Beginne daher, ein Polygon ABC zu

konstruieren

10

11GrahamScan - graphisch 11/32

• erzeuge eine neues Teilpolygon mit

dem nachsten Punkt

→ hier D

11

12GrahamScan - graphisch 12/32

• erzeuge eine neues Teilpolygon mit

dem nachsten Punkt

→ hier D

• backtracking: Eliminiere Punkte, bei

denen die Hulle einen Knick nach

rechts macht

12GrahamScan - graphisch 12/32

• erzeuge eine neues Teilpolygon mit

dem nachsten Punkt

→ hier D

• backtracking: Eliminiere Punkte, bei

denen die Hulle einen Knick nach

rechts macht

• wiederhole nun die letzten beiden

Schritte so lange, bis das einfache

Polygon abgearbeitet ist. Hier im

Schnelldurchlauf.

12

13GrahamScan - graphisch 13/32

• erzeuge eine neues Teilpolygon mit

dem nachsten Punkt

→ hier D

• backtracking: Eliminiere Punkte, bei

denen die Hulle einen Knick nach

rechts macht

• wiederhole nun die letzten beiden

Schritte so lange, bis das einfache

Polygon abgearbeitet ist. Hier im

Schnelldurchlauf.

13

14GrahamScan - graphisch 14/32

• erzeuge eine neues Teilpolygon mit

dem nachsten Punkt

→ hier D

• backtracking: Eliminiere Punkte, bei

denen die Hulle einen Knick nach

rechts macht

• wiederhole nun die letzten beiden

Schritte so lange, bis das einfache

Polygon abgearbeitet ist. Hier im

Schnelldurchlauf.

14

15GrahamScan - graphisch 15/32

• erzeuge eine neues Teilpolygon mit

dem nachsten Punkt

→ hier D

• backtracking: Eliminiere Punkte, bei

denen die Hulle einen Knick nach

rechts macht

• wiederhole nun die letzten beiden

Schritte so lange, bis das einfache

Polygon abgearbeitet ist. Hier im

Schnelldurchlauf.

15

16GrahamScan - graphisch 16/32

• erzeuge eine neues Teilpolygon mit

dem nachsten Punkt

→ hier D

• backtracking: Eliminiere Punkte, bei

denen die Hulle einen Knick nach

rechts macht

• wiederhole nun die letzten beiden

Schritte so lange, bis das einfache

Polygon abgearbeitet ist. Hier im

Schnelldurchlauf.

16

17GrahamScan - graphisch 17/32

• erzeuge eine neues Teilpolygon mit

dem nachsten Punkt

→ hier D

• backtracking: Eliminiere Punkte, bei

denen die Hulle einen Knick nach

rechts macht

• wiederhole nun die letzten beiden

Schritte so lange, bis das einfache

Polygon abgearbeitet ist. Hier im

Schnelldurchlauf.

17

18GrahamScan - Pseudocode 18/32

PointList GrahamScan(PointList ptLst) {ptLst = createSimplePolygon(ptLst); // Erstelle ein einfaches Polygon

18GrahamScan - Pseudocode 18/32

PointList GrahamScan(PointList ptLst) {ptLst = createSimplePolygon(ptLst); // Erstelle ein einfaches Polygon

Point cur;for (int i=2; i<ptLst.len; i++) { // Durchlaufe Polygon mit Backtracking

cur = ptLst[i-1];while(turnRight(cur.Prev,cur,cur.Next)) {

cur = cur.Prev;cur.Next.delete();

}}

}

18

19GrahamScan - Bewertung 19/32

• eigentlicher Algorithmus lauft in linearer Zeit ab

⇒ Θ(N)

19GrahamScan - Bewertung 19/32

• eigentlicher Algorithmus lauft in linearer Zeit ab

⇒ Θ(N)

• aber: das Sortieren erfordert Θ(N log N)darum gesamt Θ(N log N)

19GrahamScan - Bewertung 19/32

• eigentlicher Algorithmus lauft in linearer Zeit ab

⇒ Θ(N)

• aber: das Sortieren erfordert Θ(N log N)darum gesamt Θ(N log N)

• ein anderes Verfahren in der gleichen Effizienzklasse:

Quickhull (analog zu Quicksort)

19

20Quickhull - graphisch 20/32

• Gegeben: Punktmenge P

20

21Quickhull - graphisch 21/32

• Gegeben: Punktmenge P

• Suche zwei Punkte, die garantiert

auf der konvexen Hulle liegen und

teile die Punkte dementsprechend in

zwei Halften

21

22Quickhull - graphisch 22/32

• Gegeben: Punktmenge P

• Suche zwei Punkte, die garantiert

auf der konvexen Hulle liegen und

teile die Punkte dementsprechend in

zwei Halften

• Finde den Punkt mit dem großten

Abstand von der Teilungslinie und

elimiere Punkte innerhalb des neuen

Polygons

22

23Quickhull - graphisch 23/32

• Gegeben: Punktmenge P

• Suche zwei Punkte, die garantiert

auf der konvexen Hulle liegen und

teile die Punkte dementsprechend in

zwei Halften

• Finde den Punkt mit dem großten

Abstand von der Teilungslinie und

elimiere Punkte innerhalb des neuen

Polygons

• Verfahre genauso mit den neuen Grenzen bis keine neuen Punkte

mehr zu finden sind

23

24Quickhull - graphisch 24/32

• Gegeben: Punktmenge P

• Suche zwei Punkte, die garantiert

auf der konvexen Hulle liegen und

teile die Punkte dementsprechend in

zwei Halften

• Finde den Punkt mit dem großten

Abstand von der Teilungslinie und

elimiere Punkte innerhalb des neuen

Polygons

• Verfahre genauso mit den neuen Grenzen bis keine neuen Punkte

mehr zu finden sind

24

25Quickhull - graphisch 25/32

• Gegeben: Punktmenge P

• Suche zwei Punkte, die garantiert

auf der konvexen Hulle liegen und

teile die Punkte dementsprechend in

zwei Halften

• Finde den Punkt mit dem großten

Abstand von der Teilungslinie und

elimiere Punkte innerhalb des neuen

Polygons

• Verfahre genauso mit den neuen Grenzen bis keine neuen Punkte

mehr zu finden sind

25

26Quickhull - graphisch 26/32

• Gegeben: Punktmenge P

• Suche zwei Punkte, die garantiert

auf der konvexen Hulle liegen und

teile die Punkte dementsprechend in

zwei Halften

• Finde den Punkt mit dem großten

Abstand von der Teilungslinie und

elimiere Punkte innerhalb des neuen

Polygons

• Verfahre genauso mit den neuen Grenzen bis keine neuen Punkte

mehr zu finden sind

26

27Quickhull - graphisch 27/32

• Gegeben: Punktmenge P

• Suche zwei Punkte, die garantiert

auf der konvexen Hulle liegen und

teile die Punkte dementsprechend in

zwei Halften

• Finde den Punkt mit dem großten

Abstand von der Teilungslinie und

elimiere Punkte innerhalb des neuen

Polygons

• Verfahre genauso mit den neuen Grenzen bis keine neuen Punkte

mehr zu finden sind und verbinde den Rest zu einem Polygon

27

28Quickhull - Bewertung 28/32

• Effizienz wie bei Quicksort: Θ(N log N)

28Quickhull - Bewertung 28/32

• Effizienz wie bei Quicksort: Θ(N log N) aber mit Worst

Case: O(N 2) (wenn alle Punkte auf der konvexen Hulle

liegen)

28Quickhull - Bewertung 28/32

• Effizienz wie bei Quicksort: Θ(N log N) aber mit Worst

Case: O(N 2) (wenn alle Punkte auf der konvexen Hulle

liegen)

• Im direkten Vergleich zum GrahamScan und Wrap-

Algorithmus das schnellste Verfahren in der praktischen

Anwendung

28Quickhull - Bewertung 28/32

• Effizienz wie bei Quicksort: Θ(N log N) aber mit Worst

Case: O(N 2) (wenn alle Punkte auf der konvexen Hulle

liegen)

• Im direkten Vergleich zum GrahamScan und Wrap-

Algorithmus das schnellste Verfahren in der praktischen

Anwendung

• lasst sich auch auf die dritte Dimension anwenden

28

29innere Elimination 29/32

• Verbesserung des GrahamScan´s und der naiven Hulle?

Sicherlich kann man an den Konstanten ein wenig

”rutteln”, aber was ist mit der Anzahl der Punkte

an sich?

29innere Elimination 29/32

• Verbesserung des GrahamScan´s und der naiven Hulle?

Sicherlich kann man an den Konstanten ein wenig

”rutteln”, aber was ist mit der Anzahl der Punkte

an sich?

• Losung: Vorberechung mit der ”inneren Elimination”

29

30innere Elimination - Verfahren 30/32

gegeben:

Punktmenge P

30innere Elimination - Verfahren 30/32

gegeben:

Punktmenge P

→Suche vier Extrem-

punkte und bilde

daraus ein rechteck-

ahnliches Polygon

30innere Elimination - Verfahren 30/32

gegeben:

Punktmenge P

→Suche vier Extrem-

punkte und bilde

daraus ein rechteck-

ahnliches Polygon

→Bilde in dem Polygon

ein Rechteck und

eliminiere die darin

enthaltene Punkte

30

31innere Elimination - Bewertung 31/32

• Effizienz: Θ(N)

31innere Elimination - Bewertung 31/32

• Effizienz: Θ(N)

• Es bleiben√

N Punkte im Schnitt ubrig

(lt. stochastischer Geometrie)

31innere Elimination - Bewertung 31/32

• Effizienz: Θ(N)

• Es bleiben√

N Punkte im Schnitt ubrig

(lt. stochastischer Geometrie)

• Eliminationsverfahren schon in Quickhull enthalten

31

32Fazit 32/32

• Welchen der bisher dargestellten Algorithmen sollte man

nun bevorzugen?

32Fazit 32/32

• Welchen der bisher dargestellten Algorithmen sollte man

nun bevorzugen?

• Ist die Wahrscheinlichkeit groß, dass Punkte schon auf

einer konvexen Hulle liegen:

innere Elimination + GrahamScan

32Fazit 32/32

• Welchen der bisher dargestellten Algorithmen sollte man

nun bevorzugen?

• Ist die Wahrscheinlichkeit groß, dass Punkte schon auf

einer konvexen Hulle liegen:

innere Elimination + GrahamScan

• sonst: Quickhull

32Fazit 32/32

• Welchen der bisher dargestellten Algorithmen sollte man

nun bevorzugen?

• Ist die Wahrscheinlichkeit groß, dass Punkte schon auf

einer konvexen Hulle liegen:

innere Elimination + GrahamScan

• sonst: Quickhull

⇒ Und das Beste zum Schluss: Die Demonstration

32

Literatur zum Nachschlagen• R. Sedgewick: Algorithmen in C, Kap. 24/25

• Java-Applets:

I http://www.cs.princeton.edu/ ah/

alg anim/version1/GrahamScan.html

I http://www.pms.informatik.uni-muenchen.de/

lehre/compgeometry/Gosper/convex hull/

applet/convex hull applet.html

• Ansonsten hilft meistens googlen :)

top related