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 liegtin linearer zeit mit Orientatontest • (P2)P ist ausserhalb CBestimmung 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)