View
6
Download
0
Category
Preview:
Citation preview
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 :)
Recommended