Konvexe Hüllen

Werbung
Konvexe Hüllen
Definitionen

Definition der
Konvexität

Konvexe Hülle einer
Menge von Punkten
S, CH(S)


Die kleinste konvexe
Menge die S enthält
Durchschnitt aller
konvexen Mengen,
die S enthalten
Berechnen von CH


…einer endlichen
Menge P von n Punkten
in 2D
Geometrische Intuition :
Ähnlichkeit mit
Gummiring

Representation:


Input: Menge von Punkten
Output: CH(P): Menge von CWgeordnete Punkten
Formale Definition


2
S

R
Konvexität: Sei
,dann heisst S
konvex,falls für beliebige Punkte p, q  S das
Segment pq volständiq in S enthalten ist.
Konvexe Hülle: Die konvexe Hülle einer
Menge S ist der Durchschnitt aller konvexen
Mengen,die S enthalten,oder intuitiver
gesagt,die kleinste konvexe Menge,die S
enthält.
Convex Hull Algorithms

Verschidene Typen von Algorithmen





Gift Wrapping
Quick hull
Graham’s scan
Incremental
Divide and Conquer
Definition:Extremalpunkte

Extremalpunkte:Ein Punkt p einer konvexen
Menge C heisst Extremalpunkt von C,wenn es
keine zwei von p verschiedene Punkte q1 , q2  C
gibt,so dass p auf dem offenen Liniensegment q1 q 2
liegt.

Identifikation der nicht-extremalen Punkte reicht
aus,um ext(S) zu bestimmen.
Satz:Ein Punkt p  S ist nicht-extremal genau dan,wenn er innerhalb
eines abgeschlossenen Dreiecks liegt,dessen Eckpunkte aus S und
verschiedenen von p sind.
Algorithmus:Interior Points
Algorithm:Interior Points
for each i do
for each j  i do
for each k  i  j do
for each l  i  j  k do
if pl  ( pi , p j , p k )
then p l is nonextreme
Laufziet:
O( n 4 )
Definition:Extremalkanten

Definition:Eine Kante,die von zwei Punkten
aus S begrenzt wird,heisst extremal, wenn
alle Punkte von S auf der Kante oder auf der
einer Seite der durch die Kante festgelegten
Geraden liegen.

Jede extremale Kante ist Kante der konvexen Hülle
CH(S).
Algorithm:Extreme Edges
Algorithm:Extreme Edges
for each i do
for each j  i do
for each k  i  j do
if p k is not (left or on) ( p i , p j )
then ( p i , p j ) is not extreme
Laufzeit:
3
O( n )
Untere Schränke für die Berechnung der
konvexen Hülle
Satz:Die konstruktion der konvexen Hülle einer
endlichen Menge S und |S|=n benötigt die
Zeit (n log n) .
Bewis:Reduktion auf Sortieren von n Zahlen
Sei A beliebiger algorithmus zur Konstruktion
der konvexen Hülle
Gegeben n reelle Zahlen x1,...,xn
Setze S=
Untere Schränke für die Berechnung der
konvexen Hülle
Untere Schränke für die Berechnung der
konvexen Hülle
Mit A konstruiere ch(S) : alle pi als Ecken!
Lineares Durchlaufen der Ecken von ch(S),beginnend beim
pi mit kleinster x-kooredinate,ergibt austeigende
Sortierung der xi in Linearzeit.Wäre A schneller als O(n
log n) ,könnte man entsprechend auch schneller
sortieren  Wierderspruch!
SOMIT:Jeder Algorithmus der das „konvexe Hülle Problem
lösst,benötigt mindestens (n log n) Zeit.
Algorithm:Gift wrapping
Algorithm:Gift wrapping

Vom aktuellen Endpunkt aus wird zu jedem der übrigen
Punkte der Winkel bestimmt;der Punkt mit dem kleinsten
Winkel bestimmt die nächste (Extremal-)Kante,die zur
konvexen Hülle gehört

Startpunkt:Punkt mit kleinster y-Koordinate.Wenn es
mehrere gibt,dann mit linkste x-Koordinate
Algorithm:Gift wrapping
Gift wrapping:Gesamtlaufzeit





p finden wir in O(n)
pi+1 kann in Zeit O(n-i) gefunden werden
Sei h die Anzahl der Punkte der CH(S).Dann gilt:
Output sensitiver Algorithmus
Schlechteste Fall:Alle Punkte von S gehöhren zur
konvexen Hülle - z.B. Kreis
Der QuickHull-Algorithm
Der QuickHull-Algorithm
Der QuickHull-Algorithm
Algorithm: QuickHull
function QuickHull(a,b,S)
if S = 0 then return ()
else
c <— index of point with max distance from ab.
A <— points strictly right of (a, c).
B <— points strictly right of (c, b).
return QuickHull(a, c, A) + (c) + QuickHull(c, b, B)
Der QuickHull-Algorithm
Komplexität:
QuickHull bestimmt die konvexe Hülle einer
gegebenen Menge von n Punkten im „besten“
Fall in der Zeit O(n log n),im schlimmsten Fall
jedoch in der Zeit O(n 2 ) .
Speicherplatzbedarf O(n).

Graham‘s Algorithm



Graham‘s scan
Ist es wirklich notwendig,wie in Algorithmus EXT_PUNKTE
alle O(n 3 ) Dreiecke zu betrachten,um die Extremalpunkte zu
finden?
Graham zeigte 1972,dass man die Extremalpunkte in
linearer Zeit finden kann,wenn man im Gegensatz zum
Algorithmus EXT-PUNKTE den Sortierschritt zuerst
durchführt.
Graham‘s Algorithm



Beginne Durhlauf an der Punkt,der mit kleinsten y-Koordinate ist
(falls mehrere wähle der linkeste)
Untersuche wiederholt Tripel von aufeinanderfolgenden
Punkten,die um den Ursprung entgegen dem Uhrzeigersinn
angeordnet sind,daraufhin,ob sie einen „left turn“ oder „right turn“
bilden bzw. ob die kolinear sind.

Konvexität
beim Durchlauf der Eckpunkte der konvexen
Hülle entgegen dem Uhrzeigersinn nur Linksdrehung
Graham‘s Algorithm

Durchlauf der geordneten Punktenstack abhängig vom
Orientationtest

Durchlauf terminiert,wenn der Ausgangspunkt wieder erreicht wird

Orientatontest benötigt O(1) Zeit
Nach jedem Test schreiten wir entweder voran ,oder wir
eliminieren einen Punkt.Da es nur n Punkte gibt kann man höchstens
n Vorwärtsschritte durchlaufen,aber auch höchstens n Punkte
eliminieren und daher höchstens n-mal zurückgehen

 Durchlauf benötigt O(n) Zeit.
Graham‘s Algorithm
Algorithm: graham scan
Find rightmost lowest point; label it p 0 .
Sort all other points angularly about p 0 .
In case of tie, delete the point closer to p 0
(or all but one copy for multiple points).
Stack S = ( p1 , p 0 )= ( pt , pt 1 ) ; indexes top.
i=2
while i < n do
if p i is strictly left of p t 1 p t
then Push(
p i , S ) and set i  i + 1
else Pop( S ).
Graham‘s Algorithm
Incremental Algorithm


Verwendet die Idee,dass die konvexe Hülle
einer endlichen Menge in der Ebene ein
Polygon ist
Nimmt einen Punkt nach dem anderen her
und kostruiert die konvexe Hülle inkrementell
durch Vereinigung mit einem Dreieck( oder
mit der leeren Menge)
Incremental Algorithm
Incremental Algorithm
Algorithm: Incremental Algorithm
Let H2<- conv (p0, p1, p2).
for k = 3 to n - 1 do
Hk <-conv {Hk-1 U pk}
Incremental Algorithm
Verbleibende Probleme:Für konvexes polygon
C=ch(S‘).
• (P1)Test,ob p innerhalb C liegtin linearer
zeit mit Orientatontest
• (P2)P ist ausserhalb CBestimmung der
tangenten von p an rand von C
Incremental Algorithm

(P2) (Tangenten berechnung):
Algorithm:Tangent Points
Algorithm:Tangent Points
for i = 0 to n-1 do
if Xor ( p left or on
, p left or on ( pi , pi 1 ))
then p i is point of tangency
Incremental Algorithm
Laufzeit:
• In worst case werden wir p  Q in
2
jeden Schritt haben  O(n )
• In best case doch O(n log n)
Divide-and-Conquer
1.Was ist “Divide and Conquer”?
2. Welche sind die Kriterien nach denen wir
partitionieren können?
2.Was ist eine triviale Lösung ?
4.Wie mischen wir die beide Hüllen ?
Divide-and-Conquer

Ähnlich zu Mergesort




Partitionieren der Menge von Punkten
Berechnen von beiden Tangenten
Return die endgültige Lösung
O(nlogn)
Beschreibung des Argorithmuses
1.
Sortieren der Punkte durch x Koordinate.
2.
Falls |P| <= 3,dann ist die Hülle ein Dreieck.
3.
4.
5.
Im anderen Fall, partitioniere dei Menge P aller Punkte in zwei
Mengen A und B, wobei A enthält die Hälfte der Punkte mit
die tiefste x-Koordinaten und B enthält die Hälfte der Punkte
mit die höchste x-Koordinaten.
Berechne HA = CH(A) und HB = CH(B) rekursiv.
Merge beide Hüllen in eine neue konvexe Hülle H, indem man
the die upper und lower Tangenten von HA und HB
berechnet und lösche alle Punkte,die zwischen diese zwei
Tangenten liegen.
Divide-and-Conquer
Divide-and-Conquer
Algorithm: LOWER TANGENT
a <— rightmost point of A.
b <— leftmost point of B.
while T =ab not lower tangent to both A and B do
while T not lower tangent to A do
a  a-1
while T not lower tangent to B do
b  b+1
Laufzeit:O(n log n)
Herunterladen