Übung zur Vorlesung Algorithmische Geometrie

Werbung
Übung zur Vorlesung Algorithmische Geometrie
Dipl.-Math. Jens Fangerau
Arbeitsgruppe Computergraphik und Visualisierung
Interdisziplinäres Zentrum für Wissenschaftliches Rechnen
5. Juni 2012
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
1 / 23
Überblick
Besprechung der letzten Aufgaben
Laufzeitanalyse für Triangulierung von Polygonen
Neue Aufgaben
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
2 / 23
Vorlesung
Die Vorlesung
Fragen?
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
3 / 23
Aufgabenbesprechung
Besprechung der Aufgaben
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
4 / 23
Aufgabenbesprechung
Aufgabe zum Schnitt von Liniensegmenten
Aufgabe 1
Sei S eine Menge von n disjunkten Liniensegmenten, deren obere
Endpunkte bei y = 1 liegen und deren untere Endpunkte bei y = 0 liegen.
Die Segmente teilen also die Menge (−∞, +∞) × [0, 1] in n + 1 Regionen
auf. Skizzieren Sie einen Algorithmus, der in O(n log n) einen Binärbaum
aufbaut, sodass die Region, in der sich ein gegebener Punkt p befindet, in
O(log n) bestimmt werden kann.
Funktioniert der Algorithmus auch für nicht disjunkte Liniensegmente?
Begründen Sie Ihre Antwort.
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
5 / 23
Aufgabenbesprechung
Aufgaben zur doppelt verknüpften Halbkantenliste
Aufgabe 2.1
Welche der folgenden Gleichungen sind immer wahr?
Twin(Twin(~e )) = ~e
Next(Prev (~e )) = ~e
Twin(Prev (Twin(~e ))) = Next(~e )
IncidentFace(~e ) = IncidentFace(Next(~e ))
Aufgabe 2.2
Geben Sie ein Beispiel einer doppelt verknüpften Halbkantenliste, bei der
für eine Kante ~e die Facetten IncidentFace(~e ) und IncidentFace(Twin(~e ))
gleich sind.
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
6 / 23
Aufgabenbesprechung
Aufgabe 2.3
Gegeben sei eine doppelt verknüpfte Halbkantenliste, in der für jede
Halbkante ~e gilt:
Twin(~e ) = Next(~e )
Wieviele Facetten kann diese Unterteilung höchstens haben?
Aufgabe 2.4
Gegeben sei eine doppelt verknüpfte Halbkantenliste einer
zusammenhängenden Unterteilung. Geben Sie einen Algorithmus in
Pseudocode an, der alle Facetten auflistet, deren Knoten auf dem äußeren
Rand liegen.
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
7 / 23
Laufzeitanalyse
Triangulierung eines einfachen Polygons
Laufzeitanalyse
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
8 / 23
Laufzeitanalyse
Unterteilung eines Polygons in monotone Teilstücke
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
9 / 23
Laufzeitanalyse
Bearbeitung von Startpunkten
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
10 / 23
Laufzeitanalyse
Bearbeitung von Endpunkten
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
11 / 23
Laufzeitanalyse
Bearbeitung von Trennpunkten
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
12 / 23
Laufzeitanalyse
Bearbeitung von Schmelzpunkten
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
13 / 23
Laufzeitanalyse
Bearbeitung von regulären Punkten
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
14 / 23
Laufzeitanalyse
Laufzeitanalyse
Unterteilung eines Polygons in monotone Teilstücke
Konstruktion von Q braucht O(n).
Initialisierung von T braucht konstante Zeit.
Ereignisse während dem sweep beschränken sich auf:
eine Operation auf Q, höchstens eine Abfrage, ein Einsetzen und eine
Löschung auf T und höchstens zwei Einfügungen von Diagonalen in
D.
Prioritätenliste und balancierte Suchbäume brauchen O(log n).
Einfügen einer Diagonale braucht O(1).
⇒ Insgesamte Laufzeit O(n log n).
Jeder Knoten/Kante wird höchstens einmal gespeichert.
⇒ Insgesamter Speicherbedarf: O(n).
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
15 / 23
Laufzeitanalyse
Triangulierung eines y-monotonen Polygons
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
16 / 23
Laufzeitanalyse
Laufzeitanalyse
Triangulierung eines y-monotonen Polygons
Schritt 1 braucht O(n).
Schritt 2 braucht konstante Zeit.
for Schleife wird n − 3 mal aufgerufen.
Gesamtanzahl an Einfügungen (pushs) auf dem Stack S ist
beschränkt durch 2 · (n − 3) + 2 = 2n − 4.
Es können nie mehr Elemente vom Stack entfernt (pop) werden als
hinzugefügt werden.
Schritt 11 braucht O(n).
⇒ Insgesamte Laufzeit: O(n).
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
17 / 23
Laufzeitanalyse
Folgerungen
Theorem 1
Ein y-monotones Polygon mit n Knoten kann in linearer Zeit trianguliert
werden. (Dabei sind Punkte mit gleicher y-Koordinate von links nach
rechts zu behandeln.)
Theorem 2
Ein einfaches Polygon mit n Knoten kann in O(n log n) Zeit und O(n)
Speicher trianguliert werden.
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
18 / 23
Laufzeitanalyse
Nicht-einfache Polygone
Polygone mit Löcher
Funktioniert der Algorithmus auch mit nicht-einfachen Polygonen, d.h.
Polygonen mit Löchern und Selbstüberschneidungen?
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
19 / 23
Laufzeitanalyse
Folgerungen
Polygone mit Löcher
Die Antwort ist ja, denn wir verwenden im Algorithmus der Aufteilung in
monotone Teilstücke niemals die Tatsache, dass ein Polygon einfach sein
muss.
Theorem 3
Eine planare Unterteilung mit n Knoten kann in O(n log n) Zeit und O(n)
Speicher trianguliert werden.
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
20 / 23
Aufgaben
Aufgaben
Neue Hausaufgaben
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
21 / 23
Aufgaben
Aufgabe zur Triangulierung von Polygonen
Aufgabe 1.1
Teilen Sie das nicht-einfache Polygon (siehe Datei Polygon.pdf) in
y-monotone Teilstücke auf.
Beschreiben Sie hierfür in jedem Ereignispunkt beim Sweep Line
Algorithmus, welcher Knotentyp behandelt wird und geben Sie die
Helferknoten helper (ej ) der Kante ej an, die sich bei dem jeweiligen
Ereignispunkt ändert.
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
22 / 23
Aufgaben
Aufgabe 1.2
Ein geradliniges Polygon (rectilinear polygon) ist ein Polygon, bei dem alle
Kanten entweder horizontal oder vertikal verlaufen. Sei P ein geradliniges
einfaches Polygon mit n Knoten.
Geben Sie ein Beispiel an, das aufzeigt, dass man im schlimmsten Fall b n4 c
Kameras benötigt, um den gesamten Bereich des Polygons zu überwachen.
Aufgabe 1.3
Geben Sie einen Algorithmus in Pseudocode an, um eine 3-Färbung eines
gegebenen triangulierten einfachen Polygons P mit n Knoten zu
berechnen.
Der Algorithmus soll in linearer Zeit laufen.
J. Fangerau (CoVis)
Algorithmische Geometrie
5. Juni 2012
23 / 23
Herunterladen