Algorithmische Geometrie 3. Schnitte von Liniensegmenten

Ähnliche Dokumente
6. Algorithmen der Computer-Geometrie

Algorithmische Geometrie

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

Teil III: Routing - Inhalt I. Literatur. Geometric Routing. Voraussetzungen. Unit Disk Graph (UDG) Geometric Routing 29

Effiziente Algorithmen und Datenstrukturen I. Kapitel 9: Minimale Spannbäume

Algorithmen & Datenstrukturen 1. Klausur

Literatur. Dominating Set (DS) Dominating Sets in Sensornetzen. Problem Minimum Dominating Set (MDS)

Datenstrukturen & Algorithmen

AVL-Bäume Analyse. Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl:

Lernziele: Ausgleichstechniken für binäre Bäume verstehen und einsetzen können.

8 Diskrete Optimierung

4 Greedy-Algorithmen (gierige Algorithmen)

Algorithmen und Datenstrukturen Suchbaum

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

Datenstruktur, die viele Operationen dynamischer Mengen unterstützt

Kap. 4.4: B-Bäume Kap. 4.5: Dictionaries in der Praxis

Algorithmen und Datenstrukturen Balancierte Suchbäume

3.1 Konstruktion von minimalen Spannbäumen Es gibt zwei Prinzipien für die Konstruktion von minimalen Spannbäumen (Tarjan): blaue Regel rote Regel

Informatik II Bäume. Beispiele. G. Zachmann Clausthal University, Germany Stammbaum. Stammbaum. Stammbaum

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v)

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

13. Binäre Suchbäume

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Programmiertechnik II

Graphen: Datenstrukturen und Algorithmen

Tutorium Algorithmen & Datenstrukturen

6-1 A. Schwill Grundlagen der Programmierung II SS 2005

Peer-to-Peer- Netzwerke

9.4 Binäre Suchbäume. Xiaoyi Jiang Informatik II Datenstrukturen und Algorithmen

Kapitel 6. Komplexität von Algorithmen. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Sortierverfahren für Felder (Listen)

Sortierte Folgen 250

Kap. 4.2: Binäre Suchbäume

Suchen und Sortieren Sortieren. Heaps

Pratts Primzahlzertifikate

ABITURPRÜFUNG 2009 LEISTUNGSFACH INFORMATIK

Algorithms for Regression and Classification

Algorithmen und Datenstrukturen

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Kompakte Graphmodelle handgezeichneter Bilder. Einbeziehung in Autentizierung und Bilderkennung

Download. Mathematik üben Klasse 8 Funktionen. Differenzierte Materialien für das ganze Schuljahr. Jens Conrad, Hardy Seifert

Grundlagen der Programmierung 2. Bäume

Anmerkungen zur Übergangsprüfung

Balancierte Bäume. Martin Wirsing. in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer. SS 06

Lineare Funktionen. 1 Proportionale Funktionen Definition Eigenschaften Steigungsdreieck 3

Fully dynamic algorithms for the single source shortest path problem.

Kapiteltests zum Leitprogramm Binäre Suchbäume

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

Einführung in die STL anhand eines ausgewählten Beispiels

Vorkurs Informatik WiSe 15/16

3. Übung Algorithmen I

Abschnitt: Algorithmendesign und Laufzeitanalyse

Java Generics & Collections

Programmieren ++ Begleitende Übungen zu Veranstaltungen + Umsetzen des Algorithmus in ein lauffähiges Programm

SS 2005 FAU Erlangen Eine Wegeplanungs-Strategie. Jeremy Constantin, Michael Horn, Björn Gmeiner

S=[n] Menge von Veranstaltungen J S kompatibel mit maximaler Größe J

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Codierung, Codes (variabler Länge)

Das Briefträgerproblem

14 Teiler verschieben

Seminar Komplexe Objekte in Datenbanken

3 Aufbau einer 2D-Zeichnung am Beispiel einer Türe Detailzeichnung, Symbol anlegen und Werkzeichnung

WS 2009/10. Diskrete Strukturen

Algorithmen II Vorlesung am

Organic Computing: Peer-to-Peer-Netzwerke

Praktikum Diskrete Optimierung (Teil 11)

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

t r Lineare Codierung von Binärbbäumen (Wörter über dem Alphabet {, }) Beispiel code( ) = code(, t l, t r ) = code(t l ) code(t r )

Name: Seite 2. Beantworten Sie die Fragen in den Aufgaben 1 und 2 mit einer kurzen, prägnanten Antwort.

Grundregeln der Perspektive und ihre elementargeometrische Herleitung

Lenstras Algorithmus für Faktorisierung

Undirected Single-Source Shortest Paths with Positive Integer Weights in Linear Time

Um Übergänge, Ein- und Ausblendung zu gestalten, kann man hier eine Leere vor oder nach einem Clip einfügen. Ein Clip ist ein einzelner Film.

Algorithmen und Datenstrukturen 2

16. All Pairs Shortest Path (ASPS)

Vorlesung Informatik 2 Algorithmen und Datenstrukturen. (20 Graphen) T. Lauer

Laufzeit und Komplexität

Kompakte Graphmodelle handgezeichneter Bilder

DATENSTRUKTUREN UND ZAHLENSYSTEME

Datenstrukturen und Algorithmen

Algorithmen und Datenstrukturen SS09

Codierungstheorie Rudolf Scharlau, SoSe

Modelle und Statistiken

Abiturprüfung Mathematik 2008 (Baden-Württemberg) Berufliche Gymnasien ohne TG Analysis, Aufgabe 1

PROSEMINAR ONLINE ALGORITHMEN

5.2 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) Kürzeste Wege zwischen allen Knoten. Eingabe: Gerichteter Graph G =(V, E, c)

Programmierung und Modellierung

Tutoren Simon Andermatt Lukas Beck. Alexis Peter Thomas Ritter

Einführung in (Binäre) Bäume

Tutoren Jan Ebbe Pat Mächler Valentino Rugolo Sascha Scherrer. Grundlagen der Programmierung (CS101) - Blatt 8 Theorie [4 Punkte] - Praxis [12 Punkte]

MATHEMATISCHE ANALYSE VON ALGORITHMEN

1. Musterlösung. Problem 1: Average-case-Laufzeit vs. Worst-case-Laufzeit

15 Optimales Kodieren

Parallele und funktionale Programmierung Wintersemester 2013/ Übung Abgabe bis , 16:00 Uhr

Bestimmung einer ersten

Transkript:

Algorithmische Geometrie 3. Schnitte von Liniensegmenten JProf. Dr. Heike Leitte Computergraphik und Visualisierung

Inhaltsverzeichnis 1. Einführung 2. Konvexe Hülle 3. Schnitte von Liniensegmenten 4. Schnitte planarer Unterteilungen 5. Triangulierung von Polygonen 6. Lineare Programme 7. Punktsuche 8. Voronoidiagramme und Delaunay-Triangulierung 9. Allgemeine Suchstrukturen Algorithmische Geometrie 3. Schnitte von Liniensegmenten 2

Anwendung GIS Als nächstes wenden wir uns Beispiel (2) aus der Einführung zu (Erinnerung: Schnitte von Liniensegmenten in geographischen Informationssystemen.) Algorithmische Geometrie 3. Schnitte von Liniensegmenten 3

Schnitte von Liniensegmenten Aus zwei Mengen S 1, S 2 von Liniensegmenten möchten wir alle Schnittpunkte der Segmente aus S 1 mit denen aus S 2 ermitteln. Wir legen fest, dass sich zwei Segmente auch schneiden, falls der Endpunkt des einen Segmentes auf dem anderen liegt. Wir betrachten Segmente also als abgeschlossen. Um es einfacher zu machen, betrachten wir Schnitte in S=S 1 S 2. (Unser Problem lässt sich dann lösen, indem wir bei jedem Schnitt fragen, ob die Segmente zu verschiedenen Mengen gehören.) Algorithmische Geometrie 3. Schnitte von Liniensegmenten 4

Problem Offensichtlich ist der Schnitttest zweier Segmente in konstanter Zeit zu lösen und folglich eine brute-force Lösung in O(n 2 ) Schritten möglich. Dies ist sogar optimal, falls jedes Segment jedes andere schneidet. Allerdings ist dies in der Praxis meistens nicht der Fall. Wir suchen also einen outputsensitiven Algorithmus, dessen Komplexität von der Größe des Output (Anzahl der Schnittpunkte) abhängt. Wie soll das gehen? Algorithmische Geometrie 3. Schnitte von Liniensegmenten 5

Sweep Line Ansatz Im Wesentlichen wollen wir ausnutzen, dass sich nur "nahe" Segmente auch schneiden können. Liegen zwei Segmente S 1, S 2 etwa so, dass sich das Intervall der y-koordinaten der Punkte in S 1 außerhalb des Intervalls der y-koordinaten der Punkte in S 2 befindet, so gibt es keinen Schnitt. Um nur potentielle Schnitte testen zu müssen, verfolgen wir eine horizontale Gerade (Sweep Line, engl. to sweep = fegen, kehren, abtasten), die sich von oben nach unten bewegt und testen nur Segmente, die die Gerade schneiden => Plane Sweep. Algorithmische Geometrie 3. Schnitte von Liniensegmenten 6

Sweep Line Zustand Als Zustand unserer Sweep Line definieren wir die von ihr geschnittenen Liniensegmente. Dieser Zustand ändert sich, wenn sich die Gerade nach unten bewegt, und zwar stets dann, wenn ein Segmentpunkt erreicht wird, da ein Segment ausscheidet oder ein neues hinzukommt. Diese Punkte nennen wir Ereignispunkte (engl. event point). Wenn ein neues Segment zum Zustand der Sweep Line hinzukommt, testen wir es auf Schnitte mit allen Segmenten die bereits im Zustand gespeichert sind. (Also mit allen Liniensegmenten, die die Sweep Line schneiden und vor dem aktuellen Ereignispunkt angefangen haben.) Algorithmische Geometrie 3. Schnitte von Liniensegmenten 7

Sweep Line Neue Ereignisse Leider stellt sich das Problem etwas schwieriger dar: Wir können noch immer viel zu viele Tests durchführen, etwa bei einer Menge vertikaler Segmente, die die x-achse schneiden. Daher ordnen wir die Segmente entlang der Sweep Line und testen nur Nachbarn auf Schnitte. Ferner führen wir Schnitte als weitere Ereignisse ein, da sich dort die Reihenfolge der Segmente ändert. Algorithmische Geometrie 3. Schnitte von Liniensegmenten 8

Korrektheitsbeweis Außer in einigen Spezialfällen (horizontale Segmente, überlappenden Segmente, Schnitt von mehr als zwei Segmenten in einem Punkt) ist unser Algorithmus nun korrekt: Lemma 25: Seien S i und S j zwei nicht-horizontale Segmente, die sich im inneren Punkt p schneiden, und es gebe kein drittes Segment durch p. Dann gibt es einen Ereignispunkt oberhalb von p, an dem S i und S j benachbart werden und somit auf Schnitt getestet werden. Beweis: Einerseits sind S i und S j für eine horizontale Gerade l ausreichend nahe oberhalb von p benachbart. (Nimm an, dass alle Ereignisse oberhalb p gefunden werden und wähle l zwischen dem niedrigsten dieser Ereignisse und p!) Andererseits ist der Zustand der Sweep Line oberhalb aller Segmente leer, also wird ein Ereignis behandelt, an dem S i und S j Nachbarn werden. (Sobald S i und S j Nachbarn werden, wird ein Schnitttest durchgeführt, der dann positiv ausfällt.) QED Algorithmische Geometrie 3. Schnitte von Liniensegmenten 9

Zusammenfassung des Algorithmus Zusammenfassung: Sweep-line wird von oben nach unten bewegt. Sie hält an bestimmten Ereignispunkten (Endpunkte der Liniensegmente, Schnittpunkte). An den Ereignispunkten ändert sich die Anordnung der Liniensegmente muss der Status (geschnittene Liniensegmente) angepasst werden und auf Schnitte getestet werden. Die von der Sweep-line geschnittenen Liniensegmente werden in geordneter Folge gespeichert. Aktionen an Ereignispunkten: oberer Endpunkt: Schnitttest mit beiden Nachbarn Schnittpunkt: Ordnung der beiden Segmente ändert sich (neue Nachbarn Schnitttest) unterer Endpunkt: Nachbarn des Segments werden zu neuen Nachbarn Schnitttest Algorithmische Geometrie 3. Schnitte von Liniensegmenten 10

Datenstruktur Ereignispunkte Unser Algorithmus funktioniert also bis auf Spezialfälle und wir können uns an die Datenstrukturen begeben. Für die Ereigniswarteschlange (engl. event queue) Q fordern wir: Eine Remove-Funktion, die den nächsten Event Point liefert, und zwar nach y- Koordinate und bei gleichen y-werten nach x-koordinate geordnet. Eine Insert-Funktion, die mehrfaches Einfügen des gleichen Events unterbindet (etwa bei zwei Segmenten mit gleichem Startpunkt) Als Implementierung verwenden wir einen ausgeglichenen binären Suchbaum, so dass beide Operationen O(log m) Schritte für m Elemente in Q benötigen. Algorithmische Geometrie 3. Schnitte von Liniensegmenten 11

Datenstrukturen in der STL Klassen in der STL und Komplexität im gegebenen Fall: einfügen löschen Idee vector O(n) O(n) Array deque O(n) O(1) - O(n) Queue mit zwei Enden list O(n) O(1) Verkettete Liste stack - - Stapel queue - - FIFO set O( log(n) ) O( log(n) ) map O( log(n) ) O( log(n) ) Menge (Element ist Schlüssel) Menge mit extra Schlüssel Algorithmische Geometrie 3. Schnitte von Liniensegmenten 12

Datenstruktur Zustand der Sweep Line Für die Zustandsstruktur T bestehend aus der geordneten Liste der Segmente benötigen wir: Insert Remove LeftNeighbor, RightNeighbor gemäß Sortierung Wieder verwenden wir einen ausgeglichenen binären Suchbaum. (Dabei ist es zuweilen etwas einfacher die Objekte nur in den Blättern abzulegen, aber dies ist nicht nötig und kostet Speicher.) Wieder erfordern alle Operationen O(log n) Schritte. Algorithmische Geometrie 3. Schnitte von Liniensegmenten 13

Algorithmus Der Algorithmus hat folgende Gestalt. Algorithmische Geometrie 3. Schnitte von Liniensegmenten 14

Algorithmus Algorithmische Geometrie 3. Schnitte von Liniensegmenten 15

Algorithmus Änderung des Status Bemerkung: An event point and the changes in the status structure Wenn es in Zeile 8 16 keinen Nachbarn gibt, sind entsprechende Schnittberechnungen zu unterlassen. Algorithmische Geometrie 3. Schnitte von Liniensegmenten 16

Algorithmus Neue Ereignispunkte Um auch mit horizontalen Segmenten umgehen zu können, setzen wir Algorithmische Geometrie 3. Schnitte von Liniensegmenten 17

Korrektheitsbeweis Lemma 2.6: FINDINTERSECTIONS berechnet alle Schnittpunkte und die betroffenen Segmente korrekt. Beweis: Induktion über die Reihenfolge der Ereignispunkte Sei p ein Schnittpunkt und seien alle Ereignispunkte q vor p korrekt behandelt. Seien U(p) die Segmente mit p als oberen Endpunkt, L(p) die Segmente mit p als unterem Endpunkt und C(p) die Segmente mit p im Inneren. z.z.: p und alle Segmente, die p enthalten, wurden korrekt berechnet: QED p ist Endpunkt: Wenn p ein Endpunkt eines Segmentes ist, wird p zu Beginn in Q eingefügt und alle Segmente in U(p) in p gespeichert. Wenn p behandelt wird, werden Segmente in L(p) und C(p) in T gespeichert sein und dann in Zeile 2 von HANDLEEVENTPOINT gefunden. p ist kein Endpunkt: Wenn p kein Endpunkt eines Segmentes ist, haben alle betroffenen Segmente p als inneren Punkt. Wir ordnen diese Segmente nach dem Winkel und betrachten zwei benachbarte Segmente S i und S j. Nach dem Beweis von Lemma 2.5 gibt es dann einen Ereignispunkt q vor p, an dem S i und S j Nachbarn werden und p entdeckt wird. (Dass wir in 2.5. horizontale Segmente ausgeschlossen haben, lässt sich schnell korrigieren.) Algorithmische Geometrie 3. Schnitte von Liniensegmenten 18

Laufzeit n: Anzahl Liniensegmente m: p m(p) m(p) := card( L(p) + U(p) + C(p) ) O(n log n) O(1) O(m log n) } O( (n + m) log n ) Algorithmische Geometrie 3. Schnitte von Liniensegmenten 19

Laufzeit n: Anzahl Liniensegmente m: p m(p) m(p) := card( L(p) + U(p) + C(p) ) O(n log n) O(1) O(m log n) } O( (n + m) log n ) O(1) O(log n) O(log n) O(log n) O(log n) max 2x Algorithmische Geometrie 3. Schnitte von Liniensegmenten 20

Laufzeit Obere Schranke für m: O( n + k ) z.z.: m = O( n + I ) mit k = Größe der Ausgabe mit I = Anzahl der Schnittpunkte Die Segmente und ihre Schnittpunkte kann man sich als planaren Graphen (keine Überschneidungen zwischen Kanten) vorstellen. Vertices: Endpunkte und Schnittpunkte Kanten: Segmentstücke, die Vertices verbinden m(p) = O( Grad p ) m = O( Grad p ) 2 Knoten pro Kanten m = O( 2 nedges ) p per Def.: nvertices 2n + I nfaces 2 nedges / 3 nach Euler: nvertices nedges + nfaces 2 nach Einsetzen: nedges 6n + 3I - 6 m 12n + 6I - 12 Algorithmische Geometrie 3. Schnitte von Liniensegmenten 21

Laufzeit Obere Schranke für m: O( n + k ) z.z.: m = O( n + I ) mit k = Größe der Ausgabe mit I = Anzahl der Schnittpunkte Die Segmente und ihre Schnittpunkte kann man sich als planaren Graphen (keine Überschneidungen zwischen Kanten) vorstellen. Vertices: Endpunkte und Schnittpunkte Kanten: Segmentstücke, die Vertices verbinden m(p) = O( Grad p ) m = O( Grad p ) 2 Knoten pro Kanten m = O( 2 nedges ) p per Def.: nvertices 2n + I nfaces 2 nedges / 3 nach Euler: nvertices nedges + nfaces 2 nach Einsetzen: nedges 6n + 3I - 6 m 12n + 6I - 12 Algorithmische Geometrie 3. Schnitte von Liniensegmenten 22

Laufzeit n: Anzahl Liniensegmente l: Anzahl der Schnitte O(n log n) O(1) O((n+l) log n) } O( (n + l) log n ) Algorithmische Geometrie 3. Schnitte von Liniensegmenten 23

Laufzeit Algorithmische Geometrie 3. Schnitte von Liniensegmenten 24

Laufzeit Es gilt ferner, dass der Algorithmus O((n+k)log(n)) Schritte benötigt, wobei k die Anzahl sich schneidender Segmente ist. Es gilt sogar Lemma 2.7.: Die Laufzeit des Algorithmus FINDINTERSECTIONS für eine Menge S von n Liniensegmenten ist O(n log n+i log n), wobei I die Anzahl von Schnittpunkten von Segmenten in S ist. Beweis: Der Aufbau von Q mit den Endpunkten erfordert O(n log n) Zeit. T ist zunächst leer, also O(1). Eine Ereignisbehandlung erfordert drei Operationen auf Q, das Löschen von p in Zeile 4 von FINDINTERSECTIONS und ein oder zwei Aufrufe von FINDNEWEVENT mit bis zu zwei neuen Events in Q. Also ist das Update von Q O(log n). Wir führen außerdem Operationen auf T (Einfügen, Löschen, Nachbarsuche) durch und zwar linear in m p = U p C p L p. Mit m:= m p folgt O(m log n) für den Algorithmus. p Algorithmische Geometrie 3. Schnitte von Liniensegmenten 25

Laufzeit Es gilt sicher m = O(n + k), da wir für m(p) > 1 alle betroffenen Segmente auf einmal liefern. Um m = O(n + I) zu zeigen, fassen wir unser Problem als Graph mit Endpunkten und Schnittpunkten als Knoten und Segment(-teilen) als Kanten auf. Dann ist m(p) durch den Grad des Knotens beschränkt und da jede Kante im Graph zwei Knoten trifft, gilt m < 2n e mit n e Anzahl Kanten im Graph. Mit der Anzahl n der Endpunkte und I der Schnitte ergibt sich n v 2n I mit n v Anzahl Knoten im Graph. Wegen n e = O(n v ) (Euler Formel n v n e n f 2 mit n f Anzahl der Flächen und n f < 2/3 n e, da jede Kante nur zwei Flächen beranden kann und jede Fläche von mind. 3 Kanten berandet werden muss) folgt die Aussage. QED Algorithmische Geometrie 3. Schnitte von Liniensegmenten 26

Speicherplatz Für den Speicherplatz gilt, dass T nie mehr als alle n Segmente enthält, also O(n) Speicherplätze benötigt. Q kann größer sein, aber es reicht, nur die Schnitte gerade in T benachbarter Segmente zu speichern, also O(n) Speicherplätze für Q. Theorem 2.8.: Sei S eine Menge von n Liniensegmenten in der Ebene. Alle Schnittpunkte in S mit den betroffenen Segmenten können in O(n log n + I log n) Schritten und O(n) Speicherplätzen gefunden werden, wobei I die Anzahl der Schnittpunkte ist. Algorithmische Geometrie 3. Schnitte von Liniensegmenten 27