AK Rechnerische Geometrie Jan Pöschko auf Grundlage einer Vorlesung von Univ.-Prof. Dipl.-Ing. Dr. Franz Aurenhammer im Wintersemester 2009/2010 2. Oktober 2012 Inhaltsverzeichnis 1 Arrangements von Geraden 1.1 Dualität . . . . . . . . . . . . . . 1.2 Kollinearität von Punkten . . . . 1.3 Levels in Arrangements . . . . . 1.4 Konstruktion von Arrangements 1.5 Dreieck kleinster Fläche . . . . . 1.6 Halbebenen-Suchproblem . . . . 1.7 Partitionsbäume . . . . . . . . . . . . . . . . 2 2 2 2 2 2 3 3 2 Parametrische Suche 2.1 Median-Level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Theil-Schätzer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 4 4 3 Rückwärtsanalyse 3.1 Mittelachse von konvexen Polygonen . . . . . . . . . . . . . . . . . . . . . 3.2 Lineares Optimieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Böses Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 4 5 4 Monotone Matrizen 4.1 Weiteste Nachbarn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Euclidean Distance Transform . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 6 5 n2 -schwere Probleme 6 . . . . . . . 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Arrangements von Geraden L = {g1 , . . . , gn }, A(L) mit |L| = n: Signatur σ(p) = (σi )i mit n 2 σi = Knoten, n2 Kanten, 1 + n + n 2 Zellen + p unter gi 0 p auf gi − p über g i 1.1 Dualität p= a b ! ↔ T (p) : y = 2ax − b Dualität ist eigentlich Polarität bezüglich Parabel y = x2 . Eigenschafen: 1. erhält relative Lage zwischen Punkten und Geraden: p über g ⇔T(g) über T (p) 2. erhält Inzidenzen: s = g ∩ h ⇔ T (s) durch Punkte T (g) und T (h) 1.2 Kollinearität von Punkten p, q, r kollinear ⇔ T (p), T (q), T (r) durch gemeinsamen Punkt 1.3 Levels in Arrangements k-Level: {e | σ(e) hat genau k − 1 +} √ √ Größe von k-Level in Arrangement von n Geraden: 1971: O(n k) → 2000: neΩ( log k) 1.4 Konstruktion von Arrangements direkt: pro Gerade n − 1 Schnitte, sortieren: O(n2 log n) plain sweep: ebenso Einfügen: konstruiere A(L ∪ {g}) aus A(L); Laufzeit O(n2 ) Zonen-Theorem: Die Anzahl der Kanten der Zellen in der Zone von g (Zellen von A(L), die von g geschnitten werden) ist ≤ 6n. (Beweis: injektive Abbildung von Rechtskanten auf Schnittpunkte von g) 1.5 Dreieck kleinster Fläche Im kleinsten Dreieck (i, j, k) hat pk den kleinsten Abstand von pi pj . Wird v = T (pi pj ) vertikal bewegt, so ist T (pk ) die erste Gerade, die getroffen wird. ⇒ Knoten v gehört zu einer Zelle in A(T (p1 ), . . . , T (pn )), zu der auch T (pk ) eine Kante beiträgt. Algorithmus: 1. Dualisieren der pi 2 2. Konstruiere Arrangement 3. Für alle Zellen F : für alle Knoten v von F : für alle Kanten e (nicht inzident zu v): betrachte (i, j, k), wobei v = T (pi ) ∩ T (pj ) und e ⊂ T (pk ) Analyse: X d2 (F ) ≤ 10n2 F ∈A weil P gi d(F ) ≤ 10n laut Zonentheorem. 1.6 Halbebenen-Suchproblem Bestimme alle Punkte in S, die oberhalb von g liegen. Äquivalent zum Finden aller Geraden, die in A(T (S)) unter T (g) liegen. Speichere Zeiger von allen oberen Kanten in einer Zelle im Arrangement zu einer unteren Kante e. Laufzeit Q(n) = O(k + log n), Speicher S(n) = Θ(n2 ) 1.7 Partitionsbäume Halbebenen-Suchproblem mit S(n) = O(n), Q(n) = O(k + n0.7 ) Ham-Sandwich-Theorem: für Gerade g, die S im Verhältnis n1 + n2 : n3 + n4 aufteilt, gibt es eine weitere Gerade g 0 , sodass S in 4 Teile der Größen n1 , n2 , n3 , n4 zerteilt wird. (Beweis: α(x): kleinster Winkel in x über g, sodass n1 : n2 -Teilung stimmt; β(x): kleinster Winkel, sodass n3 : n4 stimmt; α : 0 → π, β : π → 0 stetig) Balancierter Binärbaum; jeder Knoten hat 2 Pointer auf ersten und letzten Punkt in seinem Teilbaum. Q(n) ≤ 3Q( n4 ) + O(1) ⇒ Q(n) = O(n0.77 ) √ genauer: Q(2k+1 ) ≤ Q(2k ) + Q(2k−1 ) + c ⇒ Q(2k+1 ) ≤ 2(k+1) ld(1+ 5)−(k+1) − c Aufbau HS-Gerade zwischen S1 und S2 (getrennt durch y-Achse): Median-Level in T (S1 ) (monoton fallend in x) und T (S2 ) (monoton steigend); suche Schnittpunkt r; T (r) ist HS-Gerade. Berechnung des Median-Level per Datenstruktur für dynamischen Schnitt von Halb4 ebenen. P (n) = O(n 3 +ε ) 2 Parametrische Suche Paralleler Entscheidungsalgorithmus → serieller Optimierungsalgorithmus. Betrachte ENT: P (x) monoton, d.h. aus P (x0 ) folgt P (x) für x < x0 . OPT: finde größtes x∗ mit P (x∗ ). Wende Algorithmus A für P (x) auf (unbekannte) Lösung x∗ des Optimierungsproblems an. → Entscheidungen Fi (x∗ ) ≤ 0. • Berechne Nullstellen von Fi : x1 , . . . , xk • Wende Entscheidungsalgorithmus A auf x1 , . . . , xk and 3 • Weil P monoton: ∃1 Index j mit A(xj ) = T und A(xj+1 ) = F ; somit x∗ ∈ I = [xj , xj+1 ]. 2.1 Median-Level betrachte Arrangement von Geraden g1 , . . . , gn , Median-Level M (x) = Median von g(x), . . . , gn (x); ENT: geg. x, entscheide M (x) ≤ 0 (berechne gi (x), Median davon, teste gm (x) ≤ 0) OPT: bei Median-Berechnung tritt gi (x∗ ) ≤ gj (x∗ ) auf; berechne also Nullstelle von fij = ai x + bi − aj x + bj , das ist x-Koordinate von gi ∩ gj ; berechne A(xij ) 2.2 Theil-Schätzer Finde Gerade pj pj , die den Median aller n2 Steigungen realisiert. pi pj hat k-kleinste Steigung ⇔ xij = T (pi pj ) hat k-kleinste x-Koordinate, d.h. xij ist der k-te Knoten von links im Arrangement A(T (p1 ), . . . , T (pn )). ENT: geg. x, entscheide L(x) = Anzahl der Knoten in A links von x ≤ 12 n2 . (berechenbar über Anzahl der Inversionen der Permutation π(x) der gi ) OPT: berechne L(xij ), wobei xij ist x-Koordinate von gi ∩ gj , usw. Rechenzeit: O(n log n · n log n) Parallelisieren: Bitones Sortieren; O(log2 n) Runden, pro Runde n Vergleiche; betrachte n Nullstellen in O(n), sortiere sie in O(n log n), Binärsuche in dieser sortieren Liste mit O(log n) Schritten zu O(n log n) Zeit (L(x) berechnen). ⇒ O(n log4 n) Zeit Verbesserung durch Intervalldrittelung auf O(n log2 n) und Randomisierung 3 Rückwärtsanalyse 3.1 Mittelachse von konvexen Polygonen M (P ) = {x ∈ P | nächster Nachbar von x bezüglich Rand von P ist mehrdeutig} teilt P in n Regionen, Baumstruktur: n Blätter (Ecken von P ), n − 2 innere Knoten, 2n − 3 Kanten Randomisiertes Einfügen: O(|reg(e)|) pro Kante e (merke Nachbarkanten) E[|reg(e)|] = 1X 1 |reg(ei )| = 2(2n − 3) < 4 = O(1) n n 3.2 Lineares Optimieren Normalvektor z einer Hyperebene in Rd , Menge H von n Halbräumen, h∈H h = P konvexes Polytop. Finde x ∈ P , sodass x Tangentialpunkt einer Hyperebene mit Normalvektor z an P . T 4 d Größe von P : Θ(nb 2 c ) Rekursiver Algorithmus für LP(H, z): • d = 1: P = Intervall, Optimallösung = Endpunkt • d = n: P hat nur eine Ecke ⇒ lineares Gleichungssystem in O(d3 ) • n > d > 1: wähle h ∈ H zufällig, löse LP(H \ {h}, z) mit Lösung w – w ∈ h: bereits Gesamtlösung – w∈ / h (mit Wahrscheinlichkeit nd ): Optimallösung liegt in begrenzender Hyperebene g von h; bilde H 0 = (H \ {h}) ∩ g, projiziere z auf g, löse LP(H 0 , z 0 ) T (n, d) = O(d!n) √ kann von d! auf 2 d gedrückt werden. 3.3 Böses Beispiel Triangulierung von n Punkten pj und Dreieck t, pj ∈ t 4 Monotone Matrizen n × m-Matrix A (n ≤ m) monoton: aus i1 < i2 folgt j(i1 ) ≤ j(i2 ) (j: Spaltenindex des linkesten Maximums in Zeile i) A total! monoton: alle Submatrizen (äquivalent: alle 2 × 2-Submatrizen) monoton a b monoton ⇒ aus a < b folgt c < d d d Wenn j1 < j2 und A(i, j1 ) ≥ A(i, j2 ), dann sind alle A(x, j2 ) tot für 1 ≤ x ≤ i. Wenn j1 < j2 und A(i, j1 ) < A(i, j2 ), dann sind alle A(x, j1 ) tot für i ≤ x ≤ n. ⇒ Reduce-Algorithmus, der A auf n × n-Matrix C reduziert, sodass Maxima nicht verloren gehen. Zeilenmaxima und globales Maximum in O(m) Zeit. 4.1 Weiteste Nachbarn in konvexem Polygon: n × (2n − 1)-Matrix Aij = j − i d(p , pj ) i −1 für j ≤ i i<j <i+n für j ≥ i + n Beweis der Monotonie der 2 × 2-Submatrizen per Vierecksungleichung. Anwendung: flächengrößtes Dreieck. 5 4.2 Euclidean Distance Transform Finde zu jedem von n2 Gitterpunkten den Abstand zu seinem nächsten Nachbarn in einer Gitterpunktmenge B. mit monotonen Matrizen in O(n2 ) Zeit 5 n2 -schwere Probleme • 3SUM: geg. ganze Zahlen M ; gefr. ∃a, b, c ∈ M : a + b + c = 0 • 3SUM’: geg. ganze Zahlen A, B, C; gefr. ∃a ∈ A, b ∈ B, c ∈ C : a + b = c (sortiere B, C; bilde ∀a ∈ A: a + B; gleiche mit C ab) • Koll: geg. n Punkte; gefr. sind drei davon kollinear (per Arrangements) 3SUM ≤ Koll: für m ∈ M betrachte Punkt p(m) = Summe 0 ⇔ p(a), p(b), p(c) kollinear. m m3 ; a, b, c ∈ M haben • Koll’: geg. n Punkte p = xy , x ∈ N, y ∈ {0, 1, 2}; gefr. ∃ nicht-horizontale Gerade, die mehr als zwei Punkte enthält 3SUM’ ≤ Koll’: b ∈ B → (2b, 2), c ∈ C → (c, 1), a ∈ A → (2a, 0). • SEP: geg. n Objekte (Spezialfall: Liniensegmente); gefr. ∃ Gerade, die Objekte vermeidet und in zwei nichtleere Teilmengen zerlegt Koll’ ≤ SEP: dreizeiliges Gitter mit ausgesparten Punkten • Strips-Cover-4: geg. Dreieck, n Streifen; gefr. wird Dreieck von Streifen abgedeckt SEP ≤ Strips-Cover-4: p = ab 7→ T (p) : y = 2ax − b (vertikales Segment 7→ Streifen, Halbstrahl 7→ Halbebene, separierende Gerade 7→ Punkt); T (g) liegt nicht in Streifen/Halbebenen ⇔ Streifen überdecken Dreieck. • Triangles-Cover-4 ≥ Strips-Cover-4: baue Dreiecke aus Streifen. • Hole-in-Union: geg. n Objekte; gefr. enthält ihre Vereinigung ein „Loch“ Triangles-Cover-4 ≤ Hole-in-Union: geg. Menge T von Dreiecken, bilde t ∩ 4 (triangulieren, wenn nötig) ⇒ Menge T 0 von Dreiecken mit |T 0 | ≤ 4 |T | und S T 0 überdeckt 4 (d.h. t0 hat keine Löcher) ⇔ T überdeckt 4. • Area-of-Union: geg. n Dreiecke; ges. Fläche ihrer Vereinigung Triangles-Cover-4 ≤ Area-of-Union: T 0 überdeckt 4 ⇔ abgedeckte Fläche ist Fläche von 4 6