Zum Hauptinhalt springen

Spickzettel

Zum schnellen Nachschlagen in der Vorlesung. Alles Wichtige auf einer Seite, mit Links zur ausführlichen Erklärung.

Schneller finden

/ oder Strg+K öffnet die Suche überall auf der Seite. Tippfehler sind egal („vornoi“, „bentley otman“), mehrere Wörter grenzen ein („kd laufzeit“).

Algorithmen auf einen Blick​

ProblemAlgorithmusZeitSpeicherKernidee
Konvexe HüllenaivO(n3)O(n^3)O(n)O(n)jedes Paar: liegen alle anderen rechts?
Konvexe HülleGraham's ScanO(nlog⁡n)O(n\log n)O(n)O(n)nach xx sortieren, Stack, nur Rechtskurven
Konvexe HülleJarvis' MarchO(nh)O(nh)O(n)O(n)Geschenkpapier: nächste Ecke = alle anderen rechts
Konvexe HülleChanO(nlog⁡h)O(n\log h)O(n)O(n)Gruppen + Graham, Jarvis mit binärer Suche, H=22tH=2^{2^t}
Konvexe Hülleuntere SchrankeΩ(nlog⁡n)\Omega(n\log n)Sortieren → Punkte auf Parabel y=x2y=x^2
SegmentschnittnaivO(n2)O(n^2)alle Paare
Segmentschnitt isoSweepO(nlog⁡n+R)O(n\log n+R)O(n)O(n)Horizontale in Baum, Vertikale = Bereichsanfrage
Segmentschnitt allg.Bentley–OttmannO((n+k)log⁡n)O((n+k)\log n)O(n+k)O(n+k) (Folien: O(n2)O(n^2))nur Nachbarn in der Statusstruktur testen
1d-Bereichbalancierter BaumO(log⁡n+R)O(\log n+R)O(n)O(n)Split-Knoten, zwei Pfade
2d-Bereichkd-BaumO(n+R)O(\sqrt n+R), Aufbau O(nlog⁡n)O(n\log n)O(n)O(n)abwechselnd xx/yy am Median teilen
2d-BereichRange-TreeO(log⁡2n+R)O(\log^2 n+R), Aufbau O(nlog⁡n)O(n\log n)O(nlog⁡n)O(n\log n)xx-Baum, pro Knoten yy-Baum der kanonischen Teilmenge
kkd-Bereichkd-BaumO(n1−1/k+R)O(n^{1-1/k}+R)O(n)O(n)
kkd-BereichRange-TreeO(log⁡kn+R)O(\log^k n+R)O(nlog⁡k−1n)O(n\log^{k-1} n)
VoronoiHalbebenenO(n2log⁡n)O(n^2\log n)jede Zelle = Schnitt von n−1n-1 Halbebenen
VoronoiFortuneO(nlog⁡n)O(n\log n)O(n)O(n)Sweep, Strandlinie aus Parabeln, Punkt-/Kreisereignisse
Delaunayrandomisiert inkrementellerw. O(nlog⁡n)O(n\log n), naiv O(n2)O(n^2)O(n)O(n)schlechte Dreiecke raus, Loch fächern

nn = Eingabegröße, hh = Hüllpunkte, RR/kk = Größe der Ausgabe.

Formeln​

WasFormel
Orientierungorient⁡(p,q,r)=(qx−px)(ry−py)−(qy−py)(rx−px)\operatorname{orient}(p,q,r) = (q_x-p_x)(r_y-p_y)-(q_y-p_y)(r_x-p_x); >0>0 links, <0<0 rechts, =0=0 kollinear
InCircledet⁡\det der Zeilen (ax−dx, ay−dy, ∣a−d∣2)(a_x-d_x,\ a_y-d_y,\ \lvert a-d\rvert^2) usw.; >0>0 ⇔ dd im Umkreis des ccw-Dreiecks abcabc
Master-TheoremT(n)=aT(n/b)+f(n)T(n)=aT(n/b)+f(n), α=log⁡ba\alpha=\log_b a: f≪nαf\ll n^\alpha → nαn^\alpha; f≈nαf\approx n^\alpha → nαlog⁡nn^\alpha\log n; f≫nαf\gg n^\alpha → ff
kd-Baum-GeradeQ(n)=2+2Q(n/4)=O(n)Q(n)=2+2Q(n/4)=O(\sqrt n)
Strandlinieβ(x)=(x−px)2+py2−ℓy22(py−ℓy)\beta(x)=\dfrac{(x-p_x)^2+p_y^2-\ell_y^2}{2(p_y-\ell_y)}
Voronoi-Größe≤2n−5\le 2n-5 Knoten, ≤3n−6\le 3n-6 Kanten (Euler V−E+F=2V-E+F=2 mit v∞v_\infty)
Triangulierung2n−2−h2n-2-h Dreiecke, 3n−3−h3n-3-h Kanten
Strandlinie≤2n−1\le 2n-1 Bögen
Delaunay-Schritterwartet <6< 6 neue Dreiecke (Durchschnittsgrad)

Allgemeine Lage: was jeder Algorithmus annimmt​

AlgorithmusAnnahmeWenn verletzt …
Grahamkeine zwei Punkte mit gleichem xxlexikographisch nach (x,y)(x,y) sortieren
Graham/Jarviskeine drei kollinearkollinear als „keine Rechtskurve“ werten bzw. den weitesten nehmen
Iso-Segmentekeine gemeinsamen xx-Koordinaten von Endpunktenbei gleichem xx: Einfügen → Anfragen → Löschen
Bentley–Ottmannkeine Senkrechten, keine 3 Segmente durch einen Punkt, keine Überlappunglexikographische Ordnung, Ereignis mit Segmentliste
kd-Baumalle Koordinaten verschieden<= / >= in der Suche
Fortunekeine 4 Punkte auf einem Kreis, keine gleichen yyKanten der Länge 0, Bögen der Länge 0
Delaunaykeine 4 Punkte auf einem KreisFläche beliebig triangulieren, Ergebnis nicht eindeutig

Sätze, die man nennen können sollte​

  • Ω(n log n) für Hülle: Reduktion von Sortieren (2.3).
  • Graham ist optimal, Jarvis/Chan sind ausgabesensitiv.
  • kd-Baum O(n+R)O(\sqrt n+R) wegen Q(n)=2+2Q(n/4)Q(n)=2+2Q(n/4).
  • Range-Tree Speicher O(nlog⁡n)O(n\log n): jeder Punkt auf jeder Ebene in genau einer kanonischen Teilmenge.
  • Satz 1 (Voronoi): kollinear → n−1n-1 parallele Geraden, sonst zusammenhängend mit Strecken/Halbgeraden.
  • Satz 3 (Voronoi): Knoten ⇔ leerer Kreis mit ≥ 3 Punkten, Kante ⇔ leerer Kreis mit genau 2.
  • Lemma 4–6 (Fortune): Bögen entstehen nur durch Punktereignisse, verschwinden nur durch Kreisereignisse, alle Knoten werden gefunden.
  • Satz 7: Fortune O(nlog⁡n)O(n\log n), O(n)O(n) Speicher, optimal.
  • Satz 8: Delaunay ⇔ leerer Umkreis.
  • Satz 9: Delaunay maximiert den kleinsten Winkel.
  • Satz 11: Algorithmus 4 ist korrekt (neue Kanten im Loch, neue Dreiecke legal).

Glossar Deutsch – Englisch​

DeutschEnglischBedeutung
konvexe Hülleconvex hullkleinste konvexe Menge um alle Punkte
Orientierungstestorientation test / orient2dlinks/rechts/kollinear über Determinante
allgemeine Lagegeneral positionkeine Degenerationen (kollinear, kozirkulär …)
ausgabesensitivoutput-sensitiveLaufzeit hängt von der Ausgabegröße ab
Sweep-Line / Scan-Linesweep linefegende Gerade, hält nur an Ereignissen
Ereignisstrukturevent queuesortierte Haltepunkte (Heap)
Statusstrukturstatus structure (SSS)aktive Objekte entlang der Sweep-Line (balancierter Baum)
Bereichsanfragerange queryalle Punkte in einem Rechteck
kanonische Teilmengecanonical subsetBlätter unter einem Knoten
assoziierte Strukturassociated structurezweite Ebene im Range-Tree
Split-Knotensplit nodewo sich die Suchpfade zu xlx_l und xrx_r trennen
Zellecell / regionTeil der Ebene, der zu einem Knoten oder Site gehört
DatenpunktsiteEingabepunkt beim Voronoi-Diagramm
MittelsenkrechtebisectorPunkte mit gleichem Abstand zu zwei Sites
Strandliniebeach lineuntere Einhüllende der Parabeln bei Fortune
Bogenarcein Parabelstück der Strandlinie
Punktereignissite eventSweep-Line erreicht einen Site
Kreisereigniscircle eventBogen verschwindet, Voronoi-Knoten entsteht
falscher Alarmfalse alarmKreisereignis, das ungültig wurde
doppelt verkettete KantenlisteDCEL (doubly connected edge list)Datenstruktur für planare Unterteilungen
dualer Graphdual graphKnoten ↔ Flächen vertauscht
Delaunay-Bedingungempty circle propertykein Punkt im Umkreis
illegale Kanteillegal edgeverletzt lokal die Delaunay-Bedingung, wird geflippt
Kantenflipedge flipDiagonale eines konvexen Vierecks tauschen
Rückwärtsanalysebackward analysisErwartungswert über den zuletzt eingefügten Punkt
Punktlokalisierungpoint locationin welcher Fläche liegt ein Punkt? (Kap. 6)

Praktikum​

#AufgabeNachlesen
1Graham + Jarvis2.4, 2.5
2iso-orientierte Segmente3.3.1
32d-Baum4.3
4randomisierte Delaunay-Triangulierung5.4