Fakultät für Mathematik Universität Karlsruhe Ein schneller Konstruktionsalgorithmus für eine Quickest-Path-Map bezüglich der City-Metrik Diplomarbeit von Robert Görke ([email protected]) September 2004 Ausgeführt unter der Leitung von Referent/Betreuer: Dr. Alexander Wolff Fakultät für Informatik Universität Karlsruhe Koreferent: Prof. Dr. Willy Dörfler Fakultät für Mathematik Universität Karlsruhe I Eidesstattliche Erklärung Hiermit versichere ich, dass ich die vorliegende Diplomarbeit ohne Hilfe Dritter und nur mit den angegebenen Quellen und Hilfsmitteln angefertigt habe. Diese Arbeit hat in gleicher oder ähnlicher Form noch keiner Prüfungsbehörde vorgelegen. Karlsruhe, am 5. Oktober 2004 Robert Görke III Zusammenfassung Das City-Voronoi-Diagramm ist eine Partition der Ebene in Einzugsgebiete von Bezugspunkten. Es wird durch schnellste Pfade, die L1 -Norm und ein beschleunigendes, isothetisches Transportnetzwerk induziert. Die Quickest-PathMap (auch verfeinertes City-Voronoi-Diagramm) bildet ein augmentiertes CityVoronoi-Diagramm, welches Einzugsgebiete in Regionen äquivalenter schnellster Pfade zur Menge der Bezugspunkte partitioniert. Wir erstellen die QuickestPath-Map durch Simulation einer Wellenfrontausdehnung und berechnen Änderungen der kombinatorischen Gestalt der Wellenfront mit Hilfe einer Technik von Eppstein (1995). Dabei nutzen wir die dreidimensionale Interpretation Straight-Skeleton-Strukturen einer Quickest-Path-Map. Für n Bezugspunkte und c Netzwerkkanten beträgt der Speicherbedarf des vorgestellten Algorithmus O((c + n)polylog(c + n)) und die asymptotische Laufzeit ebenfalls O((c + n)polylog(c + n)), was das bisher schnellste Resultat von Aichholzer u. a. (2002) mit einer asymptotischen Laufzeit von O(n log n + c2 log c) verbessert. Die Quickest-Path-Map beantwortet Quickest-Path-Anfragen in einer asymptotischen Laufzeit von O(L + log(c + n)), wobei L die Komplexität der Ausgabe ist. V Dank Ich danke Alexander Wolff für seine Unterstützung und Mühe, Willy Dörfler für seine Ratschläge, David Eppstein und Jeff Erickson für ihre Erläuterungen und Hinweise, Michael Lamoureux für seine Unterstützung, meiner Familie für ihre große Hilfe und Mühe, Kirsten für ihren moralischen und tatkräftigen Beistand, der Firma Valve für ihre Ablenkung und der Firma Windmere für einen wunderbaren Ventilator. Inhaltsverzeichnis Eidesstattliche Erklärung I Zusammenfassung III Dank V Inhaltsverzeichnis VII Abbildungsverzeichnis XI Tabellenverzeichnis XV Algorithmenverzeichnis XVII 1 Einführung 1 1.1 Bisherige Arbeiten . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Ergebnisse und Methoden . . . . . . . . . . . . . . . . . . . . . . 3 1.3 Liste verwendeter Variablen . . . . . . . . . . . . . . . . . . . . . 6 2 Grundstrukturen 9 2.1 Das Straight-Skeleton . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Das City-Voronoi-Diagramm . . . . . . . . . . . . . . . . . . . . 13 2.3 Der Algorithmus von Aichholzer u. a. . . . . . . . . . . . . . . . 14 2.4 Unser Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3 Die Wellenfrontausdehnung 9 19 3.1 Das Transportnetzwerk . . . . . . . . . . . . . . . . . . . . . . . 19 3.2 Schnellste Pfade und die City-Metrik . . . . . . . . . . . . . . . 20 3.3 Die Wellenfront . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.3.1 Der Start der Wellenfront . . . . . . . . . . . . . . . . . . 23 3.3.2 Eine erste Datenstruktur . . . . . . . . . . . . . . . . . . 24 VIII INHALTSVERZEICHNIS 3.3.3 Typen von Ereignissen . . . . . . . . . . . . . . . . . . . . 25 3.3.4 Relevanz von Ereignissen . . . . . . . . . . . . . . . . . . 29 3.4 Die lineare Größe . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.5 Definierende Objekte und Pfadkodierung . . . . . . . . . . . . . . 37 4 Die Wellenfront im Raum 39 4.1 Eine Kante verschwindet . . . . . . . . . . . . . . . . . . . . . . . 39 4.2 Die Wellenfront als Höhenlinie . . . . . . . . . . . . . . . . . . . 40 4.3 Die Netzwerksegmente als Wände . . . . . . . . . . . . . . . . . . 41 5 Der Kern 43 5.1 Die Diskretisierung . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5.2 Die globale Prognose . . . . . . . . . . . . . . . . . . . . . . . . . 44 5.3 Lokale Prognosen . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 6 Elemente der Wellenfront 47 6.1 Figuren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 6.2 Knoten und Strahlen . . . . . . . . . . . . . . . . . . . . . . . . . 49 6.3 Parameter von Knotenstrahlen . . . . . . . . . . . . . . . . . . . 51 6.4 Kanten und Streifen . . . . . . . . . . . . . . . . . . . . . . . . . 56 6.4.1 Kanten . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 6.4.2 Streifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 6.4.3 Streifentypen . . . . . . . . . . . . . . . . . . . . . . . . . 60 Die Interaktionen der Streifen . . . . . . . . . . . . . . . . . . . . 62 6.5.1 Bescheidene Streifen . . . . . . . . . . . . . . . . . . . . . 62 6.5.2 Für jedes Ereignis ein Streifen . . . . . . . . . . . . . . . 63 Anzahl der Datenstrukturen . . . . . . . . . . . . . . . . . . . . . 64 6.5 6.6 7 Eine Vereinfachung der Daten 7.1 67 Orthogonalisierende Scherungen . . . . . . . . . . . . . . . . . . . 68 7.1.1 Ausrichtung des Koordinatensystems . . . . . . . . . . . . 69 7.1.2 Ausrichtung der Streifenseiten orthogonal zur x-Achse . . 71 7.1.3 Ausrichtung der Streifenböden orthogonal zur y-Achse . . 72 7.1.4 Ausrichtung der Streifenböden parallel zur x-Achse . . . . 74 7.1.5 Ausrichtung der Streifenkanten parallel zur y-Achse . . . 75 7.1.6 Die Zeitkorrektur . . . . . . . . . . . . . . . . . . . . . . . 76 7.2 Korrektheit der Transformation . . . . . . . . . . . . . . . . . . . 78 7.3 Die Anpassung der Transformation f 80 . . . . . . . . . . . . . . . INHALTSVERZEICHNIS IX 8 Die Minimierungsanfragen 81 8.1 Die Datenstrukturen für Ray-Shooting-Anfragen . . . . . . . . . 82 8.1.1 Die erste Stufe der Datenstruktur . . . . . . . . . . . . . . 84 8.1.2 Die zweite Stufe der Datenstruktur . . . . . . . . . . . . . 84 8.1.3 Die dritte Stufe der Datenstruktur . . . . . . . . . . . . . 84 8.1.4 Die vierte Stufe der Datenstruktur . . . . . . . . . . . . . 85 8.2 Orthogonale Bereichsanfrage ersetzt Ray-Shooting-Anfrage . . . 85 8.3 Redundante Typ-A-Ereignisse . . . . . . . . . . . . . . . . . . . . 86 8.4 Die Datenstrukturen für Lowest-Intersection-Anfragen . . . . . . 87 8.4.1 Die erste Stufe der Datenstruktur . . . . . . . . . . . . . . 88 8.4.2 Die zweite Stufe der Datenstruktur . . . . . . . . . . . . . 89 8.4.3 Die dritte Stufe der Datenstruktur . . . . . . . . . . . . . 89 8.5 Orthogonale Bereichsanfrage statt Lowest-Intersection-Anfrage . 89 8.6 Die Anpassung der Minimierungsanfragen . . . . . . . . . . . . . 90 8.7 Der Ergebnisfilter . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 8.8 Fractional-Cascading . . . . . . . . . . . . . . . . . . . . . . . . . 92 9 Anfragen 95 9.1 Die Quickest-Path-Map . . . . . . . . . . . . . . . . . . . . . . . 95 9.2 Der Quickest-Path-Graph . . . . . . . . . . . . . . . . . . . . . . 96 9.3 Die Pfadsuche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 9.3.1 Point-Location . . . . . . . . . . . . . . . . . . . . . . . . 99 9.3.2 Zum definierenden Objekt . . . . . . . . . . . . . . . . . . 100 9.3.3 Der schnellste Pfad . . . . . . . . . . . . . . . . . . . . . . 100 10 Analyse der Ergebnisse 103 10.1 Konstruktion der Quickest-Path-Map . . . . . . . . . . . . . . . . 103 10.2 Das Ergebnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 10.3 Degeneriertheiten und Besonderheiten . . . . . . . . . . . . . . . 107 10.3.1 h-orientierte Straight-Skeletons . . . . . . . . . . . . . . . 107 10.3.2 Simultane Ereignisse . . . . . . . . . . . . . . . . . . . . . 107 10.3.3 Selbstständige gezogene Kanten . . . . . . . . . . . . . . . 108 10.4 Der Einfluss von k . . . . . . . . . . . . . . . . . . . . . . . . . . 109 11 Fazit 111 11.1 Kritik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 11.2 Anwendung und Anschauung . . . . . . . . . . . . . . . . . . . . 112 11.3 Offene Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 X INHALTSVERZEICHNIS 11.4 Wegpunkte dieser Arbeit . . . . . . . . . . . . . . . . . . . . . . . 113 Literaturverzeichnis 117 Index 121 Abbildungsverzeichnis 1.1 Beispiel einer Anordnung von C und S . . . . . . . . . . . . . . . 2 1.2 Mehrere schnellste Pfade p1 , . . . , p4 von a nach b . . . . . . . . . 2 2.1 Ein schrumpfendes Polygon . . . . . . . . . . . . . . . . . . . . . 10 2.2 Das konstruierte Straight-Skeleton . . . . . . . . . . . . . . . . . 10 2.3 Ein einfaches Straight-Skeleton . . . . . . . . . . . . . . . . . . . 11 2.4 Gewichtetes Straight-Skeleton . . . . . . . . . . . . . . . . . . . . 11 2.5 Dach eines gewichteten Polygons . . . . . . . . . . . . . . . . . . 12 2.6 Ausdehnendes Polygon . . . . . . . . . . . . . . . . . . . . . . . . 12 2.7 Wellenfronten verschmelzen . . . . . . . . . . . . . . . . . . . . . 12 3.1 Verschiedene schnellste Wege . . . . . . . . . . . . . . . . . . . . 21 3.2 Regionen kombinatorisch äquivalenter Wege . . . . . . . . . . . . 22 3.3 Start der Wellenfront als L1 -Kreis . . . . . . . . . . . . . . . . . 23 3.4 Start der Wellenfront als City-Metrik-Kreis . . . . . . . . . . . . 23 3.5 Lage eines Punkts p der Wellenfront . . . . . . . . . . . . . . . . 24 3.6 Ein Typ-A-Ereignis . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.7 Ein Typ-B-Ereignis . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.8 Ein Typ-C-Ereignis . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.9 Drei simultane Typ-C-Ereignisse . . . . . . . . . . . . . . . . . . 28 3.10 Vier simultane Typ-C-Ereignisse . . . . . . . . . . . . . . . . . . 28 3.11 Ein Typ-D-Ereignis . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.12 Andere Sichtweise eines Typ-D-Ereignisses . . . . . . . . . . . . . 28 3.13 Typ-D-Ereignis vereint zwei Wellenfronten . . . . . . . . . . . . . 29 3.14 Die Wellenfront wird unzusammenhängend . . . . . . . . . . . . 30 3.15 Ein virtuelles Typ-A-Ereignis bahnt sich an . . . . . . . . . . . . 31 3.16 Ein virtuelles Ereignis wird vorweggenommen . . . . . . . . . . . 31 3.17 Redundanz durch gleiche Segmentgeschwindigkeit . . . . . . . . . 32 XII ABBILDUNGSVERZEICHNIS 3.18 Redundanz durch langsamere Segmentgeschwindigkeit . . . . . . 32 3.19 Höhere Segmentgeschwindigkeit verhindert Redundanz . . . . . . 32 3.20 Ein redundantes Typ-B-Ereignis . . . . . . . . . . . . . . . . . . 32 3.21 Die Menge der Skelettkanten wird unzusammenhängend . . . . . 33 3.22 Der Knoten v∞ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.23 Θ(c(c + n)) Typ-A-Ereignisse . . . . . . . . . . . . . . . . . . . . 35 3.24 Das Maximum redundanter Ereignisse pro Ecke . . . . . . . . . . 36 3.25 Verfeinerung zum Konstruktionsdiagramm . . . . . . . . . . . . . 36 3.26 Eine β-Kante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.1 Ein Typ-A-Ereignis im Raum . . . . . . . . . . . . . . . . . . . . 41 4.2 Ein Typ-B-Ereignis im Raum . . . . . . . . . . . . . . . . . . . . 42 6.1 Eine 0-Nadel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 6.2 Eine 1-Nadel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 6.3 Eine 2-Nadel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 6.4 Eine innere 2-Nadel . . . . . . . . . . . . . . . . . . . . . . . . . 48 6.5 Eine 3-Nadel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 6.6 Eine 4-Nadel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 6.7 Pionier-Kanten und gezogene Kanten . . . . . . . . . . . . . . . . 50 6.8 Ein Knoten der Wellenfront biegt ab . . . . . . . . . . . . . . . . 52 6.9 Zwei divergierende Knoten . . . . . . . . . . . . . . . . . . . . . . 53 6.10 Zwei konvergierende Knoten . . . . . . . . . . . . . . . . . . . . . 53 6.11 Zwei entgegengesetzt wandernde Knoten . . . . . . . . . . . . . . 54 6.12 Zwei parallel wandernde Knoten . . . . . . . . . . . . . . . . . . 55 6.13 Indirekte Interferenz von Kanten . . . . . . . . . . . . . . . . . . 56 6.14 Steigung einer Kante der Wellenfront . . . . . . . . . . . . . . . . 57 6.15 Streifen von KV . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 6.16 Beispiele von Streifenklassen . . . . . . . . . . . . . . . . . . . . . 60 6.17 Die vier verschiedenen Streifentypen . . . . . . . . . . . . . . . . 61 7.1 Ein Streifen und ein Strahl im Raum . . . . . . . . . . . . . . . . 68 7.2 Winkeldefinition bei Drehung des Koordinatensystems . . . . . . 69 7.3 Situation nach der Ausrichtung . . . . . . . . . . . . . . . . . . . 71 1 7.4 Scherung f in der x-y-Ebene . . . . . . . . . . . . . . . . . . . . 72 7.5 Das Ergebnis von f 1 im Raum . . . . . . . . . . . . . . . . . . . 72 7.6 Scherung f 2 in der x-y-Ebene . . . . . . . . . . . . . . . . . . . . 73 7.7 2 Das Ergebnis von f im Raum . . . . . . . . . . . . . . . . . . . 73 ABBILDUNGSVERZEICHNIS 7.8 7.9 Scherung f 3 in der x-z-Ebene . . . . . . . . . . . . . . . . . . . . 3 Das Ergebnis von f im Raum . . . . . . . . . . . . . . . . . . . 4 7.10 Scherung f in der y-z-Ebene . . . . . . . . . . . . . . . . . . . . 4 XIII 74 74 75 7.11 Das Ergebnis von f im Raum . . . . . . . . . . . . . . . . . . . 75 7.12 Zwei Strahlen müssen zeitkorrigiert werden . . . . . . . . . . . . 76 7.13 Typ-4-Streifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 8.1 Ein vierdimensionaler Bereichsbaum . . . . . . . . . . . . . . . . 85 8.2 Die Koordinatenrichtung Ψ . . . . . . . . . . . . . . . . . . . . . 91 9.1 Ein β-Kanten-Pfad . . . . . . . . . . . . . . . . . . . . . . . . . . 97 9.2 Pfad zum definierenden Objekt . . . . . . . . . . . . . . . . . . . 100 10.1 Konstruktion der Quickest-Path-Map . . . . . . . . . . . . . . . . 104 10.2 Straight-Skeleton einer h-orientierten Figur . . . . . . . . . . . . 107 10.3 Kollision zweier Kanten . . . . . . . . . . . . . . . . . . . . . . . 108 10.4 Spezielle gezogene Kanten . . . . . . . . . . . . . . . . . . . . . . 108 11.1 Eine komplexe Quickest-Path-Map . . . . . . . . . . . . . . . . . 115 Tabellenverzeichnis 1.1 Verwendete Variablen . . . . . . . . . . . . . . . . . . . . . . . . 6 6.1 Die verschiedenen Streifentypen . . . . . . . . . . . . . . . . . . . 61 7.1 Richtungskosinusse bei Drehungen . . . . . . . . . . . . . . . . . 70 Algorithmenverzeichnis 1 2 3 Beantwortung einer Ray-Shooting-Anfrage durch eine orthogonale Bereichsanfrage . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Beantwortung einer Lowest-Intersection-Anfrage durch eine orthogonale Bereichsanfrage . . . . . . . . . . . . . . . . . . . . . . 90 Ausgabe der Knoten des schnellsten Pfades von p nach S . . . . 100 ”For arbitrary polygons we can avoid this issue by chanting the holy mantra ’Assume general position! Assume general position!’, but even that isn’t very satisfying.” Jeff Erickson, 2004 Kapitel 1 Einführung Angenommen im Jahr 2050 sind die Fluten des Kraft- und Personenverkehrs aus den Straßen von Manhattan verbannt. In der riesigen Fußgängerzone beschleunigt lediglich ein Transportnetzwerk von Fließbändern den Weg der zahllosen Passanten und Besucher. Die ausschließlich horizontal und vertikal angelegten Straßen, die Manhatten wie ein dichtes Gitter überziehen, bieten einem Fußgänger stets einen offensichtlichen Weg zu einem der vielen Postämter, solange die Richtung bekannt ist. Doch Zeit ist kostbar, und daher ist ein System nötig, das einen Füßgänger für jeden beliebigen Punkt der Stadt darüber informiert, wie er auf schnellstem Weg zu dem in kürzester Zeit erreichbaren Postamt gelangt. Dabei sollen Umwege über das schnelle Netzwerk immer dann genutzt werden, wenn sich diese zeitlich lohnen. Ein ähnliches Problem stellt sich einem Kurierdienst, der an mehreren Stützpunkten in der Stadt Kuriere stationiert hat. Bei Eingang eines Auftrags muss entschieden werden, wie und von welchem Stützpunkt aus der Auftragsort am schnellsten erreicht werden kann. Das Ergebnis dieser Arbeit ist ein Algorithmus zur Konstruktion einer Datenstruktur in Form einer Quickest-Path-Map der Ebene, mit der man Anfragen nach schnellsten Pfaden effizient beantworten kann. Beantwortet werden Anfragen nach dem (zeitlich) nächsten Bezugspunkt und dem schnellsten Pfad zu diesem. Die algorithmische Komplexität einer solchen Quickest-Path-Anfrage wird offenbar, wenn man bedenkt, dass es nicht notwendigerweise ausreicht, das Transportnetzwerk anzusteuern und diesem einfach bis zu einem Punkt zu folgen, der nahe am Zielort gelegen ist. Es kann an vielen Stellen von Vorteil sein, zwischendurch eine Abkürzung zu Fuß zu bewältigen. Das Transportnetzwerk C ist ein planarer Graph, bestehend aus c geraden, sich nicht schneidenden Strecken als Kanten, welche isothetisch (das heißt vertikal oder horizontal) ausgerichtet sind, und an jedem Punkt betreten oder verlassen werden können. Jede Kante besitzt eine von k (konstant) verschiedenen Geschwindigkeiten, mit der man sich auf dieser Kante fortbewegen kann, während abseits des Transportnetzwerks nur die Einheitsgeschwindigkeit bezüglich der L1 -Norm möglich ist. Die n Bezugspunkte der Menge S sind beliebig in der Ebene verteilt. Sie können auch auf dem Netzwerk liegen. Abbildung 1.1 zeigt beispielhaft eine Anordnung von Netzwerk und Bezugspunkten. Kanten des Netzwerks stellen wir in dieser Arbeit stets als dicke, durchgezogene Linien 2 Einführung ω1 e1c e3c e2c e7c e5c ω2 a ω4 e4c p3 ω3 e6c ω5 Abbildung 1.1: Eine mögliche Anordnung von 5 Bezugspunkten ω1 , . . . , ω5 und 7 Kanten des Netzwerks e1c , . . . , e7c . p1 p4 p2 b Abbildung 1.2: Mehrere schnellste Pfade p1 , . . . , p4 von a nach b (sogar ohne Netzwerk). dar, Bezugspunkte als dicke Punkte. Die betrachtete Situation unterscheidet sich grundlegend von dem klassischen graphentheoretischen Problem, kürzeste Pfade zwischen Knoten von Graphen zu finden. Während die Kantenmenge in Graphen nur beschränkt viele einfache und somit möglicherweise kürzeste Pfade zwischen Knoten ermöglicht, betrachten wir keine solche Kantenmenge zwischen den Knoten. Vielmehr ist Fortbewegung in der gesamten Ebene möglich, wobei die Kanten des Transportnetzwerks ein schnelles Vorankommen ermöglichen. Abbildung 1.2 zeigt, dass in unserer Situation sogar abseits des Transportnetzwerks viele schnellste Pfade zwischen den Punkten a und b existieren. 1.1 Bisherige Arbeiten In diesem Abschnitt betrachten wir einige Ergebnisse aus bisherigen Arbeiten, welche sich mit eng verwandten Problemen der Pfadsuche befassen. Das Zusammenspiel der L1 -Norm und der beschleunigenden Netzwerkkanten lässt zwar nicht direkt die Definition einer Abstandsfunktion zu, betrachtet man jedoch schnellste Pfade, so wird eine Metrik induziert, welche wir in Abschnitt 3.2 genauer betrachten. Aichholzer u. a. (2002) geben dieser Metrik den Namen CityMetrik. Die Autoren stellen einen Algorithmus vor, der die Quickest-Path-Map für n Bezugspunkte und c Netzwerkkanten in einer asymptotischen Laufzeit von O(n log n + c2 log c) erstellt, und einen optimale Speicherbedarf von O(c + n) hat. Dabei ist auf dem gesamten Transportnetzwerk nur eine Geschwindigkeit möglich. Die erzeugte Datenstruktur beantwortet Quickest-Path-Anfragen für beliebige Punkte in einer asymptotischen Laufzeit von O(L + log(c + n)), wobei L die Komplexität der Ausgabe ist. Da unsere Arbeit zum Teil auf den Ergebnissen von Aichholzer u. a. (2002) beruht, betrachten wir den Algorithmus kurz in Abschnitt 2.3. Dieses Modell einer City-Metrik wurde erstmals von Abellanas u. a. (2001) vorgestellt. Die Autoren erarbeiten einige grundlegende Eigenschaften der CityMetrik und geben einen Konstruktionsalgorithmus der Quickest-Path-Map für n Bezugspunkte und einer einzelnen Gerade als Transportmittel an, welcher eine asymptotische Laufzeit von O(n log n) benötigt. Gewali u. a. (1990) unter- 1.2 Ergebnisse und Methoden 3 suchen verwandte Modelle in denen den Regionen einer Partition der Ebene ein Gewicht gegeben wird, welches die Reisegeschwindigkeit in dieser Region angibt. Das sogenannte Gewichtete-Regionen-Problem besteht nun darin, für zwei Anfragepunkte p und q den schnellsten Pfad zwischen p und q zu finden, wobei die so gewichtete euklidische Metrik verwendet wird. Mitchell u. a. (1987) liefern effiziente Verfahren für den speziellen Fall, dass nur die Gewichte 0 und 1 erlaubt sind. Dies führt zu dem geodäsischen Pfadproblem, wo es darum geht, kürzeste Pfade unter Vermeidung von Hindernissen zu finden. Ebenfalls bezüglich der euklidischen Metrik diskutieren Hurtado u. a. (1999) die Situation für nur eine einzelne Netzwerkkante. Betrachtet man eine eindimensionale Version des Modells von Gewali u. a. (1990), so kann damit auch die in dieser Arbeit betrachtete Situation behandelt werden. Die Autoren erstellen den schnellsten Pfad zwischen zwei gegebenen Anfragepunkten in einer Laufzeit von O(c2 ). Notwendig ist allerdings eine Anpassung an unser Modell, dem in der Ebene die L1 -Metrik zugrundeliegt, dessen Kanten des Netzwerks isothetisch liegen, und bei dem nur eine konstante Anzahl von Geschwindigkeiten zur Verfügung steht. Zudem unterscheidet sich die Form der Anfragen bei Gewali u. a. offensichtlich von unseren Quickest-PathAnfragen. Ein eng verwandtes Modell für n Bezugspunkte stellen auch Aurenhammer und Klein (2000) vor. Bei dem sogenannten Airlift-Voronoi-Diagramm ist ein Netzwerk aus c Fluglinien, welches nicht notwendigerweise die Dreiecksungleichung erfüllt, nur an designierten Punkten zugänglich. Die Autoren zeigen, dass das Airlift-Voronoi-Diagramm für eine beliebige Lp -Metrik durch eine Reduktion auf ein gewöhnliches Lp -Voronoi-Diagramm mit (c+n) Kreisen dieser Metrik in einer Laufzeit von O(n log n + c2 ) konstruiert werden kann. 1.2 Ergebnisse und Methoden In diesem Abschnitt gehen wir auf die Ergebnisse und Methoden des in dieser Arbeit vorgestellten Algorithmus ein. Basierend auf dem Modell von Aichholzer u. a. (2002) betrachten wir einen Algorithmus zur Konstruktion einer Quickest-Path-Map, welche eine Partition der Ebene in Regionen gleicher (zeitlich) nächster Bezugspunkte darstellt, und welche Anfragen nach dem nächsten Bezugspunkt und nach dem schnellsten Pfad zu diesem beantwortet. Der einzige Unterschied zu dem von uns untersuchten Modell besteht darin, dass die Kanten des Netzwerks jeweils eine von konstant vielen verschiedenen möglichen Geschwindigkeiten bieten anstatt nur einer einzigen. Der in dieser Arbeit vorgestellte Algorithmus benötigt zur Konstruktion der Quickest-Path-Map für n Bezugspunkte und einem Transportnetzwerk der Komplexität c eine asymptotische 5 Laufzeit von O((c + n)(log(c + n)) log log(c + n)) und einen Speicherbedarf von 3 O((c+n)(log(c + n)) ). Eine Quickest-Path-Anfrage mit einem beliebigen Punkt nach dem schnellsten Pfade zu S (der Menge der Bezugspunkte) beantwortet diese Datenstruktur in einer Laufzeit von O(L+log(c+n)), wobei L die Komplexität der Ausgabe ist; eine einfache Voronoi-Anfrage nach dem am schnellsten erreichbaren Bezugspunkt kann in einer Laufzeit von O(log(c + n)) beantwortet werden. Der bislang schnellste Algorithmus für dieses Modell stammt von Aich- 4 Einführung holzer u. a. (2002) und benötigt, wie in Abschnitt 1.1 erwähnt, eine Laufzeit von O(n log n + c2 log c) sowie linearen Speicherplatz. Bei einer geringen Erhöhung des Speicherbedarfs stellt der in dieser Arbeit vorgestellte Algorithmus somit eine Verbesserung der asymptotischen Laufzeit auf einen subquadratischen Wert dar. Bei der Konstruktion der Quickest-Path-Map, welche wir in Abschnitt 2.2 detailliert betrachten, kommt eine neue interne Struktur für einfache Polygone zum Einsatz, genannt Straight-Skeleton, erstmals erwähnt von Aichholzer u. a. (1995). In Abschnitt 2.1 werden einige Grundlagen des Straight-Skeletons dargelegt. Analog zu dem Modell von Aichholzer u. a. (2002) wird das StraightSkeleton auf beliebige Figuren generalisiert und auf die Bezugspunkte und die Elemente des Transportnetzwerks angepasst. Es ist bislang keine Definition des Straight-Skeletons mit Hilfe einer Abstandsmetrik bekannt. Dies ist auf die inhärente Komplexität schnellster Pfade zurückzuführen, welche vom Transportnetzwerk abhängig ist. Daher wird zur Konstruktion des Straight-Skeletons eine kontinuierliche Wellenfrontausdehnung simuliert und diskretisiert. Nach der Durchführung angepasster Transformationen der Elemente der Wellenfront liefert uns eine Technik zur Aufrechterhaltung nächster Paare, vorgestellt von Eppstein und Erickson (1999), in sublinearer Zeit stets die nächste eintretende Kollision der Wellenfront mit dem Netzwerk oder der Wellenfront selbst. Diese Technik wird in Kapitel 5 vorgestellt. Sie wird von Ray-Shooting-Anfragen und deren Inversen gespeist. Nach Aichholzer u. a. (2002) hat eine Quickest-Path-Map lediglich lineare Komplexität in (c + n) (siehe Abschnitt 3.4). Mit Hilfe dieser Aussage zeigen wir, dass sich die kombinatorische Gestalt der Wellenfront im Verlauf der Ausdehnung über die Ebene nur zu einer linearen Anzahl von Zeitpunkten verändert, und dass es somit möglich ist, diese Menge diskreter Zeitpunkte (und nicht mehr) in jeweils polylogarithmischer Zeit zu behandeln. Eine graphische Darstellung der Struktur des Algorithmus ist in Abbildung 10.1 zu sehen, eine komplexe Quickest-Path-Map in Abbildung 11.1. Man beachte, dass eine Partition im engeren Sinn aus Knoten, offenen Kanten und offenen Regionen besteht. Da die Knoten und Kanten einer Quickest-Path-Map jedoch Punkte angeben, für die der nächste Bezugspunkt nicht eindeutig ist, betrachten wir die Regionen der Quickest-Path-Map als abgeschlossen. Ein Punkt, der auf dem Rand mehrerer Regionen liegt, kann somit beliebig einer dieser Regionen zugewiesen werden. In Kapitel 2 werden zunächst die beiden Grundstrukturen, das StraightSkeleton und das City-Vornoi-Diagramm betrachtet, sowie der Algorithmus von Aichholzer u. a. (2002). In Kapitel 3 untersuchen wir dann die Mechanik der Wellenfrontausdehnung und erweitern die Wellenfront in Kapitel 4 um eine Raumdimension. Kapitel 5 behandelt die oben erwähnte Technik von Eppstein und Erickson (1999) zur Aufrechterhaltung nächster Paare, sowie deren Eingliederung in den Konstruktionsalgorithmus. In Kapitel 6 werden die Elemente der Wellenfront und der Prozess der Ausdehnung auf ihre Kompatibilität mit dieser Technik untersucht. In Kapitel 7 beschreiben wir eine geometrische Vereinfachung des Datenmaterials der Wellenfront, welche in Kapitel 8 genutzt wird, um Ray-Shooting-Anfragen und deren Inverse schnell zu beantworten. Diese beiden Anfragen sind notwendig um die Technik von Eppstein und Erickson zu nutzen. Kapitel 9 befasst sich mit dem Ablauf und der Beantwortung einer Pfadanfrage beziehungsweise einer Voronoi-Anfrage. Eine detaillierte Analyse der asympto- 1.2 Ergebnisse und Methoden 5 tischen Laufzeit und des Speicherbedarfs des Konstruktionsalgorithmus und des Anfragealgorithmus erfolgt in Kapitel 10, darüber hinaus betrachten wir dort einige Besonderheiten der Quickest-Path-Map. Abschließend resümieren wir in Kapitel 11 den Sinn und die Bedeutung der Ergebnisse. Hierbei sei erwähnt, dass die Konstruktion der Quickest-Path-Map einen wesentlich größeren Teil dieser Arbeit in Anspruch nimmt, als die Quickest-Path-Anfragen, da wir die Quickest-Path-Map mit dem Ziel konzipieren, Anfragen schnell behandeln zu können. 6 1.3 Einführung Liste verwendeter Variablen In Tabelle 1.1 sind die in dieser Arbeit verwendeten Variablen aufgelistet und kurz beschrieben. Tabelle 1.1: Verwendete Variablen. Variable S = {ω1 , . . . , ωn } reg(ω) C = {e1C , . . . , ecC } ∪ j 1 {vC , . . . , vC } n c VC (S) VC (S) KV T (S) T 0 (S) T (S) e T -Pfad β-Kante β-Kanten-Pfad T -Pfad F bzw. f Wt (F ) Wt (S) SK(F ) V bzw. v E bzw. e R bzw. r G k = |G| gi ∈ G, i = 1, . . . , c gtrans h,b Bedeutung Menge der Bezugspunkte Einzugsgebiet des Bezugspunktes ω das isothetische Transportnetzwerk Kardinalität von S, d.h. n = |S| Anzahl der Kanten von C City-Voronoi-Diagramm verfeinertes City-Voronoi-Diagramm oder Quickest-Path-Map Konstruktionsdiagramm der Quickest-Path-Graph der ungerichtetet Quickest-Path-Graph der inverse Quickest-Path-Graph ein in S endender Pfad in T (S) ein Zeiger bei einem Typ-B-Ereignis der schnellste Pfad entlang einer β-Kante ein Te-Pfad mit ersetzten β-Kanten eine Menge von Figuren f ∈ F Wellenfront zur Zeit t, ausgehend von Figuren F Wellenfront zur Zeit t, ausgehend von S Straight-Skeleton der Menge F von Figuren eine Menge von Knoten, v ∈ V eine Menge von Kanten, e ∈ E eine Menge von Regionen, r ∈ R die Menge von Geschwindigkeiten auf C Kardinalität von G Die gebotene Geschwindigkeit auf eiC Translationale Geschwindigkeit einer Kante der Wellenfront Höhe, Breite bei Untersuchung von Interferenzen Fortsetzung auf der nächsten Seite 1.3 Liste verwendeter Variablen Fortsetzung der letzten Seite Variable d(a, b) Q(a, b) Def(r), Def(s) DRS , DLS DPL KS , KW , K σ τ ~eBoden ~eSeite l r α, β, γ, δ, ϕ ζ, η, ϑ eβ S bzw. s W bzw. w w = {ẇ, w} ~ ν, ξ L = {l1 , . . . , lm } R = {r1 , . . . , rm } X , Y, Z Ψ T 1, . . . , T d T = {T 1 , . . . , T d } κ, λ, µ fi 4 f = f ◦ f3 ◦ f2 ◦ f1 Bedeutung City-Metrik-Abstand zwischen a und b der schnellste Pfad von a nach b definierendes Objekt der Region r bzw. des Streifens s sublokale Ray-Shooting- und LowestIntersection-Datenstrukturen Datenstruktur für Point-Location Ähnlichkeitsklasse von Streifen, Knotenstrahlen, beliebigen Objekten Anzahl der verschiedenen Ähnlichkeitsklassen KS Anzahl der verschiedenen Ähnlichkeitsklassen KW der Bodenvektor eines Streifens der Seitenvektor eines Streifens linker Bodenpunkt eines Streifens rechter Bodenpunkt eines Streifens oder Radius eines Kreises oder Region r ∈ R Winkel Kosinusse von Winkeln β-Kante Menge von Streifen, s ∈ S Menge von Knotenstrahlen, w ∈ W Knotenstrahl mit Fußpunkt und Vektor beliebige Objekte Menge der x-Koordinaten linker Bodenpunkte Menge der x-Koordinaten rechter Bodenpunkte Menge von x-, y- und z-Koordinaten zusätzliche Koordinatenachse für die Behandlung der Schräge von Typ-4-Streifen Stufen eines d-dimensionalen Bereichsbaums Ein d-dimensionaler Bereichsbaum Knoten eines Bereichsbaums Scherung geometrische Transformation 7 Kapitel 2 Grundstrukturen In diesem Kapitel beleuchten wir zunächst die beiden Grundstrukturen einer Quickest-Path-Map, das Straight-Skeleton und das City-Voronoi-Diagramm. Anschließend betrachten wir den von Aichholzer u. a. (2002) vorgestellten Algorithmus zur Konstruktion einer Quickest-Path-Map und legen dar, welche Ansätze wir übernehmen und welche Problematiken unsere Situation mit sich bringt. 2.1 Das Straight-Skeleton Aichholzer u. a. (1995) stellen eine neue interne Struktur einfacher Polygone vor, das Straight-Skeleton. Ein Straight-Skeleton besteht aus Strecken von Winkelhalbierenden und bildet eine Partition eines gegebenen n-Ecks f in n monotone Polygone. Wir bezeichnen das Straight-Skeleton des Polygons f mit SK(f ). Da das Straight-Skeleton der Schlüssel zu dem Algorithmus ist, der in dieser Arbeit vorgestellt wird, fassen wir in diesem Abschnitt dessen grundsätzlichen Eigenschaften zusammen. Eine detaillierte Einführung bieten Aichholzer u. a. (1995) und Aichholzer u. a. (2002). Sei f ein gegebenes, einfaches Polygon in der Ebene. Wir konstruieren das Straight-Skeleton SK(f ) des Polygons f mit Hilfe eines Schrumpfprozesses wie folgt: Wir verschieben alle Kanten von f mit einer konstanten Geschwindigkeit nach innen, so dass jede Kante jeweils parallel zu ihrer Ausgangslage bleibt. Dabei verändern sich die Längen der Kanten, während sich die Knoten von f auf den Winkelhabierenden der jeweils inzidenten Kanten bewegen. Das Polygon wird solange geschrumpft bis sich die kombinatorische Gestalt seines Randes verändert. Zwei Typen von Ereignissen können eine solche Änderung bewirken: 1. Die Länge einer Kante sinkt auf Null, so dass die beiden benachbarten Kanten im weiteren Verlauf adjazent sind. Der neue Knoten bewegt sich nun auf der Winkelhalbierenden dieser beiden Kanten. 2. Sei ein konkaver Knoten eines Polygons ein Knoten, der nicht Teil der konvexen Hülle der Menge der Polygonknoten ist. Eine Kante, und somit das ganze Polygon wird dadurch gespalten, dass ein konkaver Knoten auf 10 Grundstrukturen Abbildung 2.1: Ein schrumpfendes Polygon. Abbildung 2.2: Das Straight-Skeleton. konstruierte diese Kante stößt. Dabei ergeben sich neue Adjazenzen zwischen den beiden Teilen der gespaltenen Kante und den beiden Kanten, welche zu dem konkaven Knoten inzident waren. Man führt den Schrumpfprozess rekursiv für jedes schrumpfende Polygon mit positivem Flächeninhalt weiter. Ist jede Kante auf die Länge Null geschrumpft, so ist der Prozess beendet. Daraus ergibt sich die folgende Definition: Definition 2.1 (Straight-Skeleton) Das Straight-Skeleton SK(f ) des Polygons f ist definiert als die Vereinigung derjenigen Teilstrecken der Winkelhalbierenden, welche durch Knoten des Polygons während des Schrumpfprozesses ausgezeichnet werden. Die Abbildungen 2.1 und 2.2 veranschaulichen das Konzept des Straight Skeletons. Abbildung 2.1 zeigt das Ausgangspolygon und das geschrumpfte Polygon zu verschiedenen Zeitpunkten. Man beachte, dass das Polygon beim Schrumpfprozess letztendlich in zwei disjunkte Polygone zerfällt. Abbildung 2.2 zeigt das Straight-Skeleton (gepunktet) des Ausgangspolygons auf. In dieser Arbeit wird die Wellenfront stets durch dünne, durchgezogene Linien dargestellt, und ein Straight-Skeleton stets durch dickere, gepunktete Linien. Die Definition des Straight-Skeletons ist erweiterbar auf Mengen von gewichteten Polygonen. Ein gewichtetes Polygon ist ein einfaches Polygon, dessen Kanten jeweils eine Geschwindigkeit zugeordnet wird, mit der sie sich bei dem Schrumpfprozess verschieben. Ein solches gewichtetes Straight-Skeleton besteht im Allgemeinen nicht mehr aus Teilstrecken der Winkelhalbierenden; ein Beispiel eines gewichteten Polygons und dessen Straight-Skeleton ist in Abbildung 2.4 gegeben. Zum Vergleich ist in Abbildung 2.3 das Straight-Skeleton des Polygons im ungewichteten Fall gegeben. Es erscheint schwer eine nicht prozedurale Definition eines Straight-Skeletons für ein Polygon anzugeben. Ein möglicher Ansatz wäre es, aus den Kanten des Polygons und den Winkelhalbierenden einen planaren Graphen zu konstruieren, so dass ein jeder Knoten Grad drei besitzt. Wie Aichholzer u. a. (1995) jedoch zeigen, scheitert dieser Ansatz daran, dass auf diese Weise nicht sicher ein eindeutiger Graph definiert werden kann. Weiterhin geben die Autoren eine geschlossene Definition des ungewichteten Straight-Skeletons mit Hilfe einer Dachkonstruktion an. Dabei wird an jede Kante eine um 45◦ geneigte Ebe- 2.1 Das Straight-Skeleton 11 e Abbildung 2.3: Ein Straight-Skeleton. einfaches Abbildung 2.4: Straight-Skeleton bei stärker gewichteter Kante e. ne angesetzt. Dann kann das Straight-Skeleton als die Projektion der unteren Einhüllenden dieser Ebenen und des Ausgangspolygons definiert werden. Allerdings scheitert dieser Ansatz für ein gewichtetes Polygon, wie in Abbildung 2.5 zu erkennen ist. Wir bezeichnen ein beliebiges gewichtetes Polygon als Figur. Man beachte, dass die Kantengewichte auch so definiert sein können, dass sich die Kanten eines Polygons nach außen bewegen, und sich das Polygon ausdehnt. Dies ist in Abbildung 2.6 aufgezeigt. In dem in dieser Arbeit vorgestellten Algorithmus wird eine Mischung aus expandierenden und schrumpfenden Figuren genutzt. Für eine beliebige Menge F von Figuren und einen Startzeitpunkt t0 kann jede Figur f ∈ F einer parametrisierten Menge Wt (f ) mit t > t0 von Polygonen zugeordnet werden, welche wir die Wellenfront von P nennen. Für t > t0 ist also Wt (f ) das geschrumpfte Polygon f zum Zeitpunkt t während des Schrumpfprozesses, den wir im Folgenden Wellenfrontausdehnung nennen. Der Begriff der Wellenfrontausdehnung wird der Situation in dieser Arbeit insofern treffender gerecht, als dass wir tatsächlich eine Ausdehnung betrachten welche nur lokal zu Schrumpfprozessen degeneriert. Die gemeinsame Wellenfront der Menge F von Figuren S bezeichnen wir als Wt (F ). Für hinreichend kleine Werte von t gilt Wt (F ) = f ∈F Wt (f ), doch im Verlauf der Wellenfrontausdehnung können sich Interaktionen zwischen den Wellenfronten der einzelnen Figuren ergeben, so dass zwei Figuren zu einer gemeinsamen Wellenfront verschmelzen. In Abbildung 2.7 ist die Entwicklung der Wellenfronten einer Menge F = {f1 , f2 } von Figuren dargelegt. Die gemeinsame Wellenfront Wt (F ) erzeugt somit ein eindeutiges Interferenzmuster der einzelnen Wellenfronten Wt (f ), welches wir als Straight-Skeleton SK(F ) bezeichnen. Die Knoten von Wt (F ) zeichnen die sogenannten Skelettkanten von SK(F ) aus, und die Kanten von Wt (F ) überstreichen und beschreiben die Regionen von SK(F ). Das Straight-Skeleton SK(F ) definiert eine Partition der Ebene, deren Knoten einen Grad von mindestens drei besitzen (siehe dazu die oben genannten Ereignisse), und deren Regionen jeweils von der Kante einer Figur stammen. Bezeichnen wir die Gesamtzahl der Kanten aller Figuren mit m, so ist die Komplexität von SK(F ) auf Grund der Planarität des StraightSkeletons somit O(m). Diese allgemeine Sichtweise eines Straight-Skeletons als das Ergebnis der Entwicklung und Interaktion vieler Figuren nutzen wir bei 12 Grundstrukturen f e Abbildung 2.5: (Eppstein und Erickson (1999)) Das Dach (gepunktet) eines gewichteten Polygons ist im Allgemeinen nicht die untere Einhüllende ihrer Dachflächen. Die stark gewichtete Kante e schneidet aus dem rechten Giebel die graue Region heraus. f1 Abbildung 2.6: Die Gewichte lassen die Kanten nach außen wandern. f2 Abbildung 2.7: Die Wellenfronten Wt (f1 ) und Wt (f2 ) verschmelzen. 2.2 Das City-Voronoi-Diagramm 13 der Untersuchung und Konstruktion des im folgenden Abschnitt betrachteten City-Voronoi-Diagramms. Im Gegensatz zur bekannteren Mittelachse, welche aus allen inneren Punkten eines Polygons f besteht, für die der nächste Punkt auf dem Rand von P nicht eindeutig ist (siehe zum Beispiel Lee (1982)), besteht das Straight-Skeleton SK(f ) lediglich aus geraden Strecken. Die Mittelachse eines nicht konvexen Polygons hingegen enthält parabolische Elemente. Beide Strukturen besitzen eine Komplexität welche lediglich linear ist in der Komplexität des Polygons und sind für konvexe Polygone identisch. Während die Mittelachse das VoronoiDiagramm (siehe Aurenhammer und Klein (2000)) der Kanten und Knoten eines Polygons ist, besitzt das Straight-Skeleton zunächst keine Interpretation im Sinne eines Voronoi-Diagramms, da die Definition eines Straight-Skeletons nicht auf Abständen basiert. Es existiert eine Vielzahl von Anwendungen des Straight-Skeletons; siehe dazu die Arbeiten von Aichholzer und Aurenhammer (1998), Cheng und Vigneron (2002), Demaine u. a. (2000), Eppstein und Erickson (1999), Lee und Papadopoulou (2001), sowie die dort enthaltenen Referenzen. 2.2 Das City-Voronoi-Diagramm Ein Voronoi-Diagramm im Allgemeinen partitioniert ein gegebenes Gebiet für eine Menge von Bezugsobjekten in Regionen gleicher nächster Bezugsobjekte, siehe Aurenhammer und Klein (2000). Nach Aichholzer u. a. (2002) ist das City-Voronoi-Diagramm VC (S) eine Partition der Ebene, welche für jeden Bezugspunkt ωi ∈ S den Bereich aller Punkte angibt, von denen aus ωi von allen Bezugspunkten am schnellsten erreichbar ist. Dabei bezeichnet S = {ωi | 1 ≤ i ≤ n} die Menge der n Bezugspunkte. Wir bezeichnen jede Region eines City-VoronoiDiagramms als Einzugsgebiet reg(ωi ) eines Bezugspunktes ωi . Das Einzugsgebiet eines Bezugspunktes ωi ist somit definiert als die Menge aller Punkte p der Ebene, welche den Bezugspunkt ωi schneller als jeden anderen Bezugspunkt erreichen können. Dabei wird in der Ebene außerhalb des Transportnetzwerkes C die L1 -Norm verwendet, während auf den c isothetischen Kanten, ejC (1 ≤ j ≤ c) von C schnellere Fortbewegung möglich ist. Die Mechanik der Kombination aus der L1 -Norm und dem beschleunigten Transportnetzwerk wird im Detail in Kapitel 3 betrachtet. Das Modell, auf dem diese Arbeit basiert, stammt von Aichholzer u. a. (2002). Sie stellen einen Konstruktionsalgorithmus mit einer Laufzeit von O(n log n + c2 log c) für das City-Voronoi-Diagramm vor. Erstmals in dieser Form vorgestellt wurde das City-Voronoi-Diagramm von Abellanas u. a. (2001), welche viele Grundlagen einer Metrik schnellster Pfade erarbeiteten, von denen wir einige in Abschnitt 3.2 betrachten werden. Darüber hinaus geben die Autoren für den Fall, dass C aus einer Geraden besteht, einen Konstruktionsalgorithmus für das City-Voronoi-Diagramm an, der für n Bezugspunkte eine Konstruktionszeit von O(n log n) benötigt. In der Vergangenheit wurden viele allgemeinere Problemstellungen betrachtet, von denen Gewali u. a. (1990) ein unserer Situation recht ähnliches Modell nutzen (siehe auch Abschnitt 1.2). Das City-Voronoi-Diagramm erscheint zunächst nicht verwandt mit dem Straight-Skeleton. Jedoch findet sich das Konzept der Straight-Skeletons nicht 14 Grundstrukturen nur bei der Konstruktion eines City-Voronoi-Diagramms wieder, sondern auch in der resultierenden Partition der Ebene. Dabei betrachten wir das City-Voronoi-Diagramm als das Straight-Skeleton einer Menge von Figuren (siehe Abschnitt 2.1), deren Formen, Entstehungszeitpunkte und Kantengeschwindigkeiten sorgfältig festgelegt werden. In Kapitel 3 untersuchen wir diese Reduktion des City-Voronoi-Diagramms auf das Straight-Skeleton. Bei der Konstruktion eines Straight-Skeletons entstehen, wie in Abschnitt 2.1 beschrieben, sogenannte Skelettkanten. Diese bilden eine Obermenge der eigentlichen Voronoi-Kanten, welche die Einzugsgebiete der Bezugspunkte eingrenzen. Die Skelettkanten verfeinern das City-Voronoi-Diagramm, so dass es möglich ist den schnellsten Pfad zum nächsten Bezugspunkt zu finden; siehe dazu Abschnitt 3.5. Nach Aichholzer u. a. (2002) nennen wir ein mit Skelettkanten augmentiertes City-Voronoi-Diagramm verfeinertes City-Voronoi-Diagramm VC (S) für ein gegebenes Netzwerk C und eine Menge von Bezugspunkten S. Abbildung 11.1 zeigt ein komplexes verfeinertes City-Voronoi-Diagramm. VoronoiKanten werden in dieser Arbeit stets mit dickeren gestrichelten Linien dargestellt. Für den Spezialfall, dass in der Ebene nur ein Bezugspunkt ω existiert, verliert der Begriff des Voronoi-Diagramms gewissermaßen seine ursprüngliche Bedeutung. Wir bezeichnen das verfeinerte City-Voronoi-Diagramm in dieser Arbeit allgemein als Quickest-Path-Map. Zur Konstruktion dieser Quickest-PathMap nutzen wir ein Konstruktionsdiagramm KV . Das Konstruktionsdiagramm stellt eine weitere Augmentierung des verfeinerten City-Voronoi-Diagramms dar. Die zusätzlichen Kanten des Konstruktionsdiagramms erhöhen jedoch nicht die asymptotische Komplexität von KV (siehe Abschnitt 3.4), sie entstehen beim Konstruktionsprozess als Beiprodukt und werden bei der Pfadsuche nicht genutzt. 2.3 Der Algorithmus von Aichholzer u. a. Ziel dieser Arbeit ist es die Laufzeit des Algorithmus von Aichholzer u. a. (2002) zur Konstruktion einer Quickest-Path-Map zu verbessern. Aus diesem Grund skizzieren wir den Algorithmus von Aichholzer u. a. in diesem Abschnitt. Gegeben ist wie in unserer Situation ein isothetisches Transportnetzwerk C aus c (sich nicht schneidenden) Segmenten, welche jeweils die Geschwindigkeit g bieten, sowie n Bezugspunkte. Man beachte, dass nur eine einzige, einheitliche Geschwindigkeit auf dem Transportnetzwerk geboten wird. Wie der in dieser Arbeit dargelegte Algorithmus simuliert auch der Algorithmus von Aichholzer u. a. eine Wellenfrontausdehnung. Er besteht im Wesentlichen aus drei Teilen. Zunächst werden sämtliche Figuren mit einem Zeitstempel versehen, die während der Wellenfrontausdehnung an Bezugspunkten und Knoten von C entstehen. Dieser Zeitstempel gibt an, wann diese Figur entsteht. Dann werden auf dieselbe Weise die Figuren vorbereitet, welche im Inneren von Netzwerksegmenten entstehen, und anschließend wird unter Beachtung der vorbereiteten Zeitstempel für die Gesamtheit von Figuren das Straight-Skeleton berechnet. Die asymptotische Laufzeit des Algorithmus beträgt O(n log n + c2 log c). Die Vorbereitung der Figuren verläuft wie folgt: Ein Gitter wird erstellt, 2.3 Der Algorithmus von Aichholzer u. a. 15 indem durch jeden Netzwerkknoten eine horizontale und eine vertikale Gerade gezogen wird. Abhängig davon, ob ein Segment des Gitters in C enthalten ist oder nicht, bekommt es das Gewicht 1 oder g. Nun werden zunächst die Knoten der Gitterkästchen vorbereitet, welche die Bezugspunkte ωi enthalten, sowie die sogenannten primären Zugangspunkte, das heißt die jeweils ersten Punkte auf C, die von den Bezugspunkten aus in einer der vier isothetischen Richtungen erreicht werden. Wird ein Knoten vorbereitet, so werden für ihn der Zeitpunkt gespeichert, an dem die Wellenfront ihn erreicht, sowie die Richtung, aus der dies geschieht. Diese Initialisierung benötigt eine Laufzeit von O(n log c). Anschließend wird die kontinuierliche Dijkstra-Methode auf das Gitter angewendet, und somit werden in einer Laufzeit von O(c2 log c) alle weiteren Knoten des Netzwerks mit einem Zeitstempel versehen. Mitchell u. a. (1987) entdeckten die kontinuierliche Dijkstra-Methode, welche sich streng am bekannten Algorithmus von Dijkstra (siehe Dijkstra (1959)) orientiert. Der wesentliche Unterscheid besteht darin, dass die Ausbreitung eines Signals nicht nur auf der Kantenmenge eines Graphen möglich ist, sondern in der gesamten Ebene (oder in einer beliebigen Oberfläche). Dabei wird eine Wellenfront ausgehend von einer Quelle über die Ebene propagiert, indem jeder Punkt, auf den die Wellenfront trifft, einen Zeitstempel (oder Distanzstempel ) erhält, und anschließend die Wellenfront weiter ausbreitet. Um O(m) Knoten in der Ebene mit der Wellenfront zu überstreichen, beträgt die Anzahl notwendiger Stempel und erneuter Ausbreitungen nur O(m2 ). Bei der Ausführung des kontinuierlichen Dijkstra-Algorithmus wird eine Liste von Intervall-Kandidaten und eine Prioritätsschlange von Ereignissen aufrechterhalten. Ein Intervall-Kandidat bildet ein Intervall einer Kante des Gitters, für dessen Punkte eine sogenannte Wurzel bekannt ist, über welche zu einem gegebenen Zeitpunkt während der Ausführung des Algorithmus der optimale (bis dahin bekannte) Pfad zum Bezugspunkt (Quelle) möglich ist. Über die Prioritätsschlange wird in chronologischer Reihenfolge abgearbeitet, wie die Wellenfront von den jüngsten Punkten eines Intervalls weiterverbreitet wird. Bei jeder Weiterverbreitung der Wellenfront ist es möglich, dass bereits eingetragene Intervalle durch Interferenz mit anderen Intervallen gekürzt werden oder sogar ganz verschwinden. Ist die Prioritätsschlange von Ereignissen letztendlich leer, so ist das gesamte Gitter mit Intervallen überdeckt, und jeder Knoten besitzt einen endgültigen Stempel. Diese Stempel geben nun für jeden Gitterpunkt an, wann er von der Wellenfront erreicht wird, und wann demnach eine Figur an diesem Punkt entsteht. Besonders interessant ist die kontinuierliche Dijkstra-Methode, wenn der Ausbreitung der Wellenfront gewisse Restriktionen auferlegt sind, wie beispielsweise bei der Anwendung auf die Oberfläche eines Polyeders (siehe Mitchell u. a. (1987)), im Zusammenhang mit der Umfahrung von Hindernissen (siehe zum Beispiel Mitchell (1993)) oder bei gewichteten Regionen (siehe zum Beispiel Mitchell und Papadimitriou (1991)). Nach der Initialisierung der Knoten des Netzwerks werden dann durch einen Sweep-Line-Algorithmus, der jede Zeile und jede Spalte des Gitters durchläuft, die primären Zugangspunkte entfernt, welche schneller über einen anderen Bezugspunkt erreicht werden können, und die entsprechenden Vorbereitungsdaten aktualisiert. Diese primären Zugangspunkte sind Punkte im Inneren von Netzwerksegmenten, an denen Figuren entstehen. Die Autoren zeigen, dass Zeilen des Gitters derart isoliert betrachtet werden können, da potentielle schnellste 16 Grundstrukturen Pfade eine Zeile über einen vorbereiteten Gitterknoten betreten; gleiches gilt für die Reihen. Nach diesem Schritt sind auch alle Punkte mit einem Stempel versehen, an denen die Wellenfront auf das Gitter trifft stattfinden. Die Aufbereitung dieser Punkte im Inneren von Netzwerksegmenten erfordert eine Laufzeit von O((n + c) log n), womit alle Figuren in einer Laufzeit von O(n log n + c2 log c) vorbereitet werden. Im letzten Schritt werden die Figuren auf spezielle Art und Weise derart angepasst, dass bestehende Algorithmen für die Konstruktion abstrakter VoronoiDiagramme für die Erstellung des Straight-Skeletons genutzt werden können. Dabei werden insbesondere die randomisiert-inkrementellen Algorithmen von Mehlhorn u. a. (1991) und Klein u. a. (1993) angesprochen. Die Laufzeit dieser Algorithmen beträgt O((c + n) log(c + n)) bei linearem Speicherbedarf O(n + c). 2.4 Unser Algorithmus In diesem Abschnitt betrachten wir, welche bestehenden Ergebnisse wir in dieser Arbeit nutzen. Der generelle Ansatz des Algorithmus zur Konstruktion der Quickest-Path-Map ist in Abschnitt 10.1 dargestellt. Er basiert auf den Ergebnissen von Aichholzer u. a. (2002) und reduziert die Quickest-Path-Map ebenso auf einzelne Figuren, deren Straight-Skeletons behandelt werden. Insbesondere basieren unsere asymptotischen Berechnungen der Laufzeit und des Speicherbedarfs auf der linearen Komplexität der Quickest-Path-Map, welchen wir in Abschnitt 3.4 darlegen. Im Gegensatz zum Algorithmus von Aichholzer u. a. (2002) erarbeitet der in dieser Arbeit vorgestellte Algorithmus die Figuren und die zugehörigen Straight-Skeletons in einem einzigen Prozess, der die Ausdehnung der Wellenfront in direkter Form simuliert. Dabei wird der kontinuierliche Prozess einer Wellenfrontexpansion an den einzelnen Zeitpunkten der Interaktion, Kollision und Interferenz zwischen Netzwerk und Wellenfront diskretisiert. Figuren werden erst dann initialisiert, wenn sie tatsächlich von der Wellenfront erreicht werden. Eppstein und Erickson (1999) nutzen zur Konstruktion eines Straight-Skeletons den Ansatz einer Dachkonstruktion mit Hilfe der unteren Einhüllenden. Das Modell, das in dieser Arbeit betrachtet wird, beinhaltet jedoch, wie in Kapitel 6 dargelegt wird, gewichtete Kanten, für die eine Dachkonstruktion, wie in Abbildung 2.5 bereits illustriert wurde, nicht effizient genug möglich ist. Somit können wir diese Technik zur Konstruktion der Quickest-Path-Map nicht unmittelbar nutzen. Der in dieser Arbeit vorgestellte Algorithmus macht dennoch von einer Dachkonstruktion Gebrauch. Das in Abbildung 2.5 verdeutlichte Problem besteht darin, dass eine stark gewichtete Kante eine weniger gewichtete Kante einschneiden kann. Die Intention der unteren Einhüllenden wird in gewisser Weise dadurch verfälscht, dass die Kante e jenseits ihrer eigentlichen Existenzberechtigung Einfluss auf das Straight-Skeleton nimmt. Bei ungewichteten Kanten ist dies implizit unmöglich, da sich Dachkanten mit gleicher Steigung nicht auf diese Weise schneiden können. Für gewichtete Kanten ist es hingegen notwendig, Interaktionen von Kanten wie in Abbildung 2.5 aufgezeigt zu verhindern. Dies kann erreicht werden, indem erkannt wird, dass die Ebene, in der die Dachfläche 2.4 Unser Algorithmus 17 von e liegt, nach Abschluss des Dachteils beschränkt werden muss. Das Resultat ist eine korrigierte untere Einhüllende. Zu diesem Zweck nutzen wir eine Technik aus Eppstein und Erickson (1999). Diese Technik dient dazu nächste Paare dynamischer Objekte aufrechtzuerhalten und ist in der Lage stets die nächste Interaktion zwischen den Kanten und Knoten der Figuren und des Netzwerks vorherzusagen. Dabei werden speziell den Strukturen der Wellenfront angepasste orthogonale Bereichsanfragen im Raum genutzt. Im nächsten Kapitel betrachten wir die Mechanik der Wellenfrontausdehnung im Detail. Kapitel 3 Die Wellenfrontausdehnung Um die Ausdehnung der Wellenfront, welche wir mit Wt (S) bezeichnen, im Raum zu betrachten, wie in Abschnitt 2.4 angesprochen, ist es zunächst notwendig, ihre Expansion in der Ebene zu verstehen. Das in Abschnitt 2.1 beschriebene Straight-Skeleton SK(f ) eines Polygons f ist der Schlüssel zur Konstruktion der Quickest-Path-Map VC (S). Die Interaktion zwischen den Elementen der Wellenfront, welche zur Konstruktion eines Straight-Skeletons genutzt wird, tritt auch bei der Erstellung der Quickest-Path-Map auf. Hinzu kommen nun jedoch die Kollisionen der Wellenfront mit dem Transportnetzwerk C, wodurch neue Figuren entstehen. Allerdings kann bei einer Quickest-Path-Map nicht mehr unmittelbar das Modell eines schrumpfenden Polygons betrachtet werden, denn die Wellenfront startet an einzelnen Punkten, um sich von dort aus über die Ebene auszubreiten. In diesem Kapitel wird die Mechanik der Wellenfrontausdehnung dargelegt, mit der im Folgenden gearbeitet wird. Dabei wird aus dem Transportnetzwerk und der L1 -Norm eine neue Metrik geschaffen. 3.1 Das Transportnetzwerk Wie in Abschnitt 2.2 vorgestellt wird die Ebene mit einem Transportnetzwerk C erweitert, welches in diesem Abschnitt konkretisiert wird. Ziel einer QuickestPath-Map ist es, Auskunft über zeitlich kürzeste Pfade zu geben. Daher ist es notwendig, vor einer Beschreibung des beschleunigenden Transportnetzwerks C festzulegen, wie sich ein Pfad in der Ebene außerhalb von C gestaltet. Es wird angenommen, dass die Fortbewegung in R2 \C mit Einheitsgeschwindigkeit bezüglich der L1 -Norm stattfindet. Dies bedeutet also, dass in einer Zeiteinheit genau eine Längeneinheit zurückgelegt wird. Im Folgenden wird die Geschwindigkeit in der Ebene daher einfach als 1 angenommen, im Gegensatz zu den Geschwindigkeiten, welche auf dem Transportnetzwerk möglich sind. Das Transportnetzwerk C gibt der Wellenfront ihre Form und spielt daher bei der Konstruktion der Quickest-Path-Map eine zentrale Rolle. In diesem Abschnitt werden die Charakteristika von C dargelegt. Das Transportnetzwerk ist ein planarer Graph ohne isolierte Knoten, bestehend aus geraden Kanten, welche isothetisch liegen und einander nicht schneiden. Die Knoten von C werden 20 Die Wellenfrontausdehnung i mit vC (i = 1, . . . , j) bezeichnet und die Kanten mit eiC (i = 1, . . . , c). Allerdings werden die Θ(c) Kanten von C als Segmente bezeichnet, um sie von den Endpunkten (Knoten) der Kanten und von den Kanten der Wellenfront zu unterscheiden. Mit seinen Segmenten bietet C in der Ebene Strecken an, auf denen im Sinne schnellster Pfade eine höhere Fortbewegungsgeschwindigkeit möglich ist, als im Rest der Ebene. Segmente können an jedem beliebigen ihrer Punkte betreten und verlassen werden und bieten eine von k verschiedenen Geschwindigkeiten. Die Geschwindigkeit, welche ein Segment eiC ∈ C bietet, wird als gi ∈ G bezeichnet. Die Menge G der möglichen Geschwindigkeiten hat konstante Kardinalität k. Ohne Beschränkung der Allgemeinheit können wir annehmen, dass für alle Geschwindigkeiten gi (i = 1, . . . , k), auf dem Netzwerk gilt: gi > 1, da das Segment eiC sonst keinen Nutzen hat. Weiterhin gilt gi < ∞. Die Einschränkung, dass C keine isolierten Knoten besitzt, ist aus zwei Gründen gerechtfertigt. Einerseits hat ein isolierter Knoten offensichtlich keinen Einfluss auf die Quickest-Path-Map und kann somit gelöscht werden, andererseits gibt es in einem vernünftigen Transportnetzwerk keine isolierten Knoten. Die folgende Bemerkung erlaubt es uns, auf eine präzise Differenzierung zwischen der Anzahl der Segmente und der Elemente des Netzwerks zu verzichten. Um die Einführung unnötiger Variablen zu vermeiden, benutzen wir daher im Folgenden dieser Arbeit den Parameter c auch als Kardinalität der Elementmenge von C. Bemerkung 3.1 Für Berechnungen von asymptotischen Laufzeiten ist es irrelevant, ob die Anzahl der Elemente des Transportnetzwerks C oder nur die Anzahl der Segmente von C verwendet wird. P Beweis. In jedem Graphen G(V, E) gilt: 2|E| = v∈V deg(v). Allerdings gilt bei einem isothetischen Graphen offensichtlich für den Grad eines Knotens v deg(v) ≤ 4, und somit 2|E| ≤ 4|V |. Da es in C keine isolierten Knoten gibt, gilt zudem deg(v) ≥ 1 und somit 2|E| ≥ |V |. Es ist also die Anzahl der Knoten linear in der Anzahl der Kanten und umgekehrt. Die Menge der Elemente von C ist die Vereinigung der Knoten und der Kanten von C, und somit jeweils linear in der Anzahl der Kanten und der Anzahl der Knoten des Netzwerks. 3.2 Schnellste Pfade und die City-Metrik Seien die Punkte a, b ∈ R2 gegeben. Ein Pfad P zwischen den Punkten a und b ist ein Folge von isothetischen Strecken, welche bei a startet und bei b endet. Die Länge |P | eines Pfades P ist die Zeit, die benötigt wird, um den Pfad zu durchlaufen. Mit Hilfe dieser Begriffe formulieren wir die folgende Definition: Definition 3.1 (schnellster Pfad) Wir bezeichnen den schnellsten Pfad zwischen zwei Punkten a und b mit QC (a, b). Es ist QC (a, b) derjenige Pfad zwischen a und b, der die Zeit minimiert, die man braucht, um von a nach b zu gelangen. Der Pfad QC (a, b) ist als Pfad ein isothetischer Polygonzug und ist, mit der Ausnahme von Spezialfällen, nicht eindeutig. Abbildung 3.1 zeigt eine Auswahl schnellster Wege zwischen den Punkten a und b in der Ebene, dabei bieten 3.2 Schnellste Pfade und die City-Metrik 21 a b Abbildung 3.1: Verschiedene schnellste Wege von a nach b. die Netzwerksegmente jeweils die Geschwindigeit 2. Schnellste Wege werden in dieser Arbeit stets gepunktet und gestrichelt dargestellt. Man beachte, dass QC (a, b) nicht notwendigerweise offenbar ist, denn er stellt eine optimale Kombination aus der Nutzung des Netzwerks und aus Abkürzungen außerhalb des Netzwerks dar. Basierend auf schnellsten Pfaden definiert die L1 -Norm in der Ebene zusammen mit dem Transportnetzwerk C eine zeitliche Abstandsfunktion d wie folgt: Definition 3.2 (Abstandsfunktion d) Die Abstandsfunktion d : R2 × R2 → R bildet zwei Punkte a, b ∈ R2 auf die Länge des schnellsten Pfades QC (a, b) zwischen ihnen ab. Die Funktion d ist tatsächlich eine Metrik, da für alle a, b, c ∈ R2 gilt: d(a, b) ≥ 0 d(a, b) = 0 ⇒ a = b d(a, b) = d(b, a) d(a, b) ≤ d(a, c) + d(c, b) (3.1) (3.2) (3.3) (3.4) Gleichungen 3.1 und 3.2 sind offensichtlich, die Symmetrie in 3.3 ergibt sich daraus, dass die Segmente von C bidirektional nutzbar sind. Die Dreiecksungleichung (3.4) gilt zunächst für die von der L1 -Norm induzierte Metrik, welche Manhattan-Metrik genannt wird. Da es im Sinne schnellster Wege stets möglich ist zwei Wege QC (a, c) und QC (c, b) zu konkatenieren um einen (potentiell suboptimalen) Weg QC (a, b) zu erstellen, gilt die Dreiecksungleichung auch für d. Nach Aichholzer u. a. (2002) nennen wir die Abstandsfunktion d City-Metrik. Bezüglich der euklidischen Norm ist ein Kreis KEuklid (a, r) mit Mittelpunkt a und Radius r wohlbekannt und definiert als die Menge KEuklid (a, r) = {b ∈ R2 | dEuklid (b, a) = r}, wobei dEuklid die von der euklidischen Norm (L2 ) induzierte Metrik ist. Die formale Definition eines Kreises lässt sich aber auch in Verbindung mit anderen Metriken verwenden. Verwenden wir die City-Metrik, so beschreibt ein City-Metrik-Kreis Kcity (a, t) weiterhin die Menge aller Punkte, welche zu a den Abstand t haben, jedoch verwenden wir als Abstandsfunktion die City-Metrik. Somit stellt Kcity (a, t) nun die folgende Menge dar: Kcity (a, t) = {b ∈ R2 | |QC (a, b)| = t}. Da in dieser Arbeit ausschließlich die City-Metrik verwendet wird, bezeichnen wir einen City-Metrik-Kreis einfach als Kreis K(a, t). Ein solcher Kreis ist auch die Wellenfront, welche zur Konstrukti- 22 Die Wellenfrontausdehnung r3 c 1 vC a r1 b d r2 e1C g r4 e f h e2C ωi Abbildung 3.2: Regionen r1 bis r4 von Punkten kombinatorisch äquivalenter Wege nach S für die Punkte a und b, c und d, e und f sowie für g und h. on der Quickest-Path-Map genutzt und in den nächsten Abschnitten beschrieben wird. 3.3 Die Wellenfront Die Wellenfront Wt (ω) ist der Kreis K(ω, t) mit Mittelpunkt ω und Radius t. Somit besteht die Wellenfront zu jedem Zeitpunkt t aus der Menge aller Punkte b ∈ R2 , für die |QC (ω, b)| = t gilt, welche also innerhalb von t Zeiteinheiten den Bezugspunkt ω erreichen können. Mit fortschreitender Zeit t simuliert Wt (ω) somit von ω ausgehend alle möglichen schnellsten Pfade. Die Wellenfront Wt (S) ist die gemeinsame Wellenfront aller Bezugspunkte ω1 , . . . , ωn , und besteht somit zunächst aus einer Menge von n Kreisen K(ωi , t). Mit fortschreitender Ausdehnung der einzelnen Wellenfronten vereinigen sie sich zu einer gemeinsamen Wellenfront. Simuliert man nun die Wellenfrontausdehnung und speichert man dabei für jeden Punkt der Ebene, wie er durch die Wellenfront erreicht wurde, so kann man rückwärts für jeden Punkt den schnellsten Pfad nach S angeben. Es bleibt also lediglich, ein effizientes Verfahren zur Simulation der Wellenfrontausdehnung zu finden und eine Datenstruktur zu erstellen, welche in der Lage ist, für jeden Punkt p der Ebene den Weg zu dem Bezugspunkt ωi zu speichern, welcher von p am schnellsten zu erreichen ist. Da diese Information offensichtlich nicht für jeden Punkt der Ebene separat gespeichert werden kann, fassen wir Punkte mit kombinatorisch äquivalentem schnellsten Pfad zu S zu Regionen zusammen. Dies wird durch das Erstellen der Quickest-Path-Map VC (S) erreicht, welches die Ebene in Regionen von Punkten kombinatorisch äquivalenter schnellster Pfade zu S partitioniert. Wir bezeichnen zwei schnellste Pfade als kombinatorisch äquivalent, wenn sie sich lediglich durch den Pfad zu dem ersten genutzten Netzwerkelement unterscheiden, und die Startpunkte jeweils dieselbe relative Lage zu diesem Element besitzen. In Abbildung 3.2 sind vier solche Regionen zu sehen. 1 Dabei liegen zum Beispiel a und b jeweils links unterhalb des Knotens vC ∈ C, 2 und g und h jeweils oberhalb des Segments eC ∈ C. Wie wir im Folgenden argumentieren werden, kann die Quickest-Path-Map im Zuge einer Simulation der Wellenfrontausdehnung erstellt werden. Um die Wellenfrontausdehnung effektiv zu simulieren, ist es zunächst notwendig ihr Verhalten genauer zu untersuchen, was im Weiteren dieses Kapitels geschieht. 3.3 Die Wellenfront 23 C C vW ω ω Abbildung 3.3: Für t ≤ d(ω, C) ist die Wellenfront Wt (ω) ein L1 -Kreis. 3.3.1 Abbildung 3.4: Start der Wellenfront Wt (ω) als City-Metrik-Kreis. Wir zeichnen Knoten der Wellenfront, welche auf C wandern, im Sinne der Übersichtlichkeit nicht ein. Der Start der Wellenfront Bevor ein sogenanntes Ereignis eintritt, also eine Änderung der kombinatorischen Struktur der Wellenfront durch Interaktion der Wellenfront mit dem Transportnetzwerk oder mit sich selbst, dehnt sich die Wellenfront mit der Zeit t in vorhersehbarer Weise aus. Liegt ω nicht auf C, so ist die Wellenfront Wt (ω) bei hinreichend kleinem t ein L1 -Kreis wie in Abbildung 3.3. Um die Ausdehnung der Wellenfront zu verdeutlichen, wird in den meisten Abbildungen nicht etwa nur die Wellenfront zu einem Zeitpunkt t dargestellt, sondern eine Menge äquidistanter, konzentrischer Wellenfronten zu früheren und späteren Zeitpunkten. Liegt der Bezugspunkt ω auf C, wie in Abbildung 3.4, so dehnt sich die Wellenfront entlang der Kanten des Netzwerks mit höherer Geschwindigkeit aus als im Rest der Ebene. Beim Start der Wellenfront besteht sie aus einer Figur und bei späteren Ereignissen entstehen weitere Figuren. Dabei gilt stets die folgende offensichtliche aber wesentliche Aussage: Lemma 3.1 Ein Kreis der City-Metrik besteht nur aus geraden Kanten sowie aus konvexen und konkaven Ecken. Beweis. Breitet sich die Wellenfront wie in Abbildung 3.3 dargestellt frei in der Ebene aus, und nicht zumindest zum Teil entlang eines Netzwerksegements, so gilt die Behauptung wie bei den L1 -Kreisen der Manhattan-Metrik. In Abbildung 3.5 ist dargestellt wie sich die Wellenfront vom Punkt ω mit Koordinaten ω = (0, 0) ausgehend ausdehnt. Auf dem Netzwerksegment c, das ω enthält, sei die Geschwindigkeit gc möglich. Die Wellenfront breitet sich ab dem Zeipunkt 0 entlang c aus. Nach Argumenten aus Abschnitt 3.2 hat ein Punkt p der Wellenfront im ersten Quadranten zum Zeitpunkt t die Koordinaten (xp , yp ) = (xp , t − xp /gc ) für 0 < xp < tgc . Die resultierende lineare Funktion für die Koordinaten der Punkte der Wellenfront im ersten Quadranten ergibt also eine gerade Kante. Eine ähnliche Aussage ist für andere Kanten und Figuren der Wellenfront möglich. Ausgehend vom Start der Wellenfront folgt nun per 24 Die Wellenfrontausdehnung y p eC ω yp x xp Abbildung 3.5: Lage eines Punkts p der Wellenfront. Induktion über die Menge der Ereignisse, dass die Wellenfront zu jedem Zeitpunkt nur gerade Kanten besitzt. Dazu genügt die Beobachtung, dass bei dem Verschmelzen zweier Wellenfronten die Geradlinigkeit der Kanten, nach Definition des Straight-Skeletons, bestehen bleibt. Für Ecken ist nichts zu beweisen. In den folgenden Abschnitten werden eine erste Datenstruktur und die verschiedenen Typen von Ereignissen und Figuren, welche im Verlauf der Wellenfrontausdehnung auftreten, beschrieben. 3.3.2 Eine erste Datenstruktur Bevor wir die einzelnen Ereignisse im Detail betrachten, sei in diesem Kapitel dargelegt, wie die Wellenfront in der Ebene durch eine verkettete Liste implementiert werden kann. Zu Beginn der Wellenfrontausdehnung stellt WS (t) im Allgemeinen eine Menge von City-Metrik-Kreisen dar, jeweils bestehend aus zunächst vier Knoten und vier Kanten. Liegt ein Bezugspunkt ωi auf C, so können dies bis zu acht Knoten und acht Kanten sein, man vergleiche dazu Abbildungen 3.3 und 3.4. Sobald eines der im folgenden Abschnitt beschriebenen Ereignisse eintritt, ändert sich diese Topologie, und Elemente von WS (t) kommen hinzu oder verschwinden. Die Darstellung der Wellenfront als einfacher Zykel legt eine Datenstruktur für die Wellenfront nahe: eine Implementierung der Wellenfront als verkettete Liste aus Kanten und Knoten garantiert schnelles Einfügen und Löschen von Objekten in konstanter Zeit und erlaubt es inzidente Objekte schnell aufzufinden. Zudem ist eine Liste in der Lage, alle benötigten Informationen der Wellenfront zu speichern, zum Beispiel die Steigung einer Kante. Bei der Beschreibung sogenannter Typ-D-Ereignisse im folgenden Abschnitt werden wir beobachten, dass langfristig eine Menge von Zykeln notwendig sein wird, um dem Wesen der Wellenfront gerecht zu werden. 3.3 Die Wellenfront 3.3.3 25 Typen von Ereignissen Während der Ausdehnung der Wellenfront tritt eine laut Abschnitt 3.4 linear große Menge von Ereignissen ein, bei denen Elemente von Wt (S) entweder auf das Transportnetzwerk C oder sogar auf eine weiteres Element der Wellenfront stoßen. Bei jedem Ereignis ändert sich die kombinatorische Gestalt der Wellenfront. In den folgenden vier Abschnitten untersuchen wir die auftretenden Ereignisse im Einzelnen. Sei zu diesem Zweck eW eine Kante, und vW ein Knoten der Wellenfront. Sei weiterhin eC ein Segment, und vC ein Endpunkt eines Segments des Netzwerks. In einigen Fällen wird im Sinne der Übersichtlichkeit auf den Index verzichtet. Um die einzelnen Ereignisse in einem größeren Zusammenhang zu sehen, sei auf Abbildung 11.1 verwiesen. Wir gehen bei Ereignissen, die bei der Simulation der Wellenfrontausdehnung auftreten, im Allgemeinen wie folgt vor: 1. Lösche alle Objekte aus der Wellenfront, welche an einem Ereignis beteiligt sind, oder zu einem solchen Objekt inzident sind. 2. Schließe alle beteiligten Regionen des Konstruktionsdiagramms ab. 3. Füge entsprechend dem behandelten Ereignis neue Objekte in die Wellenfront ein. Bei vielen Ereignissen, wie zum Beispiel in Abbildung 3.6 für die Knoten v1 und v4 , erscheint es nicht notwendig einen Knoten oder eine Kante zu löschen um nach dem Ereignis wieder ein äquivalentes Objekt in die Wellenfront einzufügen. Dieser vorsichtige Umgang mit Elementen der Wellenfront, welche an einem Ereignis beteiligt sind, birgt zwar einerseits zusätzliche Komplikationen, andererseits ermöglicht uns eine feinere Zerteilung der Regionen der Quickest-Path-Map jedoch, effektivere Datenstrukturen für die Vorhersage von Ereignissen zur Verfügung zu stellen; dies wird in Abschnitt 6.6 offenbar. Zusätzlich sichert uns Korollar 3.1 zu, dass durch die zusätzliche Augmentierung der Quickest-Path-Map zum Konstruktionsdiagramm KV keine Erhöhung der asymptotischen Laufzeit entsteht. Die zusätzliche Verfeinerung im Konstruktionsdiagramm spielt lediglich bei der Simulation der Wellenfrontausdehnung eine Rolle, für die Pfadsuche in der fertiggestellten Quickest-Path-Map bergen die Konstruktionskanten lediglich Komplikationen. Daher werden die zusätzlichen Kanten nicht in VC (S) abgespeichert und inzidente Regionen vereinigt wie in Abbildung 6.15 dargelegt. Es folgt ein Beschreibung der verschiedenen Ereignistypen im Einzelnen. 26 Die Wellenfrontausdehnung Eine Ecke der Wellenfront stößt auf das Netzwerk Angenommen v1 berührt zum Zeitpunkt t0 (grau) die Kante eC wie v4 in Abbildung 3.6 dargestellt. Entlang des Segments eC ist nun in beide v3 v5 eC Richtungen eine schnellere Geschwinv2 v6 digkeit gegeben und die Wellenfront v1 entwickelt sich wie dargestellt. Ein solches Ereignis, bei dem ein Knoten der Wellenfront auf eine Kante des Abbildung 3.6: Ein Typ-A-Ereignis. Netzwerks trifft, nennen wir im Folgenden Typ-A-Ereignis. An der Wellenfront treten bei einem solchen Ereignis die folgenden Änderungen auf: • Der Knoten v1 wird gelöscht. • Die beiden zu v1 inzidenten Kanten werden gelöscht. • Fünf neue Knoten entstehen (v2 , . . . , v6 ). • Sechs neue Kanten entstehen (dicker). Eine Kante der Wellenfront rutscht in das Netzwerk Angenommen die Wellenfront berührt v3 zum Zeitpunkt t0 (grau) den Knoten vC , so dass die Kante eW , wie in Abbildung 3.7 dargestellt, vC berührt. Zum Zeitpunkt t0 ändert sich die kombinatoeW v2 rische Gestalt der Wellenfront. Entlang vC eC des Segments eC ist nun eine schnellere v1 Geschwindigkeit gegeben, und Wt (ω) entwickelt sich wie dargestellt. Ein solches Ereignis, bei der eine Kante der Wellen- Abbildung 3.7: Ein Typ-B-Ereignis. front in einen Endpunkt des Netzwerks rutscht, nennen wir im Folgenden Typ-B-Ereignis. An der Wellenfront treten bei einem Typ-B-Ereignis die folgenden Änderungen auf: • Die Kante eW wird gelöscht. • Drei neue Knoten entstehen (v1 , v2 , v3 ). • Vier neue Kanten entstehen. Eine Kante der Wellenfront verschwindet 1 2 Angenommen die beiden Knoten vW und vW , welche zur Kante eW inzident sind, nähern sich wie in Abbildung 3.8 dargestellt an, so dass eW zum Zeitpunkt t0 (grau) auf die Länge Null schrumpft. Dies kann beispielsweise als Spätfolge eines Typ-B-Ereignisses geschehen. Man vergleiche dazu, wie sich die Teile der Kante 3.3 Die Wellenfront 27 e1W 1 vW eW 2 vW e2W 3 vW Abbildung 3.8: Ein Typ-C-Ereignis. entwickeln, welche in Abbildung 3.10 in das erste Typ-B-Ereignis involviert ist. Entsprechend den beiden zu eW adjazenten Kanten entwickelt sich dieser Teil 3 der Wellenfront und ein neuer Knoten der Wellenfront vW weiter wie dargestellt. Ein Ereignis, bei dem eine Kante von Wt (ω) verschwindet, involviert das Transportnetzwerk nicht. Wir bezeichnen es als Typ-C-Ereignis. An der Wellenfront treten bei einem solchen Ereignis die folgenden Änderungen auf: • Die Kante eW wird gelöscht. 1 2 • Die beiden zu eW inzidenten Knoten vW und vW werden gelöscht. • Die beiden Kanten e1C und e2C werden gelöscht. 3 ). • Ein neuer Knoten entsteht (vW • Zwei neue Kanten entstehen (dicker). Man beachte, dass bei einem Typ-C-Ereignis die Gesamtanzahl der Kanten und die der Knoten der Wellenfront jeweils um eins abnehmen. Somit verringert ein solches Ereignis die Komplexität der Wellenfront, im Gegensatz zu allen anderen Ereignistypen, welche allesamt eine Erhöhung der Komplexität von Wt (S) zur Folge haben. In manchen Situationen, wie in Abbildung 3.9 dargestellt, kann sich eine sogenannte Insel ausbilden. Die Wellenfront nutzt die Geschwindigkeit 4 der beiden Segmente e1C und e2C , kollidiert am Punkt vC des Netzwerks und schließt dann einen Bereich der Ebene ein, der noch nicht überstrichen wurde. Eine solche Insel führt zu (mindestens) drei simultan eintretenden Typ-C-Ereignissen, nach denen insgesamt drei Knoten und drei Kanten verschwinden, und die Wellenfront somit lokal verschwindet. Abbildung 3.10 zeigt eine spezielle Situation, in der in einer Insel sogar vier simultane Typ-C-Ereignissen eintreten können. Eine Insel kann sich jedoch nur nach einem Ereignis des letzten Typs ausbilden, welcher im folgenden Abschnitt beschrieben wird. Wellenfront trifft Wellenfront 1 Angenommen der Knoten vW der Wellenfront trifft auf die Kante eW der Wellenfront, wie in Abbildung 3.11 dargestellt. Dies kann auftreten, wenn ein Teil der Wellenfront mit Hilfe eines Umwegs über das Netzwerk einen anderen Teil der Wellenfront überholt. Das weitere Verhalten der Wellenfront hängt nun von allen an der Kollision beteiligten Kanten und Knoten ab. Auch dieses Ereignis, bei dem Wt (S) mit sich selbst kollidiert, involviert das Transportnetzwerk nur 28 Die Wellenfrontausdehnung e1C v1 vC v3 v2 vC v4 v3 v1 v2 e2C ωi ωi Abbildung 3.9: Eine Insel entsteht und erzeugt drei simultane Typ-CEreignisse. Abbildung 3.10: Eine spezielle Insel und vier simultane Typ-CEreignisse. 2 vW 1 2 vW 3 1 eW eW 1 vW 1 vW 2 4 2 4 3 vW 3 vW Abbildung 3.11: Ein Typ-D-Ereignis. 3 Abbildung 3.12: Andere Sichtweise eines Typ-D-Ereignisses. insofern, als dass sich eines der oder beide kollidierenden Elemente der Wellenfront auf dem Netzwerk bewegen können. Wir bezeichnen es als Typ-D-Ereignis. An der Wellenfront treten bei einem solchen Ereignis die folgenden Änderungen auf: • Die Kante eW wird gelöscht. 1 • Der Knoten vW wird gelöscht. 1 • Die beiden zu vW inzidenten Kanten werden gelöscht. 2 3 • Zwei neue Knoten entstehen (vW , vW ). • Vier neue Kanten entstehen (dicker). Ereignisse vom Typ D haben zwei weitere, wesentlich globalere Effekte auf die kombinatorische Gestalt der Wellenfront. Durch Typ-D-Ereignisse vereinigen 3.3 Die Wellenfront 29 ω1 ω2 Abbildung 3.13: Ein Typ-D-Ereignis vereint die beiden Wellenfronten von ω1 und ω2 . sich die zunächst disjunkten Wellenfronten Wt (ωi ) sukzessive zu einer zusammenhängenden, gemeinsamen Wellenfront, siehe Abbildung 3.13. Durch eine Kollision eines Knotens mit einer Kante innerhalb derselben Zusammenhangskomponente der gemeinsamen Wellenfront Wt (S) hingegen zerfällt die Wellenfront in zwei Zusammenhangskomponenten, während das Innere der Kreisschei” be“ als Vereinigung kürzester Pfade stets zusammenhängend bleibt. Betrachtet man die Elemente von Wt (S) wie in Abbildung 3.12 angedeutet, so sind zum Zeitpunkt vor der Kollision noch die Teile 1 und 2 sowie die Teile 3 und 4 jeweils miteinander verbunden. Zum Zeitpunkt der Kollision berühren sich alle vier und tauschen ihre Nachbarschaften aus: nun ist Teil 1 mit Teil 3 verbunden und Teil 2 mit Teil 4. Dieser Zerfall der Wellenfront wurde in Abschnitt 3.3.2 bereits angedeutet. Abbildung 3.14 zeigt den Zerfall der Wellenfront in zwei Teile in einem größeren Zusammenhang. Dabei zeigt die graue Wellenfront den letzten Zeitpunkt (im Rahmen der in der Abbildung genutzten Diskretisierung), an dem sie noch zusammenhängend ist, und die dickere, schwarze Wellenfront zwei unzusammenhängende Teile der Wellenfront zu einem etwas späteren Zeitpunkt. Nach einem oder mehreren solcher Ereignisse besteht die Wellenfront aus einer Menge von einfachen Zykeln, da sich bei jedem Zerfall ein bestehender Zykel in zwei Zykel teilt. Der Begriff der Wellenfront umfasst nach Ereignissen dieser Art die Gesamtheit aller Zykel. Dementsprechend werden mehrere verkettete Listen zum Speichern der Wellenfront benötigt, eine Liste für jeden Zykel. Offensichtlich ändert dies nicht die Tatsache, dass nur O(c + n) Speicherbedarf benötigt wird. 3.3.4 Relevanz von Ereignissen Betrachtet man die Änderungen an der Wellenfront bei jedem der vier beschriebenen Ereignistypen, so lässt sich ohne Beweis folgende Beobachtung zusammenfassend feststellen: Beobachtung 3.1 Bei jedem Ereignis haben die Änderungen an der Wellen- 30 Die Wellenfrontausdehnung ω Abbildung 3.14: Die Wellenfront wird nach einem Typ-D-Ereignis unzusammenhängend. front jeweils konstanten Umfang. Die notwendigen Änderungen, welche die Ereignisse an der Wellenfront erfordern, werden im Folgenden nicht im Detail behandelt. Da die benötigte Laufzeit zur Behandlung eines Ereignisses nach Beobachtung 3.1 O(1) beträgt, genügt es uns, lediglich die Anzahl und die Entdeckung der behandelten Ereignisse zu betrachten. Ein Algorithmus, der die Ausdehnung der Wellenfront simuliert, muss sich also primär dem Problem stellen, Ereignisse und insbesondere das nächste eintretende Ereignis zu erkennen. Wie im Folgenden dieser Arbeit klar werden wird, stellen dabei sogenannte virtuelle Ereignisse eine Hürde dar. Definition 3.3 (Virtuelle Ereignisse und Figuren) Ein virtuelles Ereignis ist eine der Interaktionen aus Abschnitt 3.3.3, welche zu einem gegebenen Zeitpunkt möglich scheint, jedoch durch ein anderes Ereignis vorweggenommen und niemals tatsächlich eintreten wird. Die Figur eines virtuellen Ereignisses ist eine virtuelle Figur. Abbildungen 3.15 und 3.16 stellen eine einfache Situation dar, in der ein solches virtuelles Ereignis vorliegt. In Abbildung 3.15 ist der Knoten v1 der Wellenfront auf Kollisionskurs mit dem Netzwerksegment eC . Das resultierende Typ-A-ErA eignis am Punkt vC ist in Hellgrau angedeutet. Abbildung 3.16 stellt denselben Teil der Wellenfront kurz vor Eintritt des Typ-A-Ereignisses dar. Ein Typ-DEreignis (grau) zwischen v1 und der schnell wandernden Kante eW tritt ein und verhindert, dass der Knotenstrahl v1 weiterwandert. Somit tritt das Typ-A-Ereignis zwischen v1 und eC nicht ein. 3.3 Die Wellenfront 31 v1 v3 eW v1 eW eC A vC v2 Abbildung 3.15: Ein virtuelles Typ-AEreignis bahnt sich an. eC v2 Abbildung 3.16: Ein Typ-D-Ereignis nimmt das virtuelle Typ-A-Ereignis vorweg. Offensichtlich stellt es kein Problem dar ab einem gewissen Zeitpunkt während der Wellenfrontausdehnung ein virtuelles Ereignis als virtuell zu entlarven und dann zu verwerfen, jedoch bedeutet dies, dass dieses virtuelle Ereignis explizit behandelt wird. Eine explizite Behandlung virtueller Ereignisse hätte eine quadratische Laufzeit des Konstruktionsalgorithmus zur Folge, da im schlimmsten Fall O(n + c) Knoten der Wellenfront mit O(c) Segmenten des Netzwerks interagieren. Lemma 6.3 in Abschnitt 6.5.1 beweist, dass der effektive Prognosemechanismus des in dieser Arbeit dargelegten Algorithmus dieses Problem löst. Breitet sich die Wellenfront Wt (f2 ) einer Figur f2 deckungsgleich mit der Wellenfront Wt (f1 ) einer anderen, älteren Figur f1 aus, oder wird Wt (f2 ) sogar ganz von Wt (f1 ) überdeckt, so gilt die Inklusion Wt (f1 ) ⊇ Wt (f2 ). Wir unterscheiden virtuelle Ereignisse von relevanten und von redundanten Ereignissen wie folgt: Definition 3.4 (Redundante Ereignisse und Figuren) Existiert eine Figur f1 , so dass für die Figur f2 gilt: Wt (f1 ) ⊇ Wt (f2 ) so ist f2 eine redundante Figur. Ein redundantes Ereignis ist ein Ereignis, welches eine redundante Figur erzeugt. In Abbildung 3.17 ist ein Beispiel eines redundanten Ereignisses gegeben, dabei bieten die beiden Netzwerksegmente e1C und e2C dieselbe Geschwindigkeit (2). Die graue Raute ist die Figur, welche durch das Typ-A-Ereignis zwischen dem Knoten v1 und dem Segment e2C erzeugt wird, die Knoten dieser Figur sind nicht eingezeichnet. Es ist gut zu sehen, dass die Wellenfront der neuen (grauen) Figur deckungsgleich mit der alten Wellenfront verläuft. Bietet das Segment e1C wie in Abbildung 3.18 sogar eine höhere Geschwindigkeit (3) als Segment e2C (2), so bleibt die redundante Figur (grau) hinter der alten Wellenfront zurück. Abbildung 3.19 zeigt ein Gegenbeispiel, hier bietet Segment e2C eine höhere Geschwindigkeit (3) als Segment e1C (2), somit ist das Typ-A-Ereignis zwischen e2C und v1 nicht redundant sondern erzeugt die graue Figur, welche der alten Wellenfront (gestrichelt) vorauseilt. Ereignisse und Figuren, welche sowohl virtuell als auch redundant sind, bezeichnen wir als virtuell. Es verbleibt die formale Definition von Ereignissen, welche keine der beiden genannten Definitionen erfüllen: 32 Die Wellenfrontausdehnung v2 e2C e1C v2 e2C v1 Abbildung 3.17: Die Wellenfront der redundanten, neuen Figur (grau) ist gleichauf mit der alten Wellenfront. e1C v1 Abbildung 3.18: Die Wellenfront der redundanten, neuen Figur (grau) ist langsamer als die alte Wellenfront. v2 e2C e1C e2C v1 Abbildung 3.19: Eine nicht redundante Figur (grau) ersetzt zum Teil die alte Wellenfront. e1C Abbildung 3.20: Am rechten Endpunkt von e2C tritt ein redundantes Typ-B-Ereignis auf. 3.4 Die lineare Größe 33 Definition 3.5 (Relevante Ereignisse und Figuren) Ein relevantes Ereignis ist ein Ereignis, welches weder redundant noch virtuell ist. Die Figur eines relevanten Ereignisses ist eine relevante Figur. Die Frage, ob Ereignisse der Typen B, C oder D ebenfalls redundant sein können, erübrigt sich insofern, als dass dies an der asymptotischen Anzahl der Ereignisse nichts ändert, wie im nächsten Abschnitt aus Satz 3.1 und dessen Beweis hervorgeht. Intuitiv ist aber klar, dass Ereignisse der Typen C und D immer eine grundlegende Änderung der kombinatorischen Gestalt der Wellenfront (d.h. Kanten der Wellenfront verschwinden oder werden gespalten, siehe Abschnitt 3.3.3) mit sich bringen und somit entweder relevant oder virtuell sind, nicht jedoch redundant. Desweiteren existiert nur eine lineare Anzahl von Punkten in der Ebene, an denen Typ-B-Ereignisse eintreten können, nämlich die Knoten des Transportnetzwerks C. Somit können wir feststellen, dass nur eine lineare Anzahl nicht virtueller Typ-B-Ereignisse auftritt. Auf eine Unterscheidung dieser Ereignisse auf Relevanz und Redundanz wird daher verzichtet. Dass ein Ereignis vom Typ B tatsächlich redundant sein kann, ist der Vollständigkeit halber in Abbildung 3.20 aufgezeigt. 3.4 Die lineare Größe Eine der wichtigsten Voraussetzungen, auf denen die Ergebnisse dieser Arbeit beruhen, ist die Tatsache, dass eine Quickest-Path-Map VC (S) lineare Komplexität in der Menge der Netzwerkelemente und der Menge der Bezugspunkte besitzt. Dieses Ergebnis stammt von Aichholzer u. a. (2002) und wird aufgrund seiner Relevanz in diesem Abschnitt behandelt. v4 v5 v1 v2 v3 v8 eC v6 Ereignisse vom Typ B lassen erkennen, dass eine Quickest-Path-Map nicht notwendigerweise zusammenhängend ist, wenn sich Skelettkanten der Figur eines Typ-BEreignisses parallel oder divergent zu allen anderen Skelettkanten entwickeln. In Abbildung 3.21 ist eine solche Situation dargestellt. Die Regionen, welche von solchen unbeschränkten Skelettkanten eingegrenzt werden, bezeichnen wir im Folgenden als Randregionen. Für den Beweis der linearen Komplexiv7 tät der Quickest-Path-Map ist es jedoch sinnAbbildung 3.21: Die Menge der voll, festzulegen, dass sich alle unbeschränkSkelettkanten (gepunktet) wird ten Skelettkanten in einem Punkt v∞ treffen und dort enden. Dies ändert nichts an unzusammenhängend. der Menge der Regionen und Kanten und fügt lediglich einen Knoten v∞ hinzu. Abbildung 3.22 zeigt an einem einfachen Beispiel, wie der Knoten v∞ einer QuickestPath-Map hinzugefügt wird. ωi Da VC (S) eine Partition der Ebene erzeugt, ist VC (S) ein planarer Graph, dessen Knoten nach Abschnitt 2.1 einen Grad von mindestens 3 besitzen. Nach 34 Die Wellenfrontausdehnung v∞ ωi Abbildung 3.22: Der Knoten v∞ . dem letzten Absatz ist dieser Graph zudem zusammenhängend. In diesem Graphen mit |V | Knoten, |E| Kanten und |F | Regionen gilt also: 3|V | ≤ 2|E| Da dieser Graph planar und zusammenhängend ist, gilt zudem Eulers Polyederformel: |V | − |E| + |F | = 2 Zusammen ergibt dies also: |V | ≤ 2|F | − 4 |E| ≤ 3|F | − 6 Die Anzahl der Knoten und die Anzahl der Kanten ist somit linear in der Anzahl der Regionen. Die Anzahl der Regionen von VC (S) ist jedoch wiederum beschränkt durch die Gesamtzahl aller Kanten der Figuren der Wellenfrontausdehnung, denn jede einzelne dieser Kanten zeichnet potentiell eine Region von VC (S) aus. Da jede Figur nach Abschnitt 3.3.3 aus einer konstanten Menge von Kanten besteht, verbleibt die Frage, wie viele Figuren relevant sind. In der QuickestPath-Map (ohne die Konstruktionskanten von KV ) erzeugen nur Typ-A- und Typ-B-Ereignisse Figuren. Wie in Definition 3.4 dargelegt bezeichnen wir eine Figur f als redundant, wenn eine andere Figur f1 exisitert, so dass für die Wellenfronten dieser Figuren gilt: Wt (f1 ) ⊇ Wt (f ). Ein redundantes Ereignis erzeugt eine redundante Figur. Die Wellenfront erzeugt an den n Bezugspunkten und an den O(c) Netzwerkknoten von C jeweils eine nicht redundante Figur. Außerdem treten durch Typ-A-Ereignisse noch Figuren auf, welche innerhalb eines Netzwerksegmentes entstehen. Im schlimmsten Fall erzeugt jeder der n Bezugspunkte c Figuren innerhalb von Netzwerksegmenten, was bedeuten würde, dass Θ(c(c + n)) solcher Figuren entstehen können, wie in Abbildung 3.23 für n = 1 aufgezeigt wird. Jedoch zeigt folgendes Lemma, dass nur linear viele dieser Figuren nicht redundant sind. Sei vW zunächst ein Knoten, der bei einem Typ-A-Ereignis am Punkt vA auf eine Kante des Netzwerks stößt. Wir bezeichnen denjenigen neu entstandenen Knoten, der sich ausgehend von vA 3.4 Die lineare Größe 35 Abbildung 3.23: Es entstehen Θ(c(c + n)) Typ-A-Ereignisse, viele davon sind redundant. kollinear zum Knoten vW der Wellenfront bewegt als den Nachfolger von vW . In Abbildung 3.6 ist der Knoten v4 der Nachfolger des Knotens v1 . Lemma 3.2 Sei F eine Figur, welche durch ein Typ-A-Ereignis des Knotens vW mit dem Netzwerksegment eC erzeugt wurde. Von den Figuren, welche durch Typ-A-Ereignisse der Nachfolger von vW auf Netzwerksegmenten eC entstehen, die parallel zu eC liegen, sind höchstens k nicht redundant. Beweis. Abbildung 3.24 illustriert diesen Beweis. Sei t (grau) der Entstehungszeitpunkt der Figur f . Für jeden Zeitpunkt t0 > t sind die Wellenfronten Wt (f ) und Wt0 (f ) homothetisch. Das bedeutet, sie sind bezüglich einer geometrischen Streckung ähnlich, liegen in einer Ebene und besitzen ein gemeinsames Streckungszentrum, welches wir homothetisches Zentrum nennen. Auf den Segmenten eiC des Netzwerks C sind k verschiedene Geschwindigkeiten möglich. Somit kann nur bei maximal k − 1 parallelen Netzwerksegmenten eine Figur entstehen, deren Wellenfront für ausreichend großes t nicht redundant zur Wellenfront der Figur Wt (f ) ist, sondern flacher ist (siehe Kapitel 6 für eine detaillierte Beschreibung der Figuren). Da jede Figur konstant viele Knoten erzeugt, und nach Lemma 3.2 jeder Knoten nur konstant viele nicht redundante Typ-A-Ereignisse erzeugt, gibt es durch Typ-A-Ereignisse nur O(c + n) nicht redundante Figuren. Zusammen mit den restlichen Figuren ergibt dies insgesamt O(c + n) nicht redundante Figuren. Für den Fall n = 1 sind dies lediglich O(c). Nach obenstehender Argumentation entspricht dies der Komplexität der Quickest-Path-Map. Als Ergebnis dieses Kapitels kann somit der folgende Satz festgehalten werden, welcher die lineare Komplexität von VC (S) und von VC (S) bestätigt. Satz 3.1 (nach Aichholzer u. a. (2002)) Die Anzahl der Kanten, der Knoten und der Regionen der Quickest-Path-Map VC (S) ist jeweils linear in der Anzahl der Netzwerksegmente und Bezugspunkte. 36 Die Wellenfrontausdehnung vk ekC v2 e2C v1 e1C eC r ωi f Abbildung 3.24: Ein Knoten der Wellenfront und seine Nachfolger erzeugen höchstens k redundante Typ-AEreignisse. Abbildung 3.25: Die Unterteilung der Region r (begrenzt durch gepunktete Skelettkanten) ∈ VC (S) in die Regionen des Konstruktionsdiagramms KV (schattiert). Wie in Abschnitt 2.2 erwähnt, konstruieren wir eine Quickest-Path-Map, welche eine weitere Verfeinerung der Quickest-Path-Map darstellt. Dies geschieht in Übereinstimmung mit den in Abschnitt 3.3.3 dargelegten Änderungen an der kombinatorischen Gestalt der Wellenfront durch die einzelnen Ereignisse. Dort haben wir bereits festgelegt, dass jedes Objekt der Wellenfront, welches in ein Ereignis involviert ist, aus der Wellenfront gelöscht wird. Eine Region der Quickest-Path-Map kann somit im Konstruktionsdiagramm weiter unterteilt werden, wie in Abbildung 3.25 durch schattierte Flächen dargestellt. Die zusätzlichen Kanten wurden dort grau gepunktet. Wir definieren das Kanstruktionsdiagramm wie folgt: Definition 3.6 (Konstruktionsdiagramm KV ) Das Konstruktionsdiagramm KV ist eine Verfeinerung der Quickest-Path-Map. Die zusätzlichen Kanten des Konstruktionsdiagramms sind alle Kanten der Wellenfront, welche bei Eintreten eines Ereignisses gelöscht werden. Man beachte, dass die zusätzlichen Kanten des Konstruktionsdiagramms “Momentaufnahmen“ gelöschter Wellenfrontkanten zum Zeitpunkt eines Ereignisses sind. Das Konstruktionsdiagramm wird ausschließlich beim Konstruktionsprozess der Quickest-Path-Map genutzt, für Quickest-Path-Anfragen spielt das Konstruktionsdiagramm keine Rolle. Das folgende Korollar garantiert uns, dass die Verfeinerung der Quickest-Path-Map zum Konstruktionsdiagramm die asymptotische Komplexität nicht erhöht. Korollar 3.1 (Lineare Größe des Konstruktionsdiagramms KV ) Die Anzahl der relevanten Ereignisse während der Wellenfrontausdehnung sowie die Anzahl der Kanten, Knoten und Regionen des Konstruktionsdiagramms KV ist jeweils linear in der Anzahl der Netzwerksegmente. 3.5 Definierende Objekte und Pfadkodierung 37 Beweis. Nach Satz 3.1 gilt die Aussage für die Quickest-Path-Map. Nach Abschnitt 3.3.3 erzeugt jedes relevante Ereignis mindestens einen Knoten, eine Kante oder eine Region. Da nach obenstehendem Beweis die Anzahl der Knoten und Kanten der Quickest-Path-Map linear in der Menge der Regionen ist, tritt bei der Wellenfrontausdehnung nur eine lineare Anzahl von relevanten Ereignissen auf. Da bei jedem Ereignis nur jeweils eine konstante Anzahl der genannten Objekte entsteht, ist die Anzahl der einzelnen Objekte im Konstruktionsdiagramm jeweils linear in der Anzahl der Netzwerksegmente und der Bezugspunkte. Es sei angemerkt, dass bei einer expliziten Behandlung redundanter Ereignisse nicht nur die Anzahl der Ereignisse auf Θ(c(c + n)) ansteigt, sondern auch die Komplexität der Quickest-Path-Map. Im Gegensatz zu den in Abschnitt 3.3.4 betrachteten virtuellen Ereignissen treten redundante Ereignisse bei der Wellenfrontausdehnung tatsächlich ein, können jedoch vernachlässigt werden, da sie lediglich redundante Figuren erzeugen. Um eine subquadratische Laufzeit für die Konstruktion des verfeinerten City-Voronoi Diagramms zu erzielen, ist es sogar notwendig redundante Ereignisse zu ignorieren, sonst ergäben sich während der Simulation der Wellenfrontausdehnung Θ(cn) Ereignisse. Mit welcher Technik diese redundanten Ereignisse vernachlässigt werden, wird in Abschnitt 8.3 dargelegt. Der folgende, letzte Abschnitt dieses Kapitels beschreibt, welcher Aspekt der Konstruktion der Quickest-Path-Map VC (S) mit Hilfe der Wellenfrontausdehnung letztendlich genutzt wird, um kürzeste Pfade nach S zu ermitteln. 3.5 Definierende Objekte und Pfadkodierung Da die Anzahl der Ereignisse, welche während der Wellenfrontausdehnung eintreten, endlich ist, gibt es ein letztes Ereignis, ab dem keine weiteren Änderungen an der kombinatorischen Gestalt der Wellenfront mehr vorgenommen werden. Durch die Bewegungen der Knoten der Wellenfront und die verschiedenen Ereignisse ist die Quickest-Path-Map nun fertiggestellt. Sie besteht nach Satz 3.1 aus einer Menge von Regionen, deren Kardinalität linear ist in c + n, der Summe der Anzahl von Netzwerkelementen und Bezugspunkten. Regionen sind in der Regel beschränkt, jedoch bleiben alle Regionen unbeschränkt, welche nach dem letzten eingetretenen Ereignis noch nicht beschränkt sind. Diese Regionen sind Randregionen. Wir ordnen jede Region des Konstruktionsdiagramms KV eindeutig ihrem definierenden Objekt zu. Definition 3.7 Das definierende Objekt Def(r) einer Region r von KV ist die Menge Def(r) = {p ∈ r | dC (S, p) ≤ dC (S, p0 ) für alle p0 ∈ r}. Das definierende Objekt einer Region ist also entweder in S oder das Element von KV , welches den Punkt oder die Punkte enthält, an dem oder an denen diejenige Kante der Wellenfront entstanden ist, welche die Region ausgezeichnet hat. Dies kann eine Kante oder ein Knoten sein. Nachdem im Folgenden zunächst der algorithmische Konstruktionsprozess von VC (S) beschrieben wird, spielt die Zuordnung von Regionen und Kanten zu deren definierenden Objekten bei den eigentlichen Anfragen in Kapitel 9 ei- 38 Die Wellenfrontausdehnung ne wesentliche Rolle. Diese Zuordnung beinhaltet letztendlich die Information über den kürzesten Pfad von einem Anfragepunkt zum nächsten Bezugspunkt ωi , denn dieser Pfad ist im Grunde eine Folge von sukzessiv zugeordneten definierenden Objekten und somit das Inverse eines kürzesten Pfads nach ωi . Dies bedeutet, dass die Regionen von VC (S) Bereiche ähnlicher kürzester Wege nach S auszeichnen, denn für alle Punkte einer gegebenen Region ist die Folge definierender Objekte bis hin zu S gleich. In Abschnitt 6.4.2 wird dargelegt, wie während der Konstruktion der Quickest-Path-Map für jede Region ihr definierendes Objekt gespeichert wird. Man beachte, dass ein Anfragepunkt durchaus auf einer Skelettkante oder sogar auf einem Knoten der Quickest-Path-Map liegen kann, nicht nur im Inneren der Regionen. Nach Definition der QuickestPath-Map zeichnen Kanten und Knoten von VC (S) Punkte aus, für die kein eindeutiger schnellster Pfad nach S existiert. Somit kann ein Anfragepunkt auf einem Knoten oder einer Kante von VC (S) einer beliebigen inzidenten Region zugeordnet werden. In Kapitel 9 betrachten wir Anfragen im Detail. Typ-B-Ereignisse bringen eine subtile Besonderheit mit sich: Wenn eine Kante eW in ein Segment ci des Netzwerks rutscht, so entsteht keine Skelettkante, welche den Ort, an dem eW entsteht, mit ci verbindet, wo die Wellenfront sich weiter ausdehnt. Die Menge der Skelettkanten kann auf diese Weise unzusammenhängend werden. Dies erscheint zunächst nicht weiter wichtig, spielt jedoch bei Anfragen an die Quickest-Path-Map (siehe Kapitel 9) eine Rolle. Definition 3.8 (β-Kanten) Eine β-Kante ist ein Zeiger, der bei einem TypB-Ereignis von dem definierenden Element der involvierten Region zu dem Ort des Ereignisses zeigt. Wir erstellen bei jedem Typ-B-Ereignis eine solche β-Kante, und sichern damit, dass die Kantenmenge der Quickest-PathMap zusammenhängend bleibt. Zusätzlich speichern wir für jede β-Kante den Winkel B vC eC ϕ ϕ, den diejenige Kante der Wellenfront mit der x-Achse einschließt, welche den Streieβ fen auszeichnen, der in das Typ-B-Ereigωi nis involviert ist. Abbildung 3.26 verdeutlicht die Funktion einer β-Kante. In Abschnitt 9.2 werden wir ϕ für die Entschlüsselung schnellster Pfade nutzen. Offensichtlich existiert nur eine lineare Anzahl von βKanten, was die asymptotische Laufzeit der Abbildung 3.26: Die Kante eβ ist Konstruktion und den Speicherbedarf der B von ωi nach vC gerichtet und Quickest-Path-Map unverändert lässt. speichert den Winkel ϕ. Kapitel 4 Die Wellenfront im Raum In diesem Kapitel wird das Wesen der Wellenfront derart erweitert, dass alle vier verschiedenen Ereignistypen durch einen einheitlichen Ansatz einem Ereignis des Typs D gleichzusetzen sind. Für Ereignisse des Typs C ist dies ohne Weiteres möglich, wie in Abschnitt 4.1 dargelegt wird. Erst die Hinzunahme einer dritten Dimension macht es jedoch möglich, Ereignisse vom Typ A und vom Typ B als Ereignisse des Typs D zu interpretieren. 4.1 Eine Kante verschwindet Wie in Abschnitt 3.3.3 dargelegt, ist ein Ereignis vom Typ D eine Kollision der Wellenfront mit sich selbst. Ein Ereignis des Typs C ist intuitiv keine Kollision von zwei Elementen der Wellenfront, da zunächst lediglich die Länge einer Kante der Wellenfront auf Null sinkt. Betrachtet man jedoch, wie in Abbildung 3.8 aufgezeigt, die linke, adjazente Kante e1W und den rechten, inzidenten Knoten 2 vW der Kante eW , so ergibt sich zwischen diesen beiden Elementen im Zuge des beobachteten Typ-C-Ereignisses eine Kollision zwischen einem Knoten und einer Kante der Wellenfront. Somit kann ein Ereignis vom Typ C auch als Typ D betrachtet werden, wodurch eine Technik zur Prognose von Typ-D-Ereignissen auch für den Typ C ausreichend ist. Natürlich erfordert dies, dass man das Ereignis nach der Prognose als Typ-C-Ereignis erkennt; mittels eines schnellen Nachbarschaftstests der betroffenen Elemente der Wellenfront ist dies jedoch, im Zuge der Behandlung eines Typ-D-Ereignisses, in konstanter Zeit möglich. Die Argumente dieses Abschnitts lassen die folgende Beobachtung zu: Beobachtung 4.1 Jedes Verfahren, welches genutzt werden kann, um Typ-DEreignisse vorherzusagen, ist auch in der Lage, Ereignisse vom Typ C zu erkennen. Die Prognose von Typ-C-Ereignissen muss somit nicht weiter untersucht werden. Im Folgenden wird eine ähnliche Aussage auch für Ereignisse vom Typ A und B getroffen. 40 4.2 Die Wellenfront im Raum Die Wellenfront als Höhenlinie Aichholzer u. a. (1995) sprechen eine interessante Interpretation des StraightSkeletons an, die des Dachmodells. Weiterhin nutzen Eppstein und Erickson (1999) diese Anschauung für ihre Konstruktionstechnik eines Straight-Skeletons. Bei der üblichen Betrachtungsweise des Straight-Skeletons als Partition eines gegebenen Polygons kann dessen Straight-Skeleton zur Konstruktion eines Daches genutzt werden, indem Regionen des Straight-Skeletons zu einzelnen Dachflächen werden, deren Neigung durch ein Gewicht bestimmt wird, welches der definierenden Polygonkante gegeben wird. In der Ebene entspricht das Gewicht einer Kante der Geschwindigkeit, mit der diese Kante sich bei der Wellenfrontausdehnung bewegt. Der Algorithmus, welcher in dieser Arbeit vorgestellt wird, macht sich ebenfalls die Hinzunahme einer dritten Dimension zu Nutze. In diesem Abschnitt wird dargelegt, wie die Quickest-Path-Map nicht nur ebenfalls eine dreidimensionale Interpretation besitzt, sondern auch, wie diese während des Konstruktionsprozesses genutzt wird. Man betrachte im Folgenden die Wellenfront im Raum, wobei die neue Raumachse die z-Achse sei und die z-Koordinate zur Startzeit 0 sei. Lässt man die Wellenfront, zusätzlich zu ihrer bisherigen Ausbreitung in Richtung der xund y-Richtung, mit jeder Zeiteinheit in Richtung der z-Achse ansteigen, so kann sie zu jedem Zeitpunkt als einheitliche Höhenlinie gesehen werden. Während dieser dreidimensionalen Ausdehnung der Wellenfront zeichnen die Kanten der Wellenfront Flächen aus. Analog zu der Interpretation des Straight-Skeletons eines Polygons als Dachkonstruktion kann die Quickest-Path-Map somit als Modell eines Terrains interpretiert werden, welches n Abflüsse ωi besitzt, wobei von jedem Punkt des Terrains durch Abwärtswandern genau ein Abfluss erreicht werden kann. Abhängig von der Struktur des Netzwerks kann diese Oberfläche vielfältig sein, doch sie steigt ausgehend von den Elementen von S konstruktionsbedingt streng monoton an (vorausgesetzt gi < ∞). Mit anderen Worten kann die Quickest-Path-Map zur Konstruktion eines Terrains betrachtet werden, welches garantiert, dass Regenwasser vollständig in Richtung der Abflüsse ωi , (1 ≤ i ≤ n), den Startpunkten der Wellenfront fließt, ohne Pfützen zu bilden. Die Anwendung eines drainagierten Terrains mag etwas obskur klingen, doch die Verwendung einer dritten Dimension ermöglicht es, ein Ereignis vom Typ D als Kollision zwischen einem Strahl und einer Fläche zu betrachten. Der Strahl stellt dabei die Bewegung eines Knotens im Zuge der Wellenfrontausdehung dar, und die Fläche ist die geneigte Region des Terrains, welche von einer Kante ausgezeichnet wurde. Da jedes Element der Wellenfront stets mit konstanter Geschwindigkeit in z-Richtung wandert, ändert die Hinzunahme einer dritten Dimension nichts an der Tatsache, dass ein Ereignis eintritt und auch nichts an dessen Zeitpunkt. Allerdings wird sich im Folgenden herausstellen, dass diese Sichtweise viele Vorteile birgt. Eine Projektion der im Raum expandierenden Wellenfront auf die x-y-Ebene ergibt wieder die alte Betrachtungsweise in der Ebene. Die folgende Beobachtung fasst die Überlegungen dieses Absatzes zusammen: Beobachtung 4.2 Ein Ereignis vom Typ D besteht bei Betrachtung der Wellenfrontausdehnung im Raum aus der Kollision eines Strahls mit einer Fläche. 4.3 Die Netzwerksegmente als Wände 41 Für solche Ray-Shooting-Anfragen Ray-Shooting-Anfrage gibt es eine Vielzahl effektiver Techniken, die somit zur Berechnung von Ereignissen vom Typ D verwendet werden können. Wie Ray-Shooting-Anfragen bei der Konstruktion von VC (S) im Detail durchgeführt werden, wird in den folgenden Kapiteln erläutert. Im nächsten Abschnitt untersuchen wir zunächst, wie es die Verwendung einer dritten Dimension möglich macht, die Kollisionen der Wellenfront mit Segmenten des Netzwerks ebenfalls als Ereignisse vom Typ D zu behandeln. 4.3 Die Netzwerksegmente als Wände Angenommen eC sei eine Kante des Transportnetzwerkes C. Betrachtet man die Wellenfrontausdehnung, wie im vorigen Abschnitt beschrieben, im Raum, so ergibt sich eine intuitive Erweiterung für eC : dem zweidimensionalen Netzwerksegment eC wird eine dritte Dimension gegeben. Das Segment e wird in Richtung der z-Achse zu einer einseitig unbegrenzten Fläche eC erweitert. Dabei bildet die ursprüngliche Kante eC den Boden dieses Streifens, und Strahlen, welche parallel zur z-Achse nach oben ragen und die Endpunkte von eC als Fußpunkte haben, die Seiten von eC . Erweiterte Kanten von C sind also Flächen im Raum, und erweiterte Knoten Strahlen. Erweitert man sämtliche Elemente des Transportnetzwerks C, so erhält man eine Menge von endlos hohen Wänden, senkrecht aufgebaut auf der x-y-Ebene. Auf diese Weise stehen die Netzwerksegmente auch im Raum bei einer dreidimensionalen Ausdehnung der Wellenfront für diejenigen Kollisionen vom Typ A und vom Typ B bereit, welche bei einer Wellenfrontausdehnung in der Ebene aufgetreten wären. In Abschnitt 4.2 haben wir bereits festgestellt, dass Ereignisse vom Typ D durch die Hinzunahme der z-Achse als Kollisionen von Flächen 1 und Strahlen in R3 betrachtet wereC den können. Die erweiterten Elemen2 te des Transportnetzwerkes sind jeeC doch ebenfalls Flächen und Strahlen. Dies legt den Ansatz nahe, Ereignisse, welche die Elemente des TransvW portnetzwerkes C involvieren, mit eiy ner ähnlichen Technik zu berechnen. ωi vW Man betrachte Abbildung 4.1. Sei E e1C ein Ereignis vom Typ A, wie in Abe2 x C schnitt 3.3.3 beschrieben, und sei vW der Knoten, der bei diesem Ereignis E Abbildung 4.1: Ein Typ-A-Ereignis im auf die Kante e1C des Netzwerks trifft. Raum. Nach der Erweiterung der Ebene zum Raum sieht das Ereignis folgendermaßen aus: der erweiterte Knoten v W trifft als Strahl auf die erweiterte Fläche eC , welche von der Kante eC ausgezeichnet wird. Stellt man also zum Zweck der Ereignisprognose die Elemente des Netzwerks C denen der Wellenfront gleich, so ist dieses Ereignis E nach der Erweiterung nichts anderes als ein Ereignis vom Typ D. z 42 Die Wellenfront im Raum z Analog zu Typ-A-Ereignissen lassen sich auch Ereignisse vom Typ vC v 2W B, ebenfalls beschrieben in Abschnitt 3.3.3, als Typ-D-Ereignisse betrachten. Sei E nun ein Ereignis eW vom Typ B, und sei eW die Kane2C vB te der Wellenfront, welche bei diesem Ereignis E in den Endpunkt vC einer v 1W 2 vW Kante des Netzwerks rutscht. Nach 1 der Erweiterung dieser Elemente ist eC vC y ew das Ereignis E erneut eine Kollisiω 1 i on eines Strahls mit einer Fläche im vW Raum: der erweiterte Netzwerkknox ten v C ist ein Strahl und trifft die Fläche eW , welche von der Kante eW der Wellenfront ausgezeichnet wird. Ab- Abbildung 4.2: Ein Typ-B-Ereignis im bildung 4.2 zeigt diese Situation auf, Raum. dabei zeigt vB den Ort des Typ-BEreignisses E im Raum auf. Das folgende Lemma fasst die Ergebnisse dieses Kapitels zusammen: Lemma 4.1 Betrachtet man die Wellenfrontausdehnung im Raum, indem die Elemente des Transportnetzwerk um eine Ausdehnung in z-Richtung erweitert werden, und die Bewegung der Wellenfront eine konstante z-Komponente erhält, so können Ereignisse vom Typ A, B, C und D jeweils als Kollision eines Strahls mit einer Fläche in R3 hervorgesagt werden. Beweis. Für Typ C ist nach Beobachtung 4.1 nichts weiter zu beweisen. In diesem Abschnitt haben wir argumentiert, dass Ereignisse vom Typ A oder vom Typ B nach einer Erweiterung der Elemente von C als Kollisionen von Strahlen und Fläche im Raum betrachtet werden können. Zu guter Letzt sind nach Beobachtung 4.2 Typ-D-Ereignisse im Raum ebenfalls derartige Kollisionen. Im Folgenden übernehmen wir im Sinne der Übersichtlichkeit für einen erweiterten Knoten v die Bezeichnung v. Flächen, welche durch erweiterte Kanten ausgezeichnet werden bezeichnen wir mit s. Desweiteren sprechen wir im Folgenden ohne weitere Erwähnung von erweiterten Objekten, wenn wir Kanten oder Knoten betrachten. Gesucht ist also eine Technik zur effektiven Berechnung von Kollisionen von Strahlen und Fläche im Raum. Dies würde genügen, um sämtliche Ereignisse, die während der Wellenfrontausdehnung auftreten, vorherzusagen. Die Vorhersage von Ereignissen macht es notwendig, die Erkennung der in Abschnitt 3.3.4 beschriebenen virtuellen Ereignisse und die zeitliche korrekte Ordnung der eintretenden Ereignisse genauer zu betrachten. Letzteres sowie die dafür eingesetzte Technik beschreibt das folgende Kapitel. Kapitel 5 Der Kern Die einzelnen Ereignisse, welche während der Wellenfrontausdehnung in der Ebene auftreten, haben wir in Kapitel 3 erläutert. In Kapitel 4 habe wir dargelegt, dass durch Hinzunahme einer dritten Dimension Ereignisse vom Typ A, B, C und D mit Hilfe von gewöhnlichen Ray-Shooting-Anfragen vorhergesagt werden können. Mit Hilfe eines vereinheitlichten Ansatzes wurden dazu die Elemente des Transportnetzwerks den Elementen der Wellenfront gleichgesetzt. Somit ist es möglich, alle Typen von Ereignissen mit einer einheitlichen Technik vorherzusagen. In diesem Kapitel betrachten wir den Kern der Technik, mit welcher entdeckte Ereignisse zeitlich geordnet werden und die Wellenfrontausdehnung für den Konstruktionsalgorithmus der Quickest-Path-Map simuliert wird. Eine kontinuierliche Ausdehnung der Wellenfront kann selbstverständlich nicht unmittelbar gehandhabt werden, notwendig ist eine Zeitdiskretisierung. Im Folgenden wird ein Konzept dargelegt, wie VC (S) durch einen zeitdiskreten Prozess konstruiert werden kann. Herzstück des Ansatzes ist ein Satz von Eppstein und Erickson (1999), erstmalig aufgestellt von Eppstein (1995). Dieser Satz, beschrieben in Abschnitt 5.2, erlaubt es auf effektive Weise, mit Hilfe von Ray-Shooting-Anfragen und deren Inversen, genannt Lowest-Intersection-Anfragen, während der Wellenfrontausdehnung stets das nächste eintretende Ereignis zu bestimmen. 5.1 Die Diskretisierung Als Zeitpunkte, nach denen die Wellenfrontausdehnung zur Konstruktion diskretisiert wird, werden die in Kapitel 3 beschriebenen Ereignisse betrachtet, welche die kombinatorische Gestalt der expandierenden Wellenfront verändern. Zwischen diesen Ereignissen expandiert die Wellenfront auf vorhersehbare, lineare Weise, so dass der Zeitraum zwischen einem Ereignis und dem zeitlich nächsten Ereignis in konstanter Zeit abgehandelt werden kann. Die Anzahl der Zeitpunkte, an denen ein Ereignis stattfindet, ist linear in der Komplexität von VC (S). Nach Abschnitt 2.1 ist dieser Wert wiederum linear in der Summe der Netzwerksegmente des Transportnetzwerks C und der Bezugspunkte. Folglich 44 Der Kern ist es ausreichend O(c + n) viele diskrete Zeitpunkte der Wellenfrontausdehnung zu betrachten, um VC (S) vollständig konstruieren zu können. Das Ziel eines zeitdiskreten Konstruktionsalgorithmus sollte demnach sein, nicht wesentlich mehr Ereignisse als die notwendigen O(c + n) zu betrachten, um eine optimale Laufzeit zu erzielen. Warum aber sollte ein Algorithmus mehr Ereignisse betrachten als auftreten? Die Antwort auf diese Frage wurde in Abschnitt 3.3.4 gegeben: Es tritt während der Konstruktion von VC (S) eine große Zahl von virtuellen Ereignissen auf. Diese Ereignisse tragen nicht zur Komplexität von VC (S) bei, und können somit von einem Konstruktionsalgorithmus vernachlässigt werden – allerdings muss ein Ereignis zu diesem Zweck zunächst als virtuell erkannt werden. Offensichtlich muss dies implizit geschehen, denn nach Argumenten aus Abschnitt 3.3.4 würde eine explizite Betrachtung virtueller Ereignisse die Gesamtzahl der betrachteten Ereignisse auf Θ(cn) erhöhen. In Abschnitt 6.5.1 wird bewiesen, dass der in dieser Arbeit dargelegte Algorithmus die Behandlung virtueller Ereignisse vollständig auf implizite Weise verrichtet. Dies bedeutet, dass virtuelle Ereignisse die asymptotische Laufzeit nicht erhöhen. 5.2 Die globale Prognose Eppstein und Erickson (1999) stellen ein Verfahren vor, um die Interaktionen zwischen Kanten und Knoten eines schrumpfenden Polygons zu simulieren, mit dem Ziel das Straight-Skeleton (siehe Abschnitt 2.1) des Polygons zu konstruieren. Mit Hilfe einer Technik von Eppstein (1995) zum Aufrechterhalten von Extrema binärer Funktionen, reduziert sich das Problem, die korrekte Folge von Interaktionen zwischen Kanten und Knoten zu finden, auf die folgenden zwei Anfrageprobleme: 1. Ray-Shooting-Anfrage: Halte eine dynamische Menge von Dreiecken im Raum aufrecht, so dass Anfragen der Form: Welches Dreieck trifft ein ” Anfragestrahl zuerst?“ effizient beantwortet werden können. 2. Lowest-Intersection-Anfrage: Halte eine dynamische Menge von Strahlen im Raum aufrecht, so dass Anfragen der Form: Welcher Strahl bildet mit ” einem Anfragedreieck den Schnittpunkt mit der geringsten z-Koordinate?“ effizient beantwortet werden können. Diese Technik bildet einen wichtigen Bestandteil des in dieser Arbeit vorgestellten Algorithmus zur Konstruktion von VC (S), und wird im Folgenden als Blackbox betrachtet, welche wir globale Prognose nennen. Im nächsten Absatz wird der für uns relevante Satz von Eppstein und Erickson (1999) sowie einige formelle Bezeichnungen erläutert, um die Schnittstelle zur oben genannten Technik darzulegen. Seien R und B dynamische Mengen von Objekten, und sei eine Funktion d : R × B → R gegeben. Die Funktion d sei eine beliebige Distanzfunktion, welche in konstanter Zeit berechnet werden kann. In unserem Algorithmus wird die Funktion d die Zeit repräsentieren, die zwei Objekte noch von einer Kollision trennt. Ähnlich den im letzten Absatz genannten Objekten werden die in 5.3 Lokale Prognosen 45 unserem Algorithmus genutzten Mengen von Objekten zum einen die Bahnen der Knoten der Wellenfront sein, und zum anderen die Flächen, welche von den Kanten der Wellenfront überstrichen und beschrieben werden. Definition 5.1 Eine Datenstruktur unterstützt sogenannte Minimierungsanfragen zwischen den Mengen R und B, wenn für jedes Objekt r ∈ R ein Objekt b ∈ B bestimmt werden kann, so dass d(r, b) minimal ist, und umgekehrt. Der folgende Satz von Eppstein und Erickson garantiert nun, dass mit Hilfe von Minimierungsanfragen das nächste Paar zwischen den Mengen R und B schnell bestimmt werden kann: Satz 5.1 (Eppstein und Erickson (1999)) Angenommen es ist nach einer Vorverarbeitungszeit von P (n) möglich, eine Datenstruktur der Größe S(n) aufrechtzuerhalten, welche Einfüge- und Löschoperationen sowie Minimierungsanfragen unterstützt, jeweils in einer asymptotischen Laufzeit von T (n). Dann ist es möglich, nach einer Vorverarbeitungszeit von O(P (n) + nT (n)) das nächste Paar zwischen R und B aufrechtzuerhalten. Dabei wird ein Speicherbedarf von O(S(n)) benötigt, für Einfügeoperationen eine Laufzeit von O(T (n) log n) und 2 für Löschoperationen eine Laufzeit von O(T (n)(log n) ). Mit Hilfe dieses Satzes reduziert sich also das Problem die nächste Veränderung der Wellenfront zu finden auf das Problem Minimierungsanfragen zwischen den Elementen der Wellenfront zu beantworten. In dem folgenden Abschnitt werden die Minimierungsanfragen kurz besprochen, während sie in Kapitel 8 im Detail betrachtet werden. 5.3 Lokale Prognosen Die in Satz 5.1 geforderten Minimierungsanfragen fordern zwei verwandte Arten von Anfragen. Betrachtet man zunächst die Wellenfrontausdehnung, so ist es notwendig eine Datenstruktur bereitzustellen welche, abgesehen von der Speicherung der dynamischen Wellenfront, in der Lage ist die folgenden beiden Anfragen zu beantworten: 1. Ray-Shooting-Anfrage: Welche Kante trifft ein Anfrageknoten auf seiner Bahn zuerst? 2. Lowest-Intersection-Anfrage: Welcher Knoten bildet mit einer Anfragekante den Schnittpunkt mit der geringsten z-Koordinate? Man beachte, dass wir bei diesen Anfragen von erweiterten Knoten und Kanten sprechen. Die Elemente der Wellenfront werden im folgenden Kapitel genauer betrachtet, und somit werden dort auch diese beiden Anfragen konkretisiert, welche wir lokal nennen. Stehen diese beiden Anfragen zur Verfügung, und ist d wie oben beschrieben die Zeit, die zwei Objekte noch von einer Kollision trennt, so kann nach Satz 5.1 die nächste Kollision zwischen einer Kante und einem Knoten innerhalb der entsprechenden Laufzeit vorhergesagt werden. 46 Der Kern Lokale Vorhersagen werden wie in Kapitel 8 beschrieben durch sublokale Anfragen gespeist. Abschnitt 8.7 verdeutlicht, wie lokale Vorhersagen aus sublokalen Vorhersagen erstellt werden. Sublokale Vorhersagen stellen lediglich Ereignisse zwischen bestimmten Gruppen von Objekten fest. Wie diese Gruppen von Objekten eingeteilt werden, betrachten wir im folgenden Kapitel. Man beachte, dass die beiden degenerierten Fälle, eine Kollision von zwei Knoten oder von zwei Kanten, durch diese Vorhersage ebenfalls abgedeckt sind. Zu dem Zeitpunkt da zwei Knoten miteinander kollidieren, treffen auch die Kanten, welche inzident zu diesen Knoten sind, am Punkt der Kollision ein. Andererseits trifft bei einer Kollision von zwei Kanten auch mindestens je einer der inzidenten Knoten der Kanten auf die jeweils andere Kante. Somit werden diese speziellen Ereignisse ebenfalls regulär entdeckt, sie haben lediglich größere Auswirkungen auf die Form der Wellenfront, da sie im Grunde mehrere Ereignisse in einem vereinen. Ereignisse, welche von Minimierungsanfragen geliefert werden, sind potentiell virtuell. Wie in Abschnitt 3.3.4 beschrieben, sind Ereignisse genau dann virtuell, wenn mit Hilfe von lokaler Information zunächst ein zukünftiges Eintreten berechnet werden kann, im Laufe der Wellenfrontausdehnung allerdings andere Ereignisse, welche die teilnehmenden Objekte involvieren, dieses Ereignis verhindern. Es ist allerdings nicht notwendig, ein jedes von einer Minimierungsanfrage geliefertes Ereignis auf dessen Virtualität zu prüfen, denn sollte ein virtuelles Ereignis an die globale Prognose übergeben werden, so liegt es an ihr, das virtuelle Ereignis nicht global vorherzusagen. Ein virtuelles Ereignis hat also zunächst keine negativen Auswirkungen auf die Laufzeit, sollte es aber von der globalen Prognose vorhergesagt werden, so ist tatsächlich eine Prüfung notwendig, um die korrekte Konstruktion von VC (S) zu garantieren. Allerdings wird in Lemma 6.3 im folgenden Kapitel bewiesen, dass die globale Prognose kein virtuelles Ereignis vorhersagt. Kapitel 6 Elemente der Wellenfront In Kapitel 5 haben wir argumentiert, wie eine zeitliche Diskretisierung des Expansionsprozesses einer Wellenfront genutzt wird, um VC (S) zu konstruieren. Wie bei den meisten Problemen, bei denen eine Lösung mit geringer Laufzeit gefunden werden soll, spielen auch in dieser Arbeit die Datenstrukturen der genutzten Objekte eine wesentliche Rolle. In Abschnitt 3.3.3 legten wir dar, dass für die Simulation der Wellenfrontausdehnung das Konstruktionsdiagramm KV genutzt wird, die zusätzlichen Konstruktionskanten jedoch nicht in der QuickestPath-Map VC (S) gespeichert werden. In diesem Kapitel betrachten wir die Elemente von KV , die bei der Konstruktion von VC (S) im Raum (siehe Kapitel 4) genutzt werden, und zeigen, warum die spezielle Wahl dieser Objekte eine gute Laufzeit möglich macht. Wie in Kapitel 4 bereits angesprochen, ist es sinnvoll die Wellenfront als zyklisch verkettete Liste von Knoten und Kanten zu modellieren, da dies die Bestandteile der Wellenfront sinnvoll repräsentiert. Diese beiden Objekte und ihr Verhalten während der Wellenfrontausdehnung sind zwar relativ einfach zu beschreiben, bedürfen aber einiger begrifflicher Klärungen. Diese wird in den folgenden Abschnitten vorgenommen. Das wichtigste Ergebnis und Abschluss dieses Kapitels ist Lemma 6.5, welches aussagt, dass jedes auftretende Ereignis einem von einer konstanten Anzahl von Schemata folgt, und es somit möglich ist, eine konstante Anzahl von speziell abgestimmten Datenstrukturen zu seiner Vorhersage zu nutzen. Dadurch wird eine gute Laufzeit möglich. In Kapitel 7 wird dann eine geometrische Transformation vorgestellt, welche die genutzten Objekte derart transformiert, dass eine weitere Verbesserung der Laufzeit möglich wird. 6.1 Figuren Die Elemente von KV entstehen nach Abschnitt 3.3 beim Start der Wellenfront und bei den nachfolgenden Ereignissen. Jedes Ereignis erzeugt eine Figur, und das Interferenzmuster aller Figuren ergibt schließlich KV . In Abschnitt 3.3.3 haben wir bereits einige Figuren als Beispiele der Ereignistypen A und B betrachtet. Man beachte dabei, dass bei Typ-C- und Typ-D-Ereignissen keine 48 Elemente der Wellenfront v4 v4 v1 v1 v3 v3 v2 v2 Abbildung 6.1: Eine 0-Nadel entsteht Abbildung 6.2: Eine 1-Nadel entsteht beim Start der Wellenfront an Bezugs- bei Typ-B-Ereignissen an Endpunkten punkten. des Transportnetzwerks. v4 v4 v1 v3 v2 v3 v1 v2 Abbildung 6.3: Eine 2-Nadel entsteht Abbildung 6.4: Eine innere 2-Nadel bei Typ-B-Ereignissen an Ecken des entsteht bei Typ-A-Ereignissen. Transportnetzwerks. neuen Figuren entstehen, sondern lediglich besondere Vorfälle der Interferenz der Wellenfronten verschiedener Figuren auftreten. Da wir in diesem Kapitel eine detailliertere Untersuchung und eine Klassifizierung der Elemente von KV vornehmen, ist in diesem Abschnitt eine Übersicht der relevanten Figuren in der Ebene gegeben. Abbildungen 6.1 bis 6.6 zeigen repräsentativ die auftretenden Figuren auf. Die Geschwindigkeiten der schnell wandernden Knoten der Wellenfront sind jeweils aus der Menge G der k möglichen Geschwindigkeiten. Wir bezeichnen die einzelnen Figuren als j-Nadeln, wobei j die Anzahl der spitzen Knoten der Wellenfront einer Figur angibt. Es gilt, dass 0 ≤ j ≤ 4 ist, da der Grad des Netzwerks vier ist. In den Abbildungen ist zum Vergleich jeweils ein gestrichelter L1 -Kreis eingezeichnet. Einige Ereignisse können als Typ A oder B behandelt werden, wie zum Beispiel unmittelbar nach dem Start der Wellenfront in Abbildung 3.14, wo eine Ecke der Wellenfront auf einen Endpunkt des Netzwerks trifft. Es bleibt der Implementierung überlassen, wie solche Ereignisse gehandhabt werden. Aus der Überlegung dass sich j-Nadeln gleichen Typs nur durch die Geschwindigkeiten auf den involvierten Netzwerksegmenten und durch Spiegelungen und Drehungen um 90◦ unterscheiden, halten wir die folgenden Beobachtung fest: Beobachtung 6.1 Es existiert nur eine konstante Anzahl von verschiedenen Figuren. 6.2 Knoten und Strahlen 49 v4 v4 v1 v3 v3 v1 v2 v2 Abbildung 6.5: Eine 3-Nadel entsteht Abbildung 6.6: Eine 4-Nadel entsteht bei Typ-A-Ereignissen an Knoten des bei Typ-A-Ereignissen an Knoten des Transportnetzwerks mit Grad 3. Transportnetzwerks mit Grad 4. Auf eine detaillierte Untersuchung aller möglichen Figuren wird verzichtet, die Anzahl möglicher Figuren liegt jedoch offensichtlich bei etwa O(k 4 ) (siehe Abschnitt 10.4). Figuren sind die Schlüssel zur Ausdehnung der Wellenfront, da die Interferenz der einzelnen Wellenfronten die gemeinsame Wellenfront ergibt. Um speziell abgestimmte Datenstrukturen zur Vorhersage von Ereignissen zu konstruieren, betrachten wir in den folgenden Abschnitten das Spektrum der möglichen Interferenzen im Detail. 6.2 Knoten und Strahlen Ein Knoten stellt eine Ecke der Wellenfront dar. Jeder Knoten ist inzident mit genau zwei Kanten der Wellenfront, da die Wellenfront, wie in Kapitel 4 erläutert, eine Menge von disjunkten Zykeln ist. Somit kann ein Knoten eine konkave oder eine konvexe Ecke darstellen. Ein Knoten bewegt sich während der Expansion auf einem Strahl, dessen Fußpunkt der Entstehungspunkt des Knotens ist. In der Geometrie ist ein Strahl bekanntlich eine Halbgerade, also eine einseitig unbeschränkte Strecke. Im Folgenden benutzen wir allerdings die leicht abgewandelte Definition eines Knotenstrahls, welche der Intuition folgt, dass sich ein Knoten während der Wellenfrontausdehnung mit endlicher Geschwindigkeit entlang eines Strahls bewegt, genauer gesagt mit der Ausbreitungsgeschwindigkeit der Wellenfront in dieser Richtung: Definition 6.1 (Knotenstrahl) Der Knotenstrahl eines Knotens der Wellenfront ist die orientierte Strecke zwischen dem Entstehungspunkt eines Knotens und seiner aktuellen Position während der Wellenfrontausdehnung. Orientiert ist die Strecke vom Entstehungspunkt in Richtung der aktuellen Position. Ein Knotenstrahl ist nur solange definiert, wie der entsprechende Knoten an der Wellenfront teilhat. Sobald ein Knotenstrahl in ein Ereignis verwickelt ist, also mit einem anderen Element der Wellenfront oder mit einem Element des Transportnetzwerkes kollidiert, ist er nicht weiter Element der zukünftigen Wellenfront, da an seiner 50 Elemente der Wellenfront Position eine Änderung der Wellenfront stattfindet. Tatsächlich wird ein Knoten aus technischen Gründen auch dann aus der Wellenfront genommen, und durch einen neuen ersetzt, wenn eine inzidente Kante in ein Ereignis verwickelt ist, siehe dazu Abschnitt 3.3.3. Definition 6.2 (Lebenszeit) Die Lebenszeit eines Knotens der Wellenfront ist die Zeitspanne ab dem Ereignis seiner Entstehung bis zu dem Ereignis, welches seine Löschung aus der Wellenfront veranlasst. Für einen Knotenstrahl werden lediglich dessen Fußpunkt, Entstehungszeitpunkt, Richtung und Geschwindigkeit gespeichert. Diese Daten genügen um die diskretisierte Wellenfrontexpansion durchzuführen. Ist die Lebenszeit eines Knotenstrahls beendet, so wird er als orientierte Kante in der Quickest-Path-Map abgespeichert. Die Orientierung der Kante entspricht der Richtung, in der sie von der Wellenfront ausgezeichnet wurde. Dabei unterscheiden wir die folgenden zwei Typen von Kanten: Definition 6.3 (Pionier-Kanten) Pionier-Kanten sind Skelettkanten, welche durch einen entsprechend der City-Metrik wandernden Punkt der Wellenfront ausgezeichnet werden. Ein Knotenstrahl, der eine Pionier-Kante erzeugt, ist ein Pionier-Knotenstrahl. Definition 6.4 (gezogene Kanten) Gezogene Kanten sind Skelettkanten, welche das Resultat von zwei Pionier-Kanten der Wellenfront sind, die schräg (oder sogar frontal) aufeinandertreffen, und durch nahegelegene Netzwerksegmente beschleunigt werden. Ein Knotenstrahl, der eine gezogene Kante erzeugt, ist ein gezogener Knotenstrahl. Während bei gezogenen Kanten kein Punkt der Wellenfront im Zuv1 ge der Ausbreitung der Wellenfront tatsächlich auf dem entsprechenden v3 Knotenstrahl gewandert ist, entsteeW hen Pionier-Kanten durch Knotenstrahlen, welche auch eine isolierte v4 Figur erzeugen würde. Somit sind vD eC Pionier-Kanten stets isothetisch. Eine Figur, welche an der Spitze eiv2 nes gezogenen Knotenstrahls startet, kann der Geschwindigkeit des KnoAbbildung 6.7: Knotenstrahl v1 tenstrahls hingegen nicht folgen. Ge(Lebenszeit beendet) ist eine Pionier- nerell gilt, dass Pionier-Kanten direkt Kante, v2 (auf eC ) ein Pionier- der City-Metrik folgen, und gezogeKnotenstrahl, v3 und v4 gezogene ne Kanten die unselbständigen Ergebnisse der Interferenz von zwei KanKnotenstrahlen. ten sind, welche jeweils durch PionierKanten aufgespannt werden. Für ein Beispiel dieser Kantentypen betrachte man Abbildung 6.7. Die beiden Knotenstrahlen v1 und v2 (auf eC wandernd) sind vor dem Typ-D-Ereignis an Punkt vD Pionier-Knotenstrahlen. Nach dem Ereignis ist v2 weiterhin ein Pionier-Knotenstrahl, die Lebenszeit von v1 ist jedoch 6.3 Parameter von Knotenstrahlen 51 beendet und damit v1 eine Pionier-Kante. Die beiden Knotenstrahlen v3 und v4 sind gezogene Knotenstrahlen und werden jeweils von v1 und v2 gezogen. Die Unterscheidung dieser beiden Kantentypen wird bei der Suche nach schnellsten Pfaden in Kapitel 9 erneut relevant. Jede Skelettkante ist entweder eine Pionier-Kante oder eine gezogene Kante, da jeder Knotenstrahl entweder der City-Metrik ensprechend wandert oder nicht. Wir betrachten einige Spezialfälle in Abschnitt 10.3.3. Das Ziel die Konstruktionszeit von VC (S) zu minimieren macht es notwendig, die Datenstrukturen für die Minimierungsanfragen optimal auf die gegebenen Elemente der Wellenfront abzustimmen. Dazu sei zunächst die Definition von ähnlichen Streifen gegeben: Definition 6.5 (Ähnlichkeitsklasse) Zwei Knotenstrahlen sind genau dann ähnlich, wenn ihre Richtungen und Geschwindigkeiten übereinstimmen. Eine Ähnlichkeitsklasse von Knotenstrahlen enthält alle Knotenstrahlen einer bestimmten Richtung und Geschwindigkeit. Somit unterscheiden sich zwei ähnliche Knotenstrahlen lediglich in den Koordinaten ihrer Fußpunkte. Im folgenden Abschnitt untersuchen wir die auftretenden Knotenstrahlen bezüglich ihrer Richtungen und Geschwindigkeiten. 6.3 Parameter von Knotenstrahlen Abhängig davon, wie ein Knoten entsteht, und welche Geschwindigkeiten auf den Netzwerksegmenten existieren, kann ein Knoten eine von mehreren möglichen Geschwindigkeiten und Richtungen haben. Obgleich diese Parameter für die Praxis eine große Rolle spielen, genügt für die theoretischen Überlegungen die Beobachtung, dass die Anzahl der verschiedenen möglichen Geschwindigkeiten konstant ist. Pionier-Knotenstrahlen sind einfach zu klassifizieren, da sie in direkter Weise vom Netzwerk abhängen. Etwas komplexer ist diese Abhängigkeit allerdings bei gezogenen Knotenstrahlen. In Abschnitt 6.1 wurde dargelegt, welche Figuren auftreten. Wir unterscheiden fünf wesentliche Entstehungssituationen für Knotenstrahlen durch Interferenz von Figuren, welche wir in diesem Abschnitt betrachten. Dabei beruhen derer drei auf orthogonal zueinander und zwei auf parallel wandernden Knoten der Wellenfront. Die aufgezeigten Situationen und erschlossenen Formeln sind allgemein, lediglich die Geschwindigkeiten der involvierten Pionier-Knotenstrahlen müssen angepasst werden. Abbildung 6.8 zeigt auf, wie die Wellenfront zum Zeitpunkt t in den inneren Knoten vC des Transportnetzwerks C läuft und sich dort weiter ausbreitet. Der Rand der grauen Region zeigt die Wellenfront der 2-Nadel, welche bei vC entstanden ist, zum Zeitpunkt t + 3. Die Kante eW ist zum Zeitpunkt t + 3 wie dargestellt nach oben gewandert und bildet am Schnittpunkt v1 durch Interferenz mit der neuen Figur einen gezogenen Knotenstrahl. Dabei bieten in Abbildung 6.8 die Segmente e1C und e2C die Geschwindigkeiten g1 = 2 beziehungsweise g2 = 3. Betrachtet man die Zeit, die die Wellenfront benötigt, von vStart nach v1 zu gelangen sowohl auf direktem Weg (h) als auch indirekt (über das Netzwerk und b), so ergibt sich für die Parameter h, b, und α1 und den Vektor ~v (v1 ) des Knotenstrahls in dieser Situation Folgendes (als Vektornorm 52 Elemente der Wellenfront wurde hier die euklidische Norm verwendet): e2C (g2 = 3) eW v1 h α1 vStart vC b e1C (g1 = 2) Abbildung 6.8: Eine Knoten der Wellenfront biegt ab und wandert weiter. h= b h + +b g1 g2 tan α1 = 1+ h = b 1− ⇒ 1 g1 1 g2 = 1 1 h 1− =b 1+ g2 g1 (6.1) g2 (g1 + 1) g1 (g2 − 1) (6.2) b +3 g1 g1 (g2 − 1) g2 (g1 + 1) b h , = , ~v (v1 ) = 3 3 g1 g2 + 1 g1 g2 + 1 √ q 2 2 h +b 1 ||~v (v1 )|| = = g22 + g12 + 2(g1 g2 )(g1 g2 + g2 − g1 ) 3 g1 g2 + 1 h= (6.3) (6.4) (6.5) Die im letzten Abschnitt dargestellte Situation kann auch auf Typ-A-Ereignisse angewendet werden. Dabei wird für die Geschwindigkeit g1 des Knotenstrahls, der das Ereignis erzeugt, die Geschwindigkeit g1 = 1 angenommen. Abbildung 6.9 zeigt auf, wie die Kante eW der Wellenfront zum Zeitpunkt t auf die Ecke vC läuft, und sich von dort aus zwei Knotenstrahlen rechtwinkelig zueinander auf den Segmenten e1C und e2C ausbreiten. Die graue Region zeigt die Wellenfront der 2-Nadel, welche bei vC entstanden ist, zum Zeitpunkt t + 3. Als Resultat der beiden schnellen Pionier-Knotenstrahlen auf den Segmenten entsteht zwischen ihnen ein gezogener Knotenstrahl. Der Punkt v2 gibt an, wo sich dieser mittlere Knotenstrahl zum Zeitpunkt t + 3 befindet. Die Segmente e1C und e2C bieten wieder die Geschwindigkeiten g1 = 2 beziehungsweise g2 = 3. Betrachtet man die Zeit, die die Wellenfront benötigt, um von vC nach v2 zu gelangen sowohl über e1C als auch indirekt über e2C , so gilt hier für die Parameter h, b, und α2 und den Vektor ~v (v2 ) des Knotenstrahls in dieser Situation Folgendes: 6.3 Parameter von Knotenstrahlen 53 e2C (g2 = 3) eW v2 h vC α2 b e1C (g1 = 2) Abbildung 6.9: Zwei Knoten der Wellenfront entstehen und divergieren rechtwinkelig. b h +h= +b g1 g2 tan α2 = 1− h = b 1− ⇒ 1 g1 1 g2 = 1 1 =b 1− h 1− g2 g1 (6.6) g2 (g1 − 1) g1 (g2 − 1) (6.7) b +h g1 g1 (g2 − 1) g2 (g1 − 1) b h , = , ~v (v2 ) = 3 3 g1 g2 − 1 g1 g2 − 1 √ q 2 2 h +b 1 ||~v (v2 )|| = = 2g12 g22 − 2g12 g2 − 2g1 g22 + g22 + g12 3 g1 g2 − 1 3= (6.8) (6.9) (6.10) In Abbildung 6.10 ist analog zu den vorangegangenen Abbildungen dargestellt, welche Interferenz zwei orthogonal konvergierende Knoten der Wellenfront erzeugen. Im Sinne der Übersichtlichkeit wurde auf die in vC entstandene Figur verzichtet. Die beiden Referenzknoten sind in dieser Abbildung nur eine Zeiteinheit voneinander entfernt. Wieder gelangen wir nach kurzer Überlegungen zu den folgenden Parametern und zum Vektor ~v (v3 ) des neuen gezogenen Knotenstrahls: e2C (g2 = 2) v3 α3 h vC b e1C (g1 = 3) Abbildung 6.10: Zwei Knoten der Wellenfront kollidieren rechtwinkelig. 54 Elemente der Wellenfront b h h− =b− g1 g2 ⇒ 1+ h tan α3 = = b 1+ 1 g1 1 g2 1 h 1+ g2 = 1 =b 1+ g1 g2 (g1 + 1) g1 (g2 + 1) (6.11) (6.12) b +3=h g1 b h g1 (g2 + 1) g2 (g1 + 1) ~v (v3 ) = , = , 3 3 g1 g2 − 1 g1 g2 − 1 p √ (g2 (g1 + 1))2 + (g1 (g2 + 1))2 h2 + b 2 ||~v (v3 )|| = = 3 g1 g2 − 1 (6.13) (6.14) (6.15) Abbildung 6.11 zeigt auf, welche Interferenz zwei parallel wandernde Knoten der Wellenfront erzeugen, wenn sie sich in entgegengesetzte Richtungen bewegen. Wir betrachten wieder die Zeitpunkte t und t + 3. In dieser Situation ergeben sich die folgenden Werte: e1C (g1 = 4) b α4 h v4 e2C (g2 = 2) Abbildung 6.11: Zwei Knoten der Wellenfront wandern parallel aneinander vorbei. b b = − h ⇒ 2h(g1 g2 ) = b(g1 − g2 ) g1 g2 h g1 + g2 tan α4 = = b 2g1 g2 b h= +1 g1 2g1 g2 g1 + g2 ~v (v4 ) = (b, h) = , g1 − g2 g1 − g2 p p (2g1 g2 )2 + (g1 + g2 )2 ) ||~v (v4 )|| = h2 + b2 = g1 − g2 h− (6.16) (6.17) (6.18) (6.19) (6.20) 6.3 Parameter von Knotenstrahlen 55 Schließlich ist in Abbildung 6.12 dargelegt, welche Interferenz zwei parallel wandernde Knoten der Wellenfront erzeugen, wenn sie sich in derselben Richtungen bewegen: e1C (g1 = 3) α5 v5 h b e2C (g2 = 2) Abbildung 6.12: Zwei Knoten der Wellenfront wandern parallel nebeneinander. b b +h= − h ⇒ h(g1 g2 ) = b(g1 + g2 ) g1 g2 h g1 − g2 tan α5 = = b 2g1 g2 b h=3− g 1 2g1 g2 g1 − g2 b h , = ~v (v5 ) = , 3 3 g2 + g1 g2 + g1 p (2g1 g2 )2 + (g1 − g2 )2 ||~v (v5 )|| = g2 + g1 (6.21) (6.22) (6.23) (6.24) (6.25) Zwei Pionier-Knotenstrahlen verlaufen laut vergangenem Abschnitt isothetisch. Bis auf Drehungen und Spiegelungen können zwei isothetisch verlaufende Knotenstrahlen nur eine der fünf dargelegten relativen Orientierungen besitzen. Da jede Kante der Wellenfront aus einer Figur stammt, besitzt auch jede Kante derartige Knotenstrahlen als Begrenzungen, auch wenn diese oftmals nicht zu sehen sind, da sie gewissermassen virtueller Natur sind und Regionen der Ebene überstreichen, die von der Wellenfront schon besucht wurden. Somit kann jede Interferenz zweier Kanten der Wellenfront durch eine der fünf dargelegten Situationen erklärt werden, bei entsprechenden Geschwindigkeiten g1 und g2 auf e1C beziehungsweise e2C . Nun sind im Transportnetzwerk nur k verschiedene Geschwindigkeiten für g1 beziehungsweise g2 möglich. Somit können wir die folgenden Beobachtungen machen: Beobachtung 6.2 Die Anzahl der verschiedenen möglichen Geschwindigkeiten von Knotenstrahlen ist konstant. 56 Elemente der Wellenfront Beobachtung 6.3 Die Anzahl der verschiedenen Richtungen, in die sich ein Knotenstrahlen bewegen kann, ist konstant. Nach Argumenten des letzten Abschnitts sind 5 relative Oriene2C tierungen interferierender PionierKnotenstrahlen möglich, sowie durch v2 die L1 -Norm und das Netzwerk k + 1 verschiedene Geschwindigkeiten für Pionier-Knotenstrahlen. Somit ist ofv5 fenbar, dass (abgesehen von Drev1 hungen und Spiegelungen) 5(k + 1)2 Paarungen verschiedener PionierKnotenstrahlen (und somit gezogene Knotenstrahlen) möglich sind, und (k +1) Pionier-Knotenstrahlen. Es sei e1C noch einmal angemerkt, dass die Siv4 v3 tuationen wie in den Abbildungen 6.8 bis 6.12 dargestellt, in einem komplexen Netzwerk keineswegs stets so isoliert und offensichtlich sind. Man beAbbildung 6.13: Erst v2 wird durch v4 trachte als Beispiel Abbildung 6.13. und v5 erzeugt. Der Blick auf die Pionier-Knotenstrahlen v3 , v4 und v5 lässt zwei Interferenzen erkennen, welche jeweils der Situation wie aus Abbildung 6.8 entsprechen. Zunächst erzeugen v3 und v5 den gezogenen Knotenstrahl v1 , dessen Lebenszeit bei dem Typ-C-Ereignis (grau) mit dem Knotenstrahl v6 endet. Ab diesem Ereignis interferieren die beiden Knotenstrahlen v4 und v5 und erzeugen den gezogenen Knotenstrahl v2 . Der Knotenstrahl v2 ist weder kollinear zu v1 , noch bewegt er sich mit derselben Geschwindigkeit. Das wesentliche Ergebnis dieses Abschnitts ergibt sich direkt aus den Beobachtungen 6.2 und 6.3 wie folgt: Lemma 6.1 Die Anzahl τ der verschiedenen Ähnlichkeitsklassen von Knotenstrahlen ist konstant. 6.4 Kanten und Streifen Das zweite Objekt, aus dem sich die Wellenfront neben den Knoten zusammensetzt, sind die Kanten zwischen den Knoten. Nachdem wir in den vorangegangenen Abschnitten gezeigt haben, dass nur konstant viele Geschwindigkeiten und Winkel bei Knotenstrahlen auftreten können, ist das Ergebnis dieses Abschnittes, dass nur eine konstante Anzahl von verschiedenen Typen von Regionen in KV auftreten kann. Dies wird gezeigt mit Hilfe einer Untersuchung der Kanten der Wellenfront und der Flächen, welche die Kanten während der Wellenfrontausdehnung auszeichnen, genannt Streifen. 6.4 Kanten und Streifen 6.4.1 57 Kanten Wie schon in Abschnitt 6.2 erwähnt, ist eine Kante der Wellenfront begrenzt von zwei Knoten der Wellenfront. Diese Kanten sind der Schlüssel zu den Regionen von VC (S), und verdienen daher eine genauere Betrachtung. Da eine Kante der Wellenfront durch ihre beiden Endpunkte vollständig definiert ist, lässt sich das Verhalten der Kanten durch das der Knotenstrahlen erklären. Der Begriff der Lebenszeit einer Kante wird analog zur Lebenszeit eines Knotens in Abschnitt 6.2 definiert. Die Lebenszeit einer Kante beginnt somit zum Zeitpunkt des erstmaligen Auftretens in der Wellenfront und endet sobald die Kante oder einer der begrenzenden Knoten in ein Ereignis verwickelt ist. Zunächst sei jedoch s eine beliebige Kante zum Zeitpunkt ihrer Entstehung. Die Frage, welche Steigung und welche translationale Geschwindigkeit eine Kante in der Ebene hat, kann mit Hilfe der Figuren und der Pionier-Kanten beantwortet werden. Die konstante Anzahl an verschiedenen Geschwindigkeiten auf dem Transportnetzwerk und die L1 -Norm in der Ebene lassen nach Beobachtung 6.1 nur konstant viele verschiedene Figuren zu, und somit auch nur konstant viele verschiedene Steigungen und translationale Geschwindigkeiten von Kanten. Beobachtung 6.4 Die Anzahl der verschiedenen Steigungen und translationalen Geschwindigkeiten von Kanten ist konstant. Zerlegt man Figuren in die einzelnen 1-Nadeln aus denen sie bestegtrans hen, wie in den Abbildungen in Abα vW schnitt 6.1 in gestrichelten Linien angedeutet, so lässt sich die Steigung eieC (g = 4) ner Kante an der Geschwindigkeit des involvierten Pionier-Knotenstrahls Abbildung 6.14: Steigung einer Kante festlegen. Als Beispiel sei vW ein mit der Wellenfront. Geschwindigkeit g auf dem Segment eC in negativer x-Richtung wandernder Knotenstrahl. So ergibt sich wie in Abbildung 6.14 dargestellt für die Steigung α der inzidenten Kante eW : α = arctan(1/g). Weiterhin gilt für die translationale Geschwindigkeit gtrans von eW mit Hilfe einiger Trigonometrie (siehe zum Beispiel Bronstein u. a. (2001)): s r 12 · g 2 1 gtrans = =g 2 2 1 +g 1 + g2 eW Um das dynamische Verhalten einer Kante während der Wellenfrontausdehnung zu untersuchen, ist es notwendig nicht nur die initialen Endpunkte der Kante und deren Lage, sondern auch die Richtungen der Knotenstrahlen beider Endpunkte zu betrachten. Aus Beobachtung 6.1 ergibt sich direkt die folgende Beobachtung: Beobachtung 6.5 Die Anzahl der verschiedenen Ausbreitungsrichtungen von Kanten ist konstant. 58 Elemente der Wellenfront Sowohl die Steigung, die translationale Geschwindigkeit als auch die Ausbreitungsrichtung von Kanten der Wellenfront werden durch die inzidenten Knotenstrahlen festgelegt. Für eine Kante der Wellenfront ergeben sich also die folgenden Parameter: • Die Koordinaten der Endknoten (die anfangs möglicherweise identisch sind) • Die Klasse der Knotenstrahlen, die zu den Endknoten gehören Die Klassifizierung der Flächen, welche von den Kanten der Wellenfront überstrichen und beschrieben werden, ist der Schlüssel zur effektiven Vorhersage von Ereignissen in den Datenstrukturen der sublokalen Prognosen, und wird im folgenden Abschnitt vorgenommen. 6.4.2 Streifen Durch die Bewegungen der Kanten im Rahmen der Wellenfrontausdehnung zeichnet eine Kante während ihrer Lebenszeit eine Fläche aus. Definition 6.6 Der Streifen einer Kante ist die Fläche, welche die Kante im Zuge der Wellenfrontausdehnung während ihrer Lebenszeit auszeichnet. Der Begriff der Lebenszeit eines Streifens wird analog zu der auszeichnenden Kante definiert. Man beachte, dass während der Lebenszeit eines Streifens nicht notwendigerweise bekannt ist, wann, wie und ob dieser Streifen jemals beschränkt wird. Erst bei einem für diesen Streifen global vorhergesagten Ereignis ist bekannt, wie dieser Streifen abgeschlossen wird. Solange ein Streifen nicht in ein zukünftiges Ereignis involviert ist, wird somit angenommen, dass er sich weiter ausbreitet. Für die Vorhersage von Ereignissen werden somit potentiell wesentlich größere Streifen verwendet, als zu späteren Zeitpunkten überhaupt vorhanden. Dieser Sachverhalt führt uns erneut zum Konzept der virtuellen Ereignisse (siehe Abschnitt 3.3.4), welches in Abschnitt 6.5.1 untersucht wird. Abbildung 6.15 zeigt eine Wellenfrontausdehnung, in der bereits 14 Streifen auftreten, deren Lebenszeit zum Teil schon beendet sind. Da sich die inzidenten Knoten einer Kante während der Wellenfrontausdehnung auf Strahlen bewegen, und die Lebenszeit einer Kante mit einem Ereignis endet, welches die Kante selbst oder ihre Endknoten betrifft, kann ein Streifen höchstens 4 Seiten haben. Ab Ende seiner Lebenszeit nimmt ein Streifen nicht mehr an der Wellenfrontausdehnung teil und verändert sich somit nicht mehr weiter. Dies bedeutet, dass jeder Streifen am Ende seiner Lebenszeit zu einer Region der Quickest-PathMap beiträgt. Zum Zeitpunkt der Entstehung einer Kante wird festgestellt, wo sie entstanden ist. Dies ist zunächst entweder ein Punkt oder eine Kante von KV . Im Falle eines Punkts wird er als Ort der Entstehung dieser Kante abgespeichert und bei Ablauf der Lebenszeit der Kante dem ausgezeichneten Streifen als definierendes Objekt (siehe Abschnitt 3.5) zugewiesen und gespeichert. In Abbildung 6.15 entstehen die Streifen 5, 8, 9, 12, 13, 14 an einer Kante. Dies bedeutet, dass der entstehende Streifen die zu dieser Kante inzidente Region von 6.4 Kanten und Streifen 59 12 8 11 eC7 14 10 9 6 1 2 13 5 ω 3 4 Abbildung 6.15: Streifen von KV . VC (S) erweitert. Bei Ablauf der Lebenszeit dieses Streifens wird er somit der adjazenten Region hinzugefügt, und erhält dadurch implizit dasselbe definierende Objekt. Abbildung 6.15 zeigt, wie die Streifen 1, 5, 8 und 13 gemeinsam eine Region (weiß begrenzt) bilden, welche durch den Streifen 1 erzeugt wurde und durch die restlichen drei erweitert wurde. Analog zum definierenden Objekt einer Region r wird der Winkel ϕ, den die Kante, welche r auszeichnet, mit der x-Achse einschließt, für die Region r gespeichert. In Kapitel 9 werden wir darlegen, wie wir Anfragen an die Quickest-PathMap beantworten, indem wir mit Hilfe der definierenden Objekte und der gespeicherten Winkel die Ausdehnung der Wellenfront zurückverfolgen, um einen schnellsten Pfad nach S zu finden. Mit dem Ziel durch speziell abgestimmte Datenstrukturen die Laufzeit der Konstruktion der Quickest-Path-Map zu optimieren, gilt es nun zu untersuchen, wie ein Streifen aussehen kann. Die vorangegangenen Kapitel lassen schon erwarten, dass auch für Streifen eine Klassifizierung möglich ist. Ebenso wie bei der Definition ähnlicher Knotenstrahlen aus Abschnitt 6.2 wird zu diesem Zweck definiert, wann sich Streifen ähnlich sind. Definition 6.7 Zwei Streifen s1 und s2 werden als ähnlich bezeichnet wenn Folgendes gilt: • Es existiert eine paarweise Zuordnung zwischen den Seiten von s1 und s2 , so dass die Seiten eines Paares dieselbe Richtung haben und entweder beide beschränkt, einseitig unbeschränkt oder unbeschränkt sind. • Die Streifen s1 und s2 entstehen entweder beide an einem Punkt, oder jeweils an einer Kante der Wellenfront, mit gleicher Neigung. Zwei Streifen sind demnach ähnlich, wenn ihre Ecken die gleichen Winkel einschließen, und eine vergleichbare Form haben, während die Längen der Seiten völlig verschieden sein können. Abbildung 6.16 zeigt zwei Streifen derselben 60 Elemente der Wellenfront Klasse (s1 und s2 ) und zwei anderer Klassen (s3 und s4 ). Mit Hilfe der Definition ähnlicher Streifen folgt aus den Beobachtungen 6.4 und 6.5 direkt das folgende Lemma: Lemma 6.2 Die Anzahl σ der verschiedenen möglichen Ähnlichkeitsklassen von Streifen ist konstant. z s1 s4 s3 s2 y x Abbildung 6.16: Die Streifen s1 und s2 gehören derselben Klasse an, s3 und s4 hingegen anderen. Das Ziel ist es nun, für jede Ähnlichkeitsklasse von Streifen eine spezielle, effektive Datenstruktur für Minimierungsanfragen bereitzustellen. In jeder einzelnen dieser Datenstrukturen müssen dann entweder RayShooting-Anfragen oder Lowest-Intersection-Anfragen beantwortet werden. Da nun innerhalb jeder Datenstruktur alle Streifen ähnlich sind, ist es möglich eine Minimierungsanfrage mit Hilfe einer geometrischen Transformation, welche den Ähnlichkeitsklassen der Knotenstrahlen und Streifen angepasst ist, durch eine orthogonale Bereichsanfrage zu ersetzen. Eine solche Anfrage kann dann in polylogarithmischer Laufzeit beantwortet werden. Die oben angesprochene Transformation wird in Kapitel 7 beschrieben. In Kapitel 8 werden die orthogonalen Bereichsanfragen beschrieben, welche als Ergebnis der Klassifizierung der Streifen und der Transformation die Minimierungsanfragen ersetzen. Da die Formen der verschiedenen auftretenden Streifen jedoch vielfältig sind, zeigt der folgende Abschnitt zunächst auf, welche generellen Typen von Streifen auftreten, da diese Typen sowohl durch die Transformation als auch durch die Anfragen unterschiedlich gehandhabt werden müssen. Im Rest dieses Kapitels wird anschließend gezeigt, dass mit Hilfe der Streifen alle auftretenden Ereignisse vorhergesagt werden, und dass darüber hinaus ein impliziter Mechanismus verhindert, dass es durch die Streifen zu verfrühten oder falschen Ereignisprognosen kommt. 6.4.3 Streifentypen Für die algorithmische Handhabung werden vier Typen von Streifen unterschieden. Sie unterscheiden sich in ihrer Form und ihrer Entstehungsgeschichte während der Wellenfrontausdehnung. Da Streifen Teile von Regionen erzeugen, wird im Folgenden der Begriff eines definierenden Objekts auch im Zusammenhang mit Streifen verwendet. Das definierende Objekt Def(s) eines Streifens s ist somit die Menge Def(s) = {p ∈ s | dC (S, p) ≤ dC (S, p0 ) für alle p0 ∈ s}. Das definierende Objekt einer Region von VC (S) stimmt in der Regel mit dem definierenden Objekt eines ihrer Streifen überein. Dies ist zum Beispiel in Abbildung 6.15 für Streifen 1 und die weiß gestrichelte Region der Fall. Zum Zeitpunkt 6.4 Kanten und Streifen 61 e1C Typ 1 Typ 2 Typ 3 Typ 4 e2C ω s3 s2 s1 Abbildung 6.17: Die vier verschiedenen Streifentypen, jeweils in anderen Grautönen. Typ 3 wird ersetzt durch Typ 1 und 2. seiner Entstehung ist ein Streifen nicht größer als sein definierendes Objekt. Die Streifen lassen sich mit Hilfe von zwei Merkmalen klassifizieren: zum einen ist dies ihr definierendes Objekt, und zum anderen ist es die relative Lage der begrenzenden Knotenstrahlen. Wie in Abschnitt 3.5 bereits beschrieben, besitzt jede Region von VC (S) ein definierendes Objekt. Da ein Streifen das Produkt einer im Zuge der Wellenfrontausdehnung wandernden Kante ist, besitzt jeder Streifen während seiner Lebenszeit stets zwei Knotenstrahlen als Seiten. In Tabelle 6.1 werden die vier verschiedenen Streifentypen und ihre Merkmale aufgelistet. Eine wesentliche Rolle spielen dabei die beiden Knotenstrahlen eines Streifens. Diese Unterscheidung ist in erster Linie für die Weiterverarbeitung der Streifen relevant, welche in Kapitel 7 vorgestellt wird. Abbildung 6.17 zeigt die vier verschiedenen Typen von Streifen auf, wobei Streifentyp 1 2 3 4 Definierendes Objekt Knoten Kante Kante Kante Richtung der Strahlen divergent parallel divergent konvergent Tabelle 6.1: Die verschiedenen Streifentypen. jeder Streifentyp mit einem anderen Grauton unterlegt ist. Streifen vom Typ 3 werden sofort bei der Entstehung durch einen Typ-1-Streifen und einen Typ2-Streifen ersetzt und werden bei der Simulation der Wellenfrontausdehnung nicht weiter behandelt, da sie eine größere Komplexität besitzen als die restlichen Streifen. Jedoch rechtfertigt die besondere Entstehungsgeschichte eines solchen Streifens seine gesonderte Auflistung an dieser Stelle. In Abbildung 6.17 wird Streifen s3 durch die beiden Streifen s1 und s2 ersetzt. Bei der Speicherung abgehandelter Streifen in der Quickest-Path-Map werden substituierte Typ-3Streifen wieder zusammengefügt und als solche der Region angefügt, welche inzident ist zu der Kante, an der der Typ-3-Streifen entstanden ist. Ebenso werden alle Streifen der Typen 2 und 4 des Konstruktionsdiagramms der Region von VC (S) hinzugefügt, welche sie erweitern. Auch in Abbildung 6.17 sind also Regionen von VC (S) durch Knotenstrahlen begrenzt, nicht etwa durch Konstruktionskanten. Ein Streifen vom Typ 4 unterscheidet sich insofern von den 62 Elemente der Wellenfront anderen Typen, als dass er bereits bei der Entstehung beschränkt ist und drei nicht parallele Kanten besitzt, während die restlichen Streifentypen zunächst eine unbeschränkte Fläche abdecken und lediglich zwei nicht parallele Kanten besitzen. Diese Tatsache erfordert in den Kapiteln 7 und 8 eine besondere Behandlung von Typ-4-Streifen. 6.5 Die Interaktionen der Streifen In den vorangegangenen Abschnitten haben wir untersucht, welche Formen Streifen annehmen können. Die Einordnung der Streifen in Ähnlichkeitsklassen erlaubt weiterhin eine effektive, lokale Vorhersage von Ereignissen. Bevor ein Ereignis durch die globale Prognose zeitlich korrekt in den Prozess der Konstruktion von VC (S) eingefügt werden kann, stellt sich jedoch die Frage, ob ein Ereignis, welches anhand eines Streifens vorausgesagt wird, möglicherweise von virtueller Natur ist. Wie in Abschnitt 3.3.4 argumentiert, hätte eine explizite Behandlung solcher Ereignisse eine mindestens quadratische Laufzeit zur Folge. Wie das Problem der virtuellen Ereignisse implizit gelöst wird, wird im folgenden Abschnitt geschildert. Andererseits zeigen wir in Abschnitt 6.5.2, dass während der Wellenfrontexpansion kein Ereignis stattfinden kann, welches nicht von mindestens einer Minimierungsanfrage vorhergesagt wird. Den Abschluss dieses Kapitels bildet dann Abschnitt 6.6, wo zusammenfassend dargelegt wird, wie der Konstruktionsalgorithmus für VC (S) die in diesem Kapitel entwickelten Ergebnisse nutzt, um eine subquadratische Laufzeit zu erzielen. 6.5.1 Bescheidene Streifen Die in Abschnitt 6.4.3 beschriebenen, vorausberechneten Streifen decken bei der Vorhersage von Ereignissen in den meisten Fällen eine Fläche ab, welche größer als die endgültige Fläche ihrer Region sein wird. In diesem Abschnitt wird die Frage geklärt, ob die Menge virtueller Ereignisse, welche die zunächst unbeschränkten oder abgeschätzten (bei Typ 4) Streifen bei den lokalen Prognosen hervorrufen, die Laufzeit des Konstruktionsalgorithmus durch globale Vorhersagen negativ beeinflussen. Die Antwort sei schon einmal vorweggenommen, sie lautet nein. Im folgenden Beweis wird klar, dass dies an der sorgfältigen Konstruktion der Streifen liegt, welche lediglich einen Bereich abdecken, den sie bei ungehinderter Ausbreitung tatsächlich erreichen würden. In folgendem Lemma sei diese Beobachtung festgehalten. Lemma 6.3 Die Menge der globalen Ereignisprognosen ist linear in der Komplexität von VC (S). Zunächst sei jedoch noch einmal dargelegt, was genau zu beweisen ist. Dazu führen wir einen neuen Begriff ein. In jedem Fall, da ein Streifen an einem Ereignis teilnimmt, wird er abgeschlossen und wird dann entweder einer bestehenden Region von VC (S) hinzugefügt oder erzeugt eine neue. Er ist somit beschränkt und nimmt an der weiteren Wellenfrontausdehnung nicht mehr teil. Einen solchen Streifen nennen wir im Folgenden abgehandelt. Dies bedeutet, dass nur ein Streifen, während er noch nicht abgehandelt ist, potentiell zur Prognose von 6.5 Die Interaktionen der Streifen 63 virtuellen Ereignissen führt. Nach Abschnitt 5.3 haben virtuelle Ereignisse keinen negativen Einfluss auf die Laufzeit, solange sie nicht global vorhergesagt werden, sondern nur von lokalen oder sublokalen Minimierungsanfragen an die globale Vorhersage weitergegeben werden. Es bleibt also zu zeigen, dass ein jedes virtuelles Ereignis, das einen noch nicht abgehandelten Streifen als Teilnehmer hat, niemals global vorhergesagt werden darf. Beweis. Da Streifen vom Typ 3 durch Paare von Streifen von Typ 1 und 2 ersetzt werden, wird Typ 3 im Einzelnen nicht weiter untersucht. Sei nun s ein noch nicht abgehandelter Streifen, und e ein Ereignis welches s involviert. Ist e nicht virtuell, so ist nichts zu beweisen. Sei e also ein virtuelles Ereignis. Angenommen dieses Ereignis wird nun von der globalen Vorhersage als das nächste Ereignis berechnet. Dies bedeutet, dass kein anderes Ereignis mehr zuvor eintritt, insbesondere keines, welches s involviert. Da ein Streifen aber nach Konstruktion lediglich den Bereich abdeckt, welchen er bei Ausbleiben von Ereignissen tatsächlich ausfüllen wird, bedeutet das Ausbleiben von Ereignissen vor dem Eintreten von e, dass der Streifen s das Ereignis e sowohl zeitlich als auch räumlich tatsächlich erreicht. Folglich ist e kein virtuelles Ereignis, was ein Widerspruch zur Annahme ist. Somit gilt, dass die während des Prozesses der Wellenfrontausdehnung genutzten Streifen keine virtuellen Ereignisse erzeugen, welche global vorhergesagt werden. Nach Abschnitt 5.3 ergibt sich also durch virtuelle Ereignisse keine asymptotische Vergrößerung der Menge von global prognostizierten Ereignissen. Nun ist gezeigt, dass die Auswahl der global prognostizierten Ereignisse die Komplexität von VC (S) nicht überschreitet, also keine zusätzliche Laufzeit benötigt wird, um virtuelle Ereignisse noch nach der globalen Prognose als virtuell zu erkennen. Mit anderen Worten ist gezeigt, dass durch die globale Vorhersage nicht zuviel vorhergesagt wird; zu zeigen bleibt nun im Gegenzug, dass auch nicht zu wenige Ereignisse vorhergesagt werden. Diese Frage wird im nächsten Abschnitt behandelt. 6.5.2 Für jedes Ereignis ein Streifen Bisher haben wir dargelegt, welche Rolle die Streifen bei der Wellenfrontausdehnung spielen, und gezeigt, dass die Menge der Ereignisse, in welche Streifen involviert sind, höchstens linear in der Komplexität von VC (S) ist. In diesem Abschnitt werden wir zeigen, dass tatsächlich mindestens all diejenigen Ereignisse, welche bei der Wellenfrontausdehnung auftreten (und somit zur Komplexität von VC (S) beitragen), durch eine globale Prognose für ein Ereignis mit einem Streifen vorhergesagt werden. Als Resultat ergibt sich dann aus diesem Abschnitt und aus Abschnitt 6.5.1, dass durch die diskretisierte Prognose von Ereignissen mit Hilfe der Streifen einerseits alle bei der Wellenfrontausdehnung auftretenden Ereignisse behandelt werden, andererseits aber auch nicht mehr Ereignisse als notwendig. Lemma 6.4 Für jedes Ereignis, welches während der Wellenfrontausdehnung eintritt, wird ein Ereignis mit einem Streifen global vorhergesagt. 64 Elemente der Wellenfront Beweis. Angenommen e sei ein Ereignis, welches bei der Wellenfrontausdehnung auftritt. Da jeder Punkt der Wellenfront Element mindestens eines Streifens ist, involviert jedes Ereignis der Wellenfrontausdehnung mindestens einen Streifen. Im Konstruktionsalgorithmus deckt aber ein jeder Streifen ab dem Zeitpunkt seiner Entstehung den maximalen Bereich ab, den er potentiell (beim Ausbleiben weiterer Ereignisse) erreichen kann. Somit wird jedes Ereignis von mindestens einer Minimierungsanfrage erkannt. Nach Satz 5.1 wird ein Ereignis, welches nicht virtuell ist, von der globalen Prognose zum korrekten Zeitpunkt schließlich vorhergesagt. 6.6 Anzahl der Datenstrukturen In Lemma 6.4 wurde gezeigt, dass ein jedes Ereignis der Wellenfrontausdehnung als ein Ereignis mit einem Streifen entdeckt wird. Wir haben in Abschnitt 5.3 dargelegt, welche Minimierungsanfragen notwendig sind, um ein Ereignis zu entdecken. Wenden wir nun die Ergebnisse aus Kapitel 4 an, in dem wir die Wellenfront und das Netzwerk um eine dritte Dimension erweitert haben, so reduziert sich die globale Prognose darauf, geeignete Datenstrukturen für RayShooting-Anfragen und Lowest-Intersection-Anfragen jeweils zwischen Streifen und Knotenstrahlen im Raum bereitzustellen, und diese Anfragen durchzuführen. Die Technik von Eppstein und Erickson (1999), welche wir in Kapitel 5 besprochen haben, liefert dann jederzeit das nächste eintretende Ereignis. Betroffene Minimierungs-Datenstrukturen werden anschließend aktualisiert, und an der Wellenfront die dem Ereignis entsprechenden Änderungen vorgenommen. In den vergangenen Abschnitten haben wir folgendes gezeigt: 1. Die Anzahl der Ähnlichkeitsklassen von Strahlen ist konstant; siehe Lemma 6.1 in Abschnitt 6.3. 2. Die Anzahl der Ähnlichkeitsklassen von Streifen ist konstant; siehe Lemma 6.2 in Abschnitt 6.4.2. Dies bedeutet, dass es möglich ist, mit einer konstanten Anzahl von Datenstrukturen für jede Kombination aus einer Klasse von Streifen und einer Klasse von Knotenstrahlen eine spezielle Datenstruktur zur Verfügung zu stellen. Im Folgenden sagen wir, dass eine solche Datenstruktur die entsprechenden Klassen von Streifen und Knotenstrahlen bedient; diese müsste dann, nach Argumenten der beiden oben zitierten Lemmata, lediglich mit einer Richtung und einer Geschwindigkeit von Knotenstrahlen arbeiten, sowie mit nur einer Lage und Form von Streifen im Raum. Das folgende Lemma fasst dies als ein wichtiges Ergebnis dieses Kapitels zusammen: Lemma 6.5 Jedes Ereignis lässt sich, als Kollision eines Streifens mit einem Strahl, einer von konstant vielen angepassten Datenstrukturen zuordnen. Eppstein und Erickson (1999) nutzen in ihrem Ansatz zur Konstruktion eines Straight-Skeletons eine Technik von Agarwal und Matoušek (1994) für 6.6 Anzahl der Datenstrukturen 65 Ray-Shooting-Datenstrukturen und stellen eine eigene Technik für Lowest-Intersection-Datenstrukturen vor. Beide Datenstrukturen unterstützen Einfüge-, Lösch- und Anfrageoperationen in einer asymptotischen Laufzeit von O(n3/5 ) bei einem Speicherbedarf von O(n8/5 ). Das folgende Kapitel beschäftigt sich damit, wie das Datenmaterial der Wellenfront, bestehend aus Knotenstrahlen und Streifen, mit Hilfe angepasster Datenstrukturen auf eine Art und Weise zur Ereignisprognose genutzt werden kann, welche eine Laufzeit von nur O(polylog(c + n)) pro Minimierungsanfrage benötigt, und einen Speicherbedarf von O((c+n)polylog(c+n)). Durch die sorgfältige Vorbereitung der Streifen und die Einteilung der Streifen und Knotenstrahlen in Ähnlichkeitsklassen ist es uns möglich, Minimierungsanfragen auf orthogonale Bereichsanfragen zu vereinfachen. Dadurch erreichen wir eine nur polylogarithmische Laufzeit pro Anfrage. Im folgenden Kapitel beschreiben wir diese Vereinfachung des Datenmaterials. Kapitel 7 Eine Vereinfachung der Daten Mit dem Ziel die asymptotische Laufzeit des Konstruktionsalgorithmus für VC (S) zu verbessern, untersuchen wir in diesem Kapitel eine Technik zur Beschleunigung der lokalen Minimierungsanfragen. Auf die Strahlen und die Streifen der Wellenfront wird eine geometrische Transformation f angewendet, welche es erlaubt, innerhalb einer Minimierungsanfrage lediglich orthogonale Strukturen zu untersuchen. Diese Transformation f besteht aus einer Verkettung von mehreren Scherungen im Raum. Da f für jedes Objekt in konstanter Zeit durchgeführt werden kann, entsteht keine Erhöhung der asymptotischen Laufzeit. Die verketteten Scherungen bringen die Objekte einer Datenstruktur in eine relative Lage im Raum, welche es möglich macht Minimierungsanfragen durch schnelle orthogonale Bereichsanfragen zu beantworten. Die Transformation f kann auch als eine weitere Koordinatentransformation angesehen werden. Die Transformation f gestaltet sich für beide Arten von Minimierungsanfragen gleich, daher wird erst im folgenden Kapitel auf den Ablauf dieser lokalen Anfragen eingegangen. In Lemma 6.5 haben wir gezeigt, dass es möglich ist jede Kombination aus einem Knotenstrahl und einem Streifen einer von konstant vielen Datenstrukturen zuzuordnen. Dabei ist jeweils die Ähnlichkeitsklasse der beiden Objekte für die Wahl der Datenstruktur ausschlaggebend. Für jede solche Kombination werden für die Minimierungsanfragen zwei Datenstrukturen bereitgestellt, eine für Ray-Shooting-Anfragen und eine für Lowest-IntersectionAnfragen. Ist eine Datenstruktur D für die Kombination der Streifenklasse KS und der Klasse KW von Knotenstrahlen vorgesehen, so sagen wir D bedient KS und KW . Ein jedes Objekt, welches nun im Zuge der Wellenfront entsteht, wird entsprechend seiner Ähnlichkeitsklasse in alle Datenstrukturen eingefügt, welche diese Klasse bedienen. Für jede dieser Datenstrukturen ist die Transformation f speziell angepasst, so dass jedes Objekt, bevor es eingefügt wird, durch f verändert wird. Der folgende Abschnitt beschreibt die Transformation f . In Abschnitt 7.1.6 betrachten und lösen wir ein Problem, das durch die Dynamik der in statischen Datenstrukturen gespeicherten Knotenstrahlen entsteht. In den letzten beiden 68 Eine Vereinfachung der Daten Abschnitten dieses Kapitels beweisen wir, dass unsere dargelegte Vereinfachung der Wellenfrontobjekte korrekt ist, das heißt dass für einen Knotenstrahl w und einen Streifen s folgende Invariante gilt: w trifft s während der Wellenfrontausdehnung zum Zeitpunkt t genau dann, wenn f (w) f (s) zum Zeitpunkt t trifft. 7.1 Orthogonalisierende Scherungen In diesem Abschnitt führen wir die Transformation f an einem Streifen vom Typ 2 durch. Wie in Abschnitt 6.4.3 dargelegt, besitzen die verschiedenen Streifentypen unterschiedliche Geometrien, so dass die Scherung für jeden der drei relevanten Typen angepasst werden muss. In Abschnitt 7.3 wird kurz dargelegt, welche Anpassungen dabei notwendig sind, da das generelle Verfahren jedoch nach der folgenden beispielhaften Durchführung offensichtlich wird, verzichten wir auf eine detaillierte Behandlung der Transformationen für die restlichen Streifentypen. Die resultierenden orthogonalen Anfragen werden anschließend in Kapitel 8 im Detail beschrieben. Die Transformation f verändert das Datenmaterial, bestehend aus den Streifen und Strahlen, wie in Kapitel 6 vorgestellt, mit dem Ziel, Interaktionen einfacher vorhersagen und zeitlich vergleichen zu können. Dabei ist es notwendig, dass die Transformation bezüglich der Ergebnisse und der Zeitpunkte der Kollisionen invariant ist, so dass VC (S) nicht verfälscht wird. Die Invarianz bezüglich der Ergebnisse und deren Zeitpunkte ist, wie in Abschnitt 7.2 gezeigt wird, gegeben. Sei nun s ein Streifen der Ähnlichkeitsklasse KS und von Typ 2. Weiterhin sei w ein Knotenstrahl der Ähnlichkeitsklasse KW . Der Knotenstrahl w besteht aus dem Fußpunkt ẇ und dem Vektor w. ~ Abbildung 7.1 stellt dar, wie der ~ w w Streifen s (Typ 2) und der Knos tenstrahl w im Raum liegen. Die ẇ beiden Datenstrukturen, in welche diese beiden Objekte eingey fügt werden, zeichnen sich durch ~eSeite die Merkmale der beiden Ähnlichl keitsklassen aus, welche sie be~eBoden r x dienen. Nach Definition 6.5 zeichnet eine Klasse von KnotenstrahAbbildung 7.1: Ein Streifen und ein Strahl len die Richtung und Geschwinim Raum. digkeit der Knotenstrahlen aus. Nach Definition 6.7 und mit Hilfe von Tabelle 6.1 wird eine Klasse von Streifen durch den Typ, den Vektor der Seiten und den Vektor des Bodens der Streifen definiert (bei Streifen vom Typ 1 sind Boden und Seite austauschbar). Betrachtet man Streifen vom Typ 2, so ist also eine gegebene Datenstruktur D für die Klassen KW und KS durch die folgenden Daten spezifiziert: z • Der normierte Vektor ~eBoden /||~eBoden || zwischen den beiden Bodenpunkten 7.1 Orthogonalisierende Scherungen 69 l und r der Streifen, mit (xl < xr )∨((xl = xr )∧(yl < yr )), und l+~eBoden = r. • Der normierte Vektor ~eSeite /||~eSeite || der Seiten der Streifen, ausgehend von l beziehungsweise r. • Der (nicht normierte) Vektor w ~ der Anfragestrahlen. Ein Streifen s dieser Ähnlichkeitsklasse wird definiert durch die x-, y- und zKoordinaten der beiden Eckpunkte l und r. Dabei sei angemerkt, dass weniger Daten ausreichen um s eindeutig zu beschreiben, da die Vektoren ~eBoden und ~eSeite bereits implizit durch die Ähnlichkeitsklasse gegeben sind. Für einen Knotenstrahl w genügt es, seinen Entstehungszeitpunkt und die x-, y- und zKoordinaten xẇ , yẇ , zẇ des Fußpunktes ẇ zu speichern. Ziel der Transformation f ist es, diese speziellen Datenstrukturen durch lineare Transformationen zu orthogonalisieren, damit Bereichsanfragen die gewöhnlichen Ray-Shooting-Anfragen und die Lowest-Intersection-Anfragen ersetzen können. Zu diesem Zweck werden Streifen derart transformiert, dass sie parallel zur x-y-Ebene liegen, und ihre Seiten parallel zur x- beziehungsweise zur y-Achse sind, während Strahlen in Richtung der positiven z-Achse zeigen. In Worten soll f dabei stets folgende Invariante garantieren: Strahl w trifft den Streifen s zur Zeit t0 ⇔ der Strahl f (w) trifft den Streifen f (s) zur Zeit t0 . Die Funktion f besteht aus vier Teilen f 1 , f 2 , f 3 und f 4 , so dass gilt: f = f 4 ◦ f 3 ◦ f 2 ◦ f 1 . Die folgenden Abschnitte beschreiben die einzelnen Stufen von f . Dabei wird der Punkt q = (xq , yq , zq ) ∈ R3 als Beispiel bis zum Ende durchgeschleift. Relevante Punkte wie l, r, ẇ und so weiter werden somit durch q vertreten. Es gelten die Bezeichnungen ~eBoden = (xBoden , yBoden , zBoden ) und ~eSeite = (xSeite , ySeite , zSeite ). 7.1.1 Ausrichtung des Koordinatensystems Vor der Anwendung von f wird das Koordinatensystem derart gedreht, dass der Vektor w ~ der Knotenstrahlen in Richtung der γ3 z positiven z-Achse liegt. Eine α3 x Drehung des Koordinatensystems β3 kann durch Anwendung einer γ1 Drehungsmatrix M auf jedes Obβ1 jekt, das in die Datenstruktur γ2 α1 D aufgenommen werden soll, ery reicht werden. Sind x, y, z die neuα2 en Koordinatenachsen, so werden β2 für die Drehung die Richtungskox sinusse dieser Vektoren benötigt, das heißt die Kosinusse der Winy kel zwischen den neuen und den alten, jeweils positiv orientierten Abbildung 7.2: Winkeldefinition bei DreKoordinatenachsen. Dazu werden hung des Koordinatensystems. die Winkel zwischen den Achsen z 70 Eine Vereinfachung der Daten wie in Abbildung 7.2 definiert. Es gelten für die Richtungskosinusse die folgenden Bezeichnungen, welche in Tabelle 7.1 zur Verdeutlichung zusammengefasst sind. ζ1 = cos α1 η1 = cos β1 ϑ1 = cos γ1 ζ2 = cos α2 η2 = cos β2 ϑ2 = cos γ2 ζ3 = cos α3 η3 = cos β3 ϑ3 = cos γ3 Die Drehungsmatrix M , welche die Koordinaten aller Objekte derart transforIm Bezug auf die alten Achsen x y z Richtungskosinus der neuen Achsen x y z ζ1 ζ2 ζ3 η1 η2 η3 ϑ1 ϑ2 ϑ3 Tabelle 7.1: Bezeichnungen der Richtungskosinusse bei Koordinatentransformation durch Drehung. miert, dass sie dem neuen Koordinatensystem angepasst sind, hat im Allgemeinen folgende Gestalt: ζ1 ζ2 ζ3 M = η1 η2 η3 ϑ1 ϑ2 ϑ3 In unserem Fall ist es wie oben angesprochen ausreichend, die Drehungsmatrix M derart zu gestalten, dass Knotenstrahlen in Richtung der positiven z-Achse zeigen. Sei der Vektor w ~ der Knotenstrahlen, welche die Datenstruktur D bedient, wie folgt gegeben: w ~ = (xw~ , yw~ , zw~ ). Der Winkel ϕ zwischen zwei Vektoren ~a und ~b im Raum ist gegeben durch cos ϕ = ~a~b |~a||~b| Somit berechnen sich die Winkel α3 , β3 und γ3 der neuen z-Achse z mit den alten Koordinatenachsen wie folgt: xw~ 1 0 0 yw~ zw~ xw~ cos α3 = = = ζ3 |w| ~ |w| ~ xw~ 0 1 0 yw~ zw~ yw~ cos β3 = = = η3 |w| ~ |w| ~ xw~ 0 0 1 yw~ zw~ zw~ cos γ3 = = = ϑ3 |w| ~ |w| ~ 7.1 Orthogonalisierende Scherungen 71 Mit Hilfe der neuen z-Achse z in Richtung w ~ ist es weiterhin möglich die Ebene Ex,y zu definieren, in der die beiden neuen Koordinatenachsen x und y liegen, da dies die Ebene ist, welche orthogonal zu w ~ liegt und den Ursprung enthält: Ex,y = {~ p | w~ ~ p = 0} Alle Vektoren in dieser x-y-Ebene liegen orthogonal zu z, zudem wird gefordert, dass weder ~eSeite noch ~eBoden parallel zur x- oder y-Achse liegen. Dies ist aus technischen Gründen notwendig, um degenerierte Situationen während der Durchführung der Transformation f zu vermeiden. Wir wählen also die Richtung x beliebig aber mit den Bedingungen x ⊥ w, ~ x ∦ ~eSeite und x ∦ ~eBoden . Die Richtung der neuen y-Achse y wird anschließend durch die Orthogonalitätsbedingungen x ⊥ y und z ⊥ y, und durch das rechts- beziehungsweise linkshändige Koordinatensystems eindeutig festgelegt. Rechtshändige beziehungsweise linkshändige Koordinatensysteme werden durch die gegenseitige Aufeinanderfolge der positiven Koordinatenachsen bei der Drehung um den Ursprung im Gegenuhrzeigersinn beziehungsweise im Uhrzeigersinn definiert (siehe zum Beispiel Bronstein u. a. (2001)). Mit Hilfe der neuen Koordinatenrichtungen lassen sich die übrigen Richtungskosinusse in der Drehungsmatrix M bestimmen. Eine detaillierte Beschreibung einer Drehung des Koordinatensystems im Raum bieten zum Beispiel Bronstein s u. a. (2001) oder Wille (1997). Es sei angemerkt, dass der Streifen s nicht parallel zur r neuen z-Achse und somit zu ~eBoden ~eSeite w ~ sein kann, denn dann wäl w ~ re w ~ linear abhängig von den w beiden Vektoren ~eBoden und y ~eSeite . Ist dies aber der Fall, ẇ so kann niemals eine Kollision zwischen dem Knotenstrahl w x und dem Streifen s auftreten. Eine Datenstruktur für eine Abbildung 7.3: Ein Streifen und ein Strahl solche Kombination aus Ähnnach der Ausrichtung des Strahls in positiver lichkeitsklassen ist also sinnz-Richtung. los und wird nicht erstellt. Abbildung 7.3 zeigt die Situation des Streifens s und des Knotenstrahls w nach der Ausrichtung. z 7.1.2 Ausrichtung der Streifenseiten orthogonal zur xAchse In diesem Abschnitt wird die erste Scherung der Transformation f , genannt f 1 dargelegt. Es genügt bei dieser Scherung die Projektion der Streifen und der Fußpunkte auf die x-y-Ebene zu betrachten, wie in Abbildung 7.4 dargestellt. Ziel von f 1 ist es, den Vektor ~eSeite zur x-Achse zu orthogonalisieren. Abbildung 7.4 zeigt die Ausgangssituation in schwarz und die Situation nach Anwendung von 72 Eine Vereinfachung der Daten z r1 1 ~eBoden r1 r ~eBoden ẇ y ~e1Seite ẇ1 l1 ~eSeite x ~e1Seite ~e1Boden l Abbildung 7.4: Die Auswirkungen von f 1 in der x-y-Ebene. l1 w ~1 = w ~ w1 y ẇ1 x Abbildung 7.5: Das Ergebnis von f 1 im Raum. f 1 in grau, jeweils projiziert auf die x-y-Ebene. In Abbildung 7.5 ist das Ergebnis der ersten Scherung im Raum zu sehen. Man betrachte folgende Funktion: xSeite 3 1 ∀p = (xp , yp , zp ) ∈ R : f (p) = xp − yp · , y p , zp ySeite Dies verändert den Beispielpunkt q sowie ~eSeite und ~eBoden wie folgt (man beachte das sich beispielsweise ẇ analog zu q entwickelt): xSeite , y q , zq f 1 (q) = q 1 = (x1q , yq1 , zq1 ) = xq − yq · ySeite 1 1 f 1 (~eBoden ) = ~e1Boden = (x1Boden , yBoden , zBoden ) x Seite , yBoden , zBoden = r1 − l1 = xBoden − yBoden · ySeite 1 1 f 1 (~eSeite ) = ~e1Seite = (x1Seite , ySeite , zSeite ) = (0, ySeite , zSeite ) Nach Anwendung dieses ersten Teils f 1 sind die Streifenseiten parallel zur yz-Ebene. Abbildung 7.5 verdeutlicht wie der Streifen und der Fußpunkt des Knotenstrahls nach Durchführung der ersten Scherung im Raum liegen. Sei durch die beiden Punkte ẇ und ṡ eine Gerade % gegeben, welche parallel zur z-Achse verläuft. Ein Blick auf die Definition von f 1 zeigt uns, dass gilt: xẇ = xṡ ∧ yẇ = xṡ ⇔ xf 1 (ẇ) = xf 1 (ṡ) ∧ yf 1 (ẇ) = xf 1 (ṡ) (7.1) Somit ist das Bild f 1 (%) der Geraden % wieder eine Gerade, welche parallel zur z-Achse verläuft. Der inverse Schluss, dass jede vertikale Gerade im Bild von f 1 als Urbild eine vertikale Gerade hat, ist ebenfalls gültig. 7.1.3 Ausrichtung der Streifenböden orthogonal zur yAchse Es genügt auch in diesem Teil f 2 der Transformation f , die Projektion der Streifen und der Fußpunkte auf die x-y-Ebene zu betrachten. Ziel des zweiten Teiles 7.1 Orthogonalisierende Scherungen 73 z r 1 ~e2Boden ẇ2 ẇ1 ~e2Seite r2 w ~2 = w ~ y ~e1Boden ~e2Seite ~e1Seite l2 l2 r2 ~e2Boden w2 l1 y ẇ2 x x Abbildung 7.7: Das Ergebnis von f 2 im Raum. Abbildung 7.6: Die Auswirkungen von f 2 in der x-y-Ebene. ist es, den Vektor ~e1Boden zur y-Achse zu orthogonalisieren. Abbildung 7.6 zeigt die Transformation wieder projiziert auf die x-y-Ebene. In Abbildung 7.7 ist das Ergebnis der zweiten Scherung im Raum zu sehen. Man betrachte folgende Funktion: 1 yBoden 3 2 ∀p = (xp , yp , zp ) ∈ R : f (p) = xp , yp − xp · 1 , zp xBoden Dies verändert q 1 , ~e1Seite und ~e1Boden wie folgt: 2 1 2 f (q ) = q = (x2q , yq2 , zq2 ) x2q = xq − yq · = x1q , yq1 − x1q y1 · Boden , z1 x1Boden q xSeite ySeite xSeite yq2 = yq − xq − yq · ySeite · yBoden xBoden − yBoden · ! xSeite ySeite zq2 = zq 2 2 f 2 (~eBoden ) = ~e2Boden = (x2Boden , yBoden , zBoden ) xSeite = r2 − l2 = xBoden − yBoden · , 0, zBoden ySeite 2 2 f 2 (~eSeite ) = ~e2Seite = (x2Seite , ySeite , zSeite ) = (0, ySeite , zSeite ) Nach Durchführung dieses zweiten Teils f 2 sind die Streifenböden parallel zur xz-Ebene. Betrachten wir wieder die vertikale Gerade % durch die beiden Punkte ẇ und ṡ, so zeigt uns ein Blick auf die Definition von f 2 , dass gilt: xẇ = xṡ ∧ yẇ = xṡ ⇔ xf 2 (ẇ) = xf 2 (ṡ) ∧ yf 2 (ẇ) = xf 2 (ṡ) (7.2) Das Bild f 2 (%) der Geraden % ist also wieder eine Gerade, welche parallel zur z-Achse verläuft, der inverse Schluss ist ebenfalls gültig. 74 Eine Vereinfachung der Daten z r3 3 r r2 ~e3Seite ~e2Seite z ~e2Boden ~e3Boden 3 2 w ~ =w ~ l l3 w3 x Abbildung 7.8: Die Auswirkungen von f 3 in der x-z-Ebene. 7.1.4 y ẇ3 w ~2 2 ẇ3 ẇ l ~e3Boden 3 x Abbildung 7.9: Das Ergebnis von f 3 im Raum. Ausrichtung der Streifenböden parallel zur x-Achse In dieser dritten Scherung f 3 der Transformation f genügt es, die Projektion der Streifen und der Fußpunkte auf die x-z-Ebene zu betrachten. Ziel des dritten Teils ist es, den Vektor ~e2Boden zur x-Achse zu parallelisieren. Bislang genoss er noch eine Ausdehnung in z-Richtung. Abbildung 7.8 zeigt die Transformation projiziert auf die x-z-Ebene. In Abbildung 7.9 ist das Ergebnis der dritten Scherung im Raum zu sehen. Man betrachte folgende Funktion: 2 zBoden 3 3 ∀p = (xp , yp , zp ) ∈ R : f (p) = xp , yp , zp − xp · 2 xBoden Dies verändert q 2 , ~e2Seite und ~e2Boden wie folgt: 2 3 3 3 3 3 2 2 2 2 zBoden f (q) = q = (xq , yq , zq ) = xq , yq , zq − xq · 2 xBoden x Seite x3q = xq − yq · ySeite ! xSeite yBoden 3 yq = yq − xq − yq · · Seite ySeite xBoden − yBoden · xySeite ! xSeite zBoden 3 zq = zq − xq − yq · · Seite ySeite xBoden − yBoden · xySeite 3 3 f 3 (~eBoden ) = ~e3Boden = (x3Boden , yBoden , zBoden ) xSeite 3 3 = r − l = xBoden − yBoden · , 0, 0 ySeite 3 3 f 3 (~eSeite ) = ~e3Seite = (x3Seite , ySeite , zSeite ) = (0, ySeite , zSeite ) Nach Durchführung der Scherung f 3 sind die Streifenböden orthogonal zur yz-Ebene, und somit parallel zur x-Achse. Erneut gilt für die vertikale Gerade % durch die beiden Punkte ẇ und ṡ, nach Definition von f 3 : xẇ = xṡ ∧ yẇ = xṡ ⇔ xf 3 (ẇ) = xf 3 (ṡ) ∧ yf 3 (ẇ) = xf 3 (ṡ) (7.3) 7.1 Orthogonalisierende Scherungen 75 z r4 z ~e4Seite ~e3Boden ~e4Seite l4 l4 , r 4 l3 , r 3 w ~4 = w ~ w4 ~3 w ~4 w ẇ4 ẇ ~e4Boden ẇ y 3 y 4 x Abbildung 7.10: Die Auswirkungen Abbildung 7.11: Das Ergebnis von f 4 im von f 4 in der y-z-Ebene. Raum. Wieder ist also das Bild f 3 (%) der Geraden % eine vertikale Gerade und auch der inverse Schluss gültig. 7.1.5 Ausrichtung der Streifenkanten parallel zur y-Achse Es genügt in diesem Teil f 4 der Transformation f die Projektion der Streifen und der Fußpunkte auf die y-z-Ebene zu betrachten. Ziel der vierten Scherung ist es, den Vektor ~e3Seite zur y-Achse zu parallelisieren, bislang genoss er noch eine Ausdehnung in z-Richtung. Abbildung 7.10 zeigt die Transformation projiziert auf die y-z-Ebene. In Abbildung 7.11 ist das Ergebnis der dritten Scherung im Raum zu sehen. Man betrachte folgende Funktion: 3 4 ∀p = (xp , yp , zp ) ∈ R : f (p) = z3 xp , yp , zp − yp · Seite 3 ySeite Dies verändert q 3 , ~e3Seite und ~e3Boden wie folgt: 4 4 f (q) = q = (x4q , yq4 , zq4 ) x4q = xq − yq · = x3q , yq3 , zq3 − yq3 z3 · Seite 3 ySeite xSeite ySeite ! x y Seite Boden yq4 = yq − xq − yq · · Seite ySeite xBoden − yBoden · xySeite ! xSeite zBoden 4 zq = zq − xq − yq · · Seite ySeite xBoden − yBoden · xySeite !! xSeite yBoden zSeite − yq − xq − yq · · · Seite ySeite xBoden − yBoden · xySeite ySeite 76 Eine Vereinfachung der Daten 4 4 f 4 (~eBoden ) = ~e4Boden = (x4Boden , yBoden , zBoden ) xSeite 4 4 = r − l = xBoden + yBoden · , 0, 0 ySeite 4 4 f 4 (~eSeite ) = ~e4Seite = (x4Seite , ySeite , zSeite ) = (0, ySeite , 0) Nach Durchführung der Scherung f 4 sind die Streifenböden orthogonal zur y-zEbene, und somit parallel zur x-Achse. Schließlich gilt auch hier für die vertikale Gerade % durch die beiden Punkte ẇ und ṡ, nach Definition von f 4 : xẇ = xṡ ∧ yẇ = xṡ ⇔ xf 4 (ẇ) = xf 4 (ṡ) ∧ yf 4 (ẇ) = xf 4 (ṡ) (7.4) Somit ist auch das Bild f 4 (%) der Geraden % eine vertikale Gerade und auch bei dieser Scherung ist der inverse Schluss gültig. Im nächsten Abschnitt dieses Kapitels untersuchen wir, wie durch ein zeitkorrigiertes Einfügen von Knotenstrahlen in die Datenstrukturen der LowestIntersection-Anfragen nicht nur die Koordinaten des Fußpunktes, sondern auch der Zeitpunkt der Entstehung berücksichtigt werden, um der Ausbreitung eines Knotenstrahls Rechenschaft zu tragen. 7.1.6 Die Zeitkorrektur Abgesehen von der offensichtlich inversen Natur von Lowest-Intersection-Anfragen und Ray-Shooting-Anfragen unterscheiden sich diese beiden Minimierungsanfragen in einem weiteren, subtileren Merkmal. Während bei RayShooting-Anfragen die gespeicherten Objekte sofort nach ihrer Einfügung in eine Datenstruktur eine vorläufig endgültige, statische Rolle spielen, sind die in den Datenstrukturen der Lowest-Intersection-Anfragen gespeicherten Knotenstrahlen dynamische Objekte, bei denen die dynamischen Spitzen der Knotenstrahlen relevant für Ereignisse sind und nicht die statischen Fußpunkte. In diesem Abschnitt untersuchen wir, z was beim Speichern von Knotenstrahlen beachtet werden muss, um ihrer dynamischen Natur gerecht zu werden. Man betrachte eine gegebene Datenstruktur DLI für sublokale Lowestw2 Intersection-Anfragen mit dem Streiẇ2 fen s, das heißt in DLI sind lediglich Knotenstrahlen einer Ähnlichs w1 keitsklasse gespeichert, und die Any ẇ1 frageobjekte an DLI sind Streifen von ebenfalls nur einer Ähnlichkeitsklasse. Seien die beiden Knotenstrahlen x w1 und w2 in DLI gespeichert, dabei sei w1 derjenige Knotenstrahl, dessen Abbildung 7.12: Zwar ist Fußpunkt von Fußpunkt ẇ1 eine geringere z Koordiw2 näher an s, dennoch erreicht w1 den nate besitzt als der Fußpunkt ẇ2 von Streifen früher, da w1 älter ist. w2 . Somit wurde w1 zu einem früheren Zeitpunkt während der Simulati- 7.1 Orthogonalisierende Scherungen 77 on der Wellenfrontausdehnung in DLI eingefügt als w2 . Angenommen die beiden Knotenstrahlen w1 und w2 bewegen sich, wie in Abbildung 7.12 dargestellt, auf den Streifen s zu. Der Fußpunkt ẇ1 ist weiter von s entfernt als ẇ2 . Beachtet man nicht, dass sich Knotenstrahlen mit endlicher Geschwindigkeit ausbreiten, so würde man nun als Antwort einer Lowest-Intersection-Anfrage möglicherweise den Knotenstrahl w2 bekommen. Abhängig von der Geschwindigkeit der beiden Knotenstrahlen ist es jedoch möglich, dass w1 die richtige Antwort ist, da dieser Knotenstrahl bereits mehr Zeit hatte, sich auszubreiten – Zeit, in der sich w1 dem Streifen s proportional zu seiner Ausbreitungsgeschwindigkeit genähert hat. Eine Möglichkeit diese Dynamik der Knotenstrahlen handzuhaben wäre, bei jedem Ereignis die Fußpunkte aller gespeicherten Knotenstrahlen auf den Punkt zu korrigieren, den sie mittlerweile erreicht haben. Bei O(c + n) Ereignissen und O(c + n) Knotenstrahlen scheitert dies jedoch an der erforderlichen Anzahl von Θ((c + n)2 ) Korrekturen. Da die Ausbreitung eines Knotens aber bereits zum Zeitpunkt seiner Entstehung bekannt ist, ist es möglich diesen Zeitpunkt zusammen mit den Koordinaten des Fußpunktes zu verrechnen. Wir betrachten die Zeitkorrektur zunächst in der Situation vor Durchführung der Transformation f. Beobachtung 7.1 Fügt man zum Zeitpunkt tw > t0 für einen Knotenstrahl w den Fußpunkt ẇ = (xẇ , yẇ , zẇ ) mit den zeitkorrigierten Koordinaten ẅ = (xẅ , yẅ , zẅ ) = (ẇ − wt ~ w ) in DLI ein, so repräsentieren die in DLI zeitkorrigiert eingetragenen Fußpunkte zu jedem Zeitpunkt die relative Position der Spitzen der gespeicherten Knotenstrahlen. Beweis. Angenommen die Knotenstrahlen w1 und w2 mit Vektor w ~ entstehen zu den Zeitpunkten t1 und t2 mit t1 < t2 während der Wellenfrontausdehnung. In der Zeit ∆t = t2 − t1 wandert w1 um ∆t||w|| ~ in Richtung w. ~ Somit ist ab der Entstehung von w2 die relative Position der Spitze von w1 zu der von w2 bezüglich der Koordinaten der Fußpunkte um ∆t||w|| ~ in Richtung w ~ verschoben. Fügt man die Knotenstrahlen w1 und w2 wie beschrieben in DLI ein, so ist die relative Position der korrigierten Fußpunkte ẅ1 und ẅ2 von w1 beziehungsweise w2 wie folgt: ẅ1 − ẅ2 = (ẇ1 − wt ~ 1 ) − (ẇ2 − wt ~ 2 ) = ẇ1 − ẇ2 + ∆tw ~ Betrachtet man die relative Position der Spitzen w b1 (t) und w b2 (t) von w1 beziehungsweise w2 , also der Punkte im Raum, welche die Knotenstrahlen ausgehend von ihren Fußpunkten zum Zeitpunkt t erreicht haben, so ergibts sich Folgendes: w b1 (t) − w b2 (t) = (ẇ1 − w(t ~ − t1 )) − (ẇ2 − w(t ~ − t2 )) = ẇ1 − ẇ2 + ∆tw ~ Wie behauptet entspricht somit die relative Position der Spitzen von w1 und w2 in der Wellenfrontausdehnung der relativen Position der zeitkorrigierten Fußpunkte. Man beachte, dass diese Zeitkorrektur durchaus auch nach der Transformation f durchgeführt werden kann. Im Sinne der Anschaulichkeit haben wir zur Erläuterung der Zeitkorrektur jedoch nicht transformierte Objekte gewählt. Für 78 Eine Vereinfachung der Daten eine Implementation empfiehlt es sich, die Zeitkorrektur nach Durchführung der Transformation f einzubauen, da der Vektor w ~ dadurch parallel zur z-Achse ist. Fügt man Knotenstrahlen wie beschrieben zeitkorrigiert in Lowest-Intersection-Datenstrukturen ein, so gilt es dies bei Anfragen an diese Datenstrukturen zu beachten. Stellt man zum Zeitpunkt ts eine Anfrage mit einem Streifen s, so lässt sich aus den zeitkorrigierten Fußpunkten und s die Zeit berechnen, die ab dem Start der Wellenfront bis zur Kollision verstreicht. Nun ist es jedoch möglich, dass ein zeitkorrigierter Knotenstrahl derart verschoben wird, dass er s trifft, obwohl er das in der Wellenfrontausdehnung nicht tut. In einem solchen Fall wäre der berechnete Zeitpunkt der (falsch vorhergesagten) Kollision tk < ts , er läge somit in der Vergangenheit. Eine einfache Prüfung lässt uns dieses Ereignis verwerfen, jedoch führt eine explizite Behandlung solcher Ereignisse zu O((c + n)2 ) Prüfungen. Im folgenden Absatz betrachten wir eine Lösung dieser Problematik. Bei der Lowest-Intersection-Anfrage mit dem Streifen s an die entsprechend Abschnitt 7.1.1 ausgerichtete Datenstruktur DLI zum Zeitpunkt ts berücksichtigt man lediglich die Knotenstrahlen, für deren Zeitpunkt tk der Kollision mit s gilt: tk ≥ ts . Dies sind all die Knotenstrahlen w mit Fußpunkten ẇ = (xẇ , yẇ , zẇ ) und Punkte ṡ = (xṡ , yṡ , zṡ ) der Kollision mit s, für die gilt: (zṡ − zẇ )/||w|| ~ ≥ ts und somit zṡ ≥ zẇ +ts ||w|| ~ beziehungsweise zẇ ≤ zṡ −ts ||w|| ~ (man beachte, dass w ~ nun parallel zur z-Achse ist). Diese Prüfung lässt sich einfach in der letzten Stufe der im folgenden Kapitel beschriebenen Datenstrukturen implementieren (siehe Abschnitt 8.4.3). Mit anderen Worten bedeutet dies, dass die Anfrage, die mit dem Streifen s zum Zeitpunkt ts erfolgt, ebenfalls zeitkorrigiert wird. Dazu wird der ausgerichtete Streifen s für die Anfrage um ts ||w|| ~ in negativer z-Richtung verschoben. Auf diese Weise lässt sich direkt die verbleibende Zeit bis zu einer Kollision berechnen. Intuitiv erscheint es bei einer zeitkorrigierten Anfrage möglich, dass der Streifen s zwar hinter der Spitze eines Knotenstrahls w, aber vor seinem ursprünglichen Fußpunkt liegt. Somit läge s auf der Trajektorie des Strahls w. Diese Situation ist selbstverständlich nicht möglich, da s einen Ort besucht, den die Wellenfront durch w bereits besucht hat. Durch ein anderes Ereignis wäre also vor der globalen Vorhersage einer solchen Kollision die Lebenszeit von entweder s oder w beendet worden, möglicherweise sogar durch eine Kollision von s mit w. In den folgenden Abschnitten wird ohne weitere Erwähnung angenommen, dass Knotenstrahlen, wie in Beobachtung 7.1 beschrieben, in die Lowest-Intersection-Datenstrukturen eingefügt werden, und Lowest-Intersection-Anfragen durch die oben beschriebene Zeitkorrektur angepasst werden. 7.2 Korrektheit der Transformation Die Korrektheit der Transformation f wird in zwei Schritten bewiesen. Zunächst wird gezeigt, dass eine Gerade durch den Strahl vor und nach der Transformation den selben Streifen trifft. Dann wird gezeigt, dass der getroffene Streifen vor und nach der Transformation den Abstand und die relative Lage zum Fußpunkt des Strahls beibehält. Damit ist nicht nur gezeigt, dass die Transformation das Ergebnis einer Minimierungsanfrage nicht verändert, sondern auch, dass das Bild 7.2 Korrektheit der Transformation 79 der Transformation dazu verwendet werden kann, den Zeitpunkt der Kollision zu errechnen. Sei w ein Knotenstrahl. Nach der Ausrichtung des Koordinatensystems trifft eine Gerade durch den Knotenstrahl w mit Fußpunkt ẇ = (xẇ , yẇ , zẇ ) ∈ R3 genau dann den Streifen s, wenn es einen Punkt ṡ = (xṡ , yṡ , zṡ ) ∈ s auf dem Streifen s gibt mit xẇ = xṡ und yẇ = yṡ . Es ist also zu zeigen: xẇ = xṡ und yẇ = yṡ ⇔ xf (ẇ) = xf (ṡ) und yf (ẇ) = yf (ṡ) In den vergangenen Abschnitten haben wir diese Behauptung durch die Gleichungen 7.1 bis 7.4 jedoch für die vier einzelnen Teile f 1 , . . . , f 4 der Transformation f bereits gezeigt. Da nach Definition von f gilt: f = f 4 ◦ f 3 ◦ f 2 ◦ f 1 , ist die Behauptung gezeigt. Somit wird eine vertikale Gerade durch f auf eine vertikale Gerade abgebildet, und das Bild einer Gerade durch einen Knotenstrahl trifft dieselben Streifen wie das Urbild. Noch zu zeigen ist, dass sich die relative Lage und der Abstand zwischen ẇ und ṡ nicht ändern, vorausgesetzt ẇ und ṡ haben die gleichen x- und yKoordinaten. Basierend auf den Ergebnissen des letzten Absatzes ist dies gleichbedeutend mit der Aussage, dass die Transformation f eine vertikale Strecke auf eine vertikale Strecke gleicher Länge abbildet. Die folgende simple Überlegung zeigt die Behauptung direkt: Scherungen f 1 und f 2 lassen z-Koordinaten gänzlich unangetastet. Scherungen f 3 und f 4 verändern die z-Koordinaten eines Punktes proportional zu dessen x- respektive y-Koordinaten (was offensichtlich für Punkte auf einer vertikalen Gerade gewährleistet ist). Nach diesen beiden Schritten ist somit garantiert, dass sowohl der Abstand zwischen ẇ und ṡ als auch deren relative Lage durch f beibehalten werden. Zudem sichert diese Invarianz, dass der Vektor w ~ des Knotenstrahls w ebenfalls transformationsinvariant ist. Das folgende Lemma fasst das Ergebnis der Transformation f zusammen: Lemma 7.1 (Transformation f ) Der Knotenstrahl w trifft den Streifen s genau dann, wenn der Knotenstrahl f (w) den Streifen f (s) trifft. Zudem ist der Weg, den der Strahl bis zur Kollision zurücklegt, nach der Transformation gleich lang wie vor der Transformation Nach Lemma 7.1 kann somit nach der Transformation zẇ − zṡ zu Berechnung des Zeitpunktes der Kollision herangezogen werden. Demnach gilt für zwei Knotenstrahlen w1 und w2 darüber hinaus: w1 trifft s zeitlich vor w2 genau dann, wenn gilt f (w1 ) trifft f (s) zeitlich vor f (w2 ). Weder kann also ein Knotenstrahl einen zweiten überholen“, noch können zwei Streifen ihre relative Lage tau” schen. Man beachte, dass die Ergebnisse von Lemma 7.1 keineswegs für jede Verkettung von Scherungen oder sogar für lineare Transformationen im Allgemeinen gelten. Erst die sorgfältige Wahl der einzelnen Scherungen ermöglicht es uns, die Minimierungsanfragen zu vereinfachen und zugleich die Ergebnisse dieser Anfragen nicht zu verändern. Zusammenfassend haben wir in diesem Abschnitt eine ursprüngliche Minimierungsanfrage im Raum in eine orthogonale Minimierungsanfrage transformiert. Im nächsten Kapitel werden wir betrachten, wie diese orthogonale Minimierungsanfrage in eine orthogonale Bereichsanfrage umgewandelt wird, welche schnell beantwortet werden kann. Zunächst beleuchten wir jedoch im letzten Abschnitt dieses Kapitels noch, wie die dargelegte Transformation f an die ver- 80 Eine Vereinfachung der Daten schiedenen Streifentypen angepasst wird. 7.3 Die Anpassung der Transformation f In den vergangenen Abschnitten wurde die Transformation f für Streifen vom Typ 2 vorgestellt. Wie in Abschnitt 7.1 angesprochen, erfordert die unterschiedliche Geometrie der verschiedenen Streifentypen (siehe Abschnitt 6.4.3) eine Anpassung der Transformation f an Streifen des Typs 1 beziehungsweise 4. Davon sind alle diejenigen Datenstrukturen betroffen, welche eine Ähnlichkeitsklasse von Typ-1-Streifen beziehungsweise Typ-4-Streifen bedienen. Ein Streifen vom Typ 1 hat dieselbe Form wie ein Typ-2-Streifen, bis auf die Tatsache, dass er abgesehen vom Boden nur an einer Seite beschränkt ist statt an zwei und zudem nur einen Fußpunkt besitzt. Die notwendigen Änderungen für Typ-1-Streifen an der Transformation bestehen somit trivialerweise nur aus einigen Streichungen. Die verschiedenen Ähnlichkeitsklassen von Knotenstrahlen machen keine konzeptionellen Änderungen an f notwendig, lediglich die in Abschnitt 7.1.1 dargelegte Ausrichtung des Koordinatensystems muss dem Vektor der bedienten Knotenstrahlen entsprechen. Streifen vom Typ 4 bedürfen allerdings einer besonderen Betrachtung. Sei s nun ein solcher Streifen. Nach Boden Abschnitt 6.4.3 ist s ein Dreieck, und Schräge lässt sich als solches nicht vollständig eC orthogonalisieren. Zunächst wird festv2 gelegt, wie die Kanten des dreieckigen Streifens identifiziert werden, sies he dazu Abbildung 7.13. Der Boden v1 ω ist die erste Kante von s, die vollSeite ständig von der Wellenfront Wt (S) erreicht wird. Als Seite wird dann dieAbbildung 7.13: Bezeichnung der Kan- jenige der übrigen Kanten von s deten eines Typ-4-Streifens. finiert, welche kürzer ist. Die dritte Kante wird als Schräge bezeichnet. Nach der herkömmlichen Ausrichtung des Koordinatensystems nach der Strahlenklasse erfolgt nun die Durchführung der Transformation in gewohnter Form wie für Typ-1-Streifen. Das Ergebnis ist ein transformierter Streifen f (s), der parallel zur x-y-Ebene liegt und dessen Boden und Seite parallel zur x-Achse respektive y-Achse sind. Abhängig von der Ähnlichkeitsklasse kann die Schräge von f (s) nun unterschiedliche Winkel mit der x- und der y-Achse einschließen. Für Streifen dieses Typs muss in der orthogonalen Bereichsanfrage eine von der Ähnlichkeitsklasse abhängige, weitere Koordinatenrichtung in der x-yEbene eingeführt werden, mehr dazu in Abschnitt 8.6. Kapitel 8 Die Minimierungsanfragen Nachdem wir die der entsprechenden Ähnlichkeitsklasse angepasste Transformation f durchgeführt haben, werden Streifen und Knotenstrahlen in bedienende Datenstrukturen eingefügt. In diesem Kapitel beschreiben wir diese Datenstrukturen für die lokalen Minimierungsanfragen. Ebenfalls in diesem Kapitel betrachten wir die Vorgehensweise des Konstruktionsalgorithmus für einen Streifen vom Typ 2 und einen gegebenen Knotenstrahl w. Wie in Kapitel 7 legen wir am Ende dieses Kapitels in Abschnitt 8.6 kurz dar, inwiefern Datenstrukturen, die einen anderen Streifentyp bedienen, entsprechend angepasst werden. Die Einordnung von Streifen in Ähnlichkeitsklassen reduziert die Menge der notwendigen Daten, welche wir für Streifen nach der Transformation f speichern. Für den Streifen s werden innerhalb einer Datenstruktur nur noch die folgenden Daten genutzt (in Ray-Shooting-Datenstrukturen werden diese gespeichert, und in Lowest-Intersection-Datenstrukturen werden sie für Anfragen genutzt): • die x-Koordinate xf (l) des transformierten Bodenpunktes f (l), • die x-Koordinate xf (r) des transformierten Bodenpunktes f (r), • die y-Koordinate yf (l) des transformierten Bodenpunktes f (l) (man beachte, dass nach der Transformation gilt: yf (l) = yf (r) ), sowie • die z-Koordinate zf (l) des Streifens, der nach der Transformation orthogonal zur z-Achse steht Für den Strahl w wird lediglich die Information über den Fußpunkt ẇ gespeichert, da Strahlen in jeder Datenstruktur in Richtung der positiven z-Achse liegen (in Lowest-Intersection-Datenstrukturen werden diese gespeichert, und in Ray-Shooting-Datenstrukturen werden sie für Anfragen genutzt): • die x-Koordinate xf (ẇ) des transformierten Fußpunkts f (ẇ), • die y-Koordinate yf (ẇ) des transformierten Fußpunkts f (ẇ) und • die z-Koordinate zf (ẇ) des transformierten Fußpunkts f (ẇ) 82 Die Minimierungsanfragen Nach Kapitel 5 ist es notwendig die folgenden Arten von Anfragen zu beantworten: 1. Ray-Shooting-Anfrage: Welchen Streifen trifft ein Anfragestrahl w als nächstes? 2. Lowest-Intersection-Anfrage: Welcher Strahl trifft einen Anfragestreifen s als nächstes? Mit Hilfe dieser lokalen Anfragen liefert Satz 5.1 das global nächste Ereignis, und die diskretisierte Konstruktion von VC (S) kann um einen weiteren Schritt fortgesetzt werden. In einer Ray-Shooting-Datenstruktur werden Streifen eingefügt, jedoch keine Knotenstrahlen. Letztere werden als Anfragestrahlen an die Datenstruktur gesendet, welche dann das Ergebnis dieser Anfrage liefert. Analog dazu werden in einer Lowest-Intersection-Datenstruktur Knotenstrahlen eingefügt und keine Streifen. Eine Anfrage erfolgt dann durch einen Anfragestreifen, für den die Datenstruktur ein Ergebnis liefert. Nach Abschnitt 6.6 steht (mit einigen wenigen Ausnahmen, siehe Abschnitt 7.1.1) für jede Kombination aus einer Streifenklasse und einer Klasse von Knotenstrahlen eine Datenstruktur zur Verfügung. Dies bedeutet, dass eine lokale Anfrage sofort in mehrere sublokale Anfragen aufgeteilt wird, welche dann an diese einzelnen sublokalen Datenstrukturen gestellt werden. Der Streifen s ist somit in einer Menge von Ray-Shooting-Datenstrukturen gespeichert, die so groß ist wie die Menge verschiedener Klassen von Knotenstrahlen, und wird bei einer Lowest-IntersectionAnfrage an eine ebenso große Menge von Lowest-Intersection-Datenstrukturen gesendet. Umgekehrt ist der Knotenstrahl w in einer Menge von Lowest-Intersection-Datenstrukturen gespeichert, die so groß ist wie die Menge der Streifenklassen, und wird bei einer Ray-Shooting-Anfrage an eine ebenso große Menge von Ray-Shooting-Datenstrukturen gesendet. Man betrachte die sublokalen Vorhersagen in Abbildung 10.1 zur Anschauung, dabei beziffert τ die Anzahl der Klassen von Knotenstrahlen und σ die Anzahl der Streifenklassen. Wird eine Minimierungsanfrage gestellt, so liefern zunächst konstant viele sublokale Datenstrukturen, welche die Ähnlichkeitsklasse des angefragten Objekts bedienen, ein Ergebnis. Ein solches Ergebnis genügt der Anfrage: Welches Objekt der Klasse K trifft das Anfrageobjekt zuerst? Aus dieser konstant großen Menge von sublokalen Prognosen wird dann durch einen Ergebnisfilter, der in Abschnitt 8.7 beschrieben wird, in konstanter Zeit die lokale Prognose festgestellt. Die lokale Prognose genügt der Anfrage: Welches Objekt hat als erstes eine Interaktion mit dem Anfrageobjekt? Im Folgenden dieses Kapitels werden die Datenstrukturen der sublokalen Minimierungsanfragen und die dort durchgeführten orthogonalen Bereichsanfragen betrachtet. 8.1 Die Datenstrukturen Anfragen für Ray-Shooting- Nach der Durchführung der in Kapitel 7 beschriebenen Transformation werden Streifen und Knotenstrahlen in speziell für diese Klassen von Streifen und 8.1 Die Datenstrukturen für Ray-Shooting-Anfragen 83 Knotenstrahlen vorgesehene Datenstrukturen eingefügt. Wir betrachten in diesem Abschnitt diejenige Datenstruktur DRS , welche alle Streifen einer Klasse speichert und Ray-Shooting-Anfragen für beliebige Knotenstrahlen einer festen Klasse beantwortet. Sei der Anfragestrahl w gegeben und der Streifen s gespeichert in DRS . Für den Streifen s werden die x-Koordinaten der Bodenpunkte, die y-Koordinate des Bodens und die z-Koordinate des Streifens genutzt. Es sei noch einmal erwähnt dass nach der Transformation ein Typ-2-Streifen orthogonal zur z-Achse steht, und zudem all seine Seiten parallel zu einer der Koordinatenachsen sind. Als Datenstruktur kommt ein vierstufiger Bereichsbaum zum Einsatz, den wir mit T = {T 1 , T 2 , T 3 , T 4 } bezeichnen, wobei T i die Strukturen der i. Stufe bezeichnen. Eine ausführliche Beschreibung mehrstufiger Bereichsbäume bieten de Berg u. a. (2001). Eine Untersuchung der asymptotischen Größe und Konstruktionszeit von DRS wird in Abschnitt 10 vorgenommen. In jeder Stufe des Bereichsbaumes wird ein balancierter, binärer Suchbaum, zum Beispiel ein AVLSuchbaum eingesetzt. Definition 8.1 (AVL-Baum) Ein balancierter Baum ist ein Baum, in dem sich für jeden Knoten die Höhe des rechten und des linken Kinds um höchstens 1 unterscheiden. Die Invariante, dass der binäre Suchbaum stets balanciert ist, wird durch Rotationen garantiert, welche nach Einfüge- und Löschoperationen durchgeführt werden. Eine Rotation ist eine lokale Operation an einem Baum, welche die Verzeigerungsstruktur eines Baums ändert, dabei aber die Eigenschaften eines binären Suchbaumes erhält. Da dies jedoch nicht zentraler Punkt dieser Arbeit ist, wird für eine detaillierte Beschreibung von AVL-Bäumen auf Cormen u. a. (2001) oder auf Ottmann und Widmayer (2001) verwiesen. Eine umfassende Beschreibung dynamischer mehrstufiger Bereichsbäume bietet Lamoureux (1996), unter anderem werden dort Laufzeiten von Einfüge-, Lösch- und Anfrageoperationen detailliert untersucht und bewiesen. Zusammenfassend hat ein d-stufiger Bereichsbaum T basierend auf AVL-Bäumen mit m gespeicherten Werten die folgenden, für uns relevanten Eigenschaften: • Die Bäume jeder Stufe von T haben eine Tiefe von O(log m). • Einfüge- und Löschoperationen (inklusive der Balancieroperationen) für T d benötigen eine Laufzeit von O((log m) ). d • Anfragen an T benötigen ebenfalls eine Laufzeit von O((log m) ). Im Folgenden werden zunächst die Datenstruktur, dann der Ablauf einer Anfrage beschrieben. Auf eine Beschreibung der Einfüge-, Lösch- und Balancieroperationen wird verzichtet. Innerhalb einer Datenstruktur werden in den nächsten Abschnitten folgende Bezeichnungen benutzt: • Die Menge der gespeicherten Streifen: S = {s1 , . . . , sm } • Die Menge der x-Koordinaten der linken Bodenpunkte: L = {l1 , . . . , lm } • Die Menge der x-Koordinaten der rechten Bodenpunkte: R = {r1 , . . . , rm } 84 Die Minimierungsanfragen • Die Menge der y-Koordinaten der Böden: Y = {y1 , . . . , ym } • Die Menge der z-Koordinaten der Streifen: Z = {z1 , . . . , zm } Es gilt also, dass jeder Streifen si ∈ S mit 1 ≤ i ≤ m definiert wird durch die Koordinaten li , ri , yi , zi . Die Ähnlichkeitsklasse von Anfragestrahlen, welche DRS bedient, ist die Klasse des Knotenstrahls w. Über den Anfragestrahl w werden bei einer Ray-Shooting-Anfrage an DRS die Koordinaten xw , yw , zw des (transformierten) Fußpunkts ẇ gesendet. In den folgenden vier Abschnitten werden die vier Stufen des Bereichsbaumes DRS dargelegt. Anschließend wird ein Ray-Shooting-Anfragealgorithmus vorgestellt. 8.1.1 Die erste Stufe der Datenstruktur Die erste Stufe der Datenstruktur bildet ein balancierter, binärer Suchbaum, in dem die Blätter die einzelnen Streifen vertreten. Als Schlüsselmenge fungiert L. Betrachtet man die Projektion der Streifen und des Anfragestrahls auf die x-y-Ebene, so dient diese Stufe dem folgenden Zweck: Finde alle Streifen, für die ẇ rechts der Geraden durch ihre linken Seiten liegt. Der Baum der ersten Stufe wird als T 1 bezeichnet. Jeder Knoten κ des Baumes enthält neben dem Schlüssel einen Zeiger auf die Wurzel einer Datenstruktur der zweiten Stufe, die wir als Unterbaum von κ, oder kurz mit T 2 (κ) bezeichnen. Man bezeichnet die Menge der zu den Blättern korrespondierenden Streifen, welche unterhalb eines Knotens κ liegen, als die kanonische Untermenge von κ. Die kanonische Untermenge eines Knotens κ wird als S(κ) bezeichnet 8.1.2 Die zweite Stufe der Datenstruktur Die zweite Stufe der Datenstruktur bildet ein Menge von balancierten, binären Suchbäumen, in denen wieder die Blätter die einzelnen Streifen vertreten. Als Schlüsselmenge fungiert nun R. Betrachtet man die Projektion der Streifen und des Anfragestrahls auf die x-y-Ebene, so dient diese Stufe dem folgenden Zweck: Finde alle Streifen, für die ẇ links der Geraden durch ihre rechten Seiten liegt. Sei nun T 2 (κ) der Unterbaum des Knotens κ. Der Baum T 2 (κ) enthält nun als Blätter die Menge der x-Koordinaten der rechten Bodenpunkte der Streifen in S(κ). Erneut gilt: jeder Knoten λ des Baumes T 2 (κ) enthält neben dem Schlüssel einen Zeiger auf die Wurzel einer Datenstruktur der dritten Stufe, die wir als Unterbaum von λ, oder kurz mit T 3 (λ) bezeichnen. Der Begriff der kanonischen Untermenge wird hier in gleicher Weise wie in der ersten Stufe verwendet. 8.1.3 Die dritte Stufe der Datenstruktur Die dritte Stufe der Datenstruktur ist analog zur zweiten Stufe aufgebaut. Als Schlüsselmenge fungiert nun Y. Betrachtet man wieder die Projektion auf die x-y-Ebene, so dient diese Stufe dem folgenden Zweck: Finde alle Streifen, für die ẇ oberhalb der Geraden durch ihre Böden liegt. Der Unterbaum eines Knotens der dritten Stufe µ wird nun bezeichnet als T 4 (µ). 8.2 Orthogonale Bereichsanfrage ersetzt Ray-Shooting-Anfrage 8.1.4 85 Die vierte Stufe der Datenstruktur Die vierte und letzte Stufe der Datenstruktur bildet wieder eine Menge von balancierten, binären Suchbäumen, in denen erneut die Blätter die Streifen vertreten. Als Schlüsselmenge fungiert nun Z. In dieser Stufe werden all diejenigen Streifen gefunden, welche oberhalb von ẇ liegen. Da der Anfragestrahl w sich von ẇ ausgehend in positiver z-Richtung ausdehnt (siehe Abschnitt 7.1.1), sind dies die Streifen, deren Erweiterung zu einer Ebene im Raum von w getroffen werden. Sei nun T 4 (µ) der Unterbaum der vierten Stufe des Knotens µ aus der dritten Stufe. Nach Konstruktion besitzt µ einen Zeiger auf die Wurzel von T 4 (µ). Der Baum T 4 (µ) enthält nun als Blätter die Menge von Streifen S(µ). Die vierte Stufe enthält keine weiteren Zeiger. 8.2 Orthogonale Bereichsanfrage ersetzt RayShooting-Anfrage Der im vorangegangenen Abschnitt beschriebene vierstufige Bereichsbaum zur Umsetzung von Ray-Shooting-Anfragen ist in Abµ bildung 8.1 (nach de Berg u. a. (2001)) veranλ schaulicht, wobei in jeder Stufe nur ein durchT 3 (λ) T1 suchter Baum dargestellt ist (in der Regel sind dies in den Stufen zwei bis vier jeweils mehre2 κ T (κ) re). Bei einer Anfrage mit dem Knotenstrahl w werden Bäume jeder Stufe dieser Datenstruktur DRS von oben bis unten durchlaufen. Dabei werden die in DRS gespeicherten Streifen in jeder der Stufen eins bis drei bezüglich Abbildung 8.1: Ein vierdimen- einer ihrer Seiten darauf getestet, ob sie in der Projektion auf die x-y-Ebene ẇ enthalsionaler Bereichsbaum. ten können. Die vierte Stufe findet aus diesen Streifen schließlich den Streifen sAntwort , der im Raum am nächsten oberhalb ẇ liegt, also denjenige Streifen, der vom Anfragestrahl w als erstes getroffen wird. Der folgende Algorithmus 1 beschreibt den Ablauf einer Anfrage. Durch diesen Algorithmus ist es möglich Ray-Shooting-Anfragen mit einem Anfragestrahl w in der Menge aller momentan gespeicherten Streifen einer gegebenen Ähnlichkeitsklasse durchzuführen. Eine Ray-Shooting-Anfrage im Sinne der Minimierungsanfragen aus Abschnitt 5.3 erfordert allerdings, dass alle Streifen in die Anfrage einbezogen werden – nicht nur die eines bestimmten Typs (eine Einschränkung bilden redundante Ereignisse, welche wir im folgenden Abschnitt betrachten). Die Laufzeit der in Algorithmus 1 beschriebenen Anfrage entspricht 4 der in Abschnitt 8.1 dargelegten Laufzeit von O((log m) ), für einen Beweis dieser Laufzeit wird auf die oben genannten Quellen verwiesen. Man beachte, dass beim Durchsuchen der vierten Stufe des Bereichsbaums automatisch bei demjenigen Streifen si geendet wird, dessen z-Koordinate zsi minimal ist unter allen Streifen sj mit z-Koordinaten zsj ≥ zw . Dies ist insofern wichtig, als dass eine explizite Durchsuchung aller getroffener Streifen nach dem Streifen mit minimaler z-Koordinate die (hohe) asymptotische Laufzeit von O(c + n) hätte. T 4 (µ) 86 Die Minimierungsanfragen Algorithmus 1 Beantwortung einer Ray-Shooting-Anfrage durch eine orthogonale Bereichsanfrage. Anforderung: Datenstruktur DRS , Koordinaten xw , yw , zw des Fußpunkts ẇ von Anfragestrahl w. Ergebnis: Erster von w getroffener Streifen in DRS . 1: zmin ← ∞ 2: sAntwort ← ∅ 3: ẇ ← f (ẇ) (Transformation f siehe Abschnitt 7) 4: Durchsuche T 1 mit xr , markiere bei jedem Abbiegen nach links den Unterbaum des rechten Bruders. 5: Prüfe das Blatt explizit, markiere es gegebenenfalls. 6: Durchsuche die markierten Bäume in T 2 mit xw , markiere bei jedem Abbiegen nach rechts den Unterbaum des linken Bruders. 7: Prüfe das Blatt explizit, markiere es gegebenenfalls. 8: Durchsuche die markierten Bäume in T 3 mit yw , markiere bei jedem Abbiegen nach links den Unterbaum des rechten Bruders. 9: Prüfe das Blatt explizit, markiere es gegebenenfalls. 10: Durchsuche die markierten Bäume in T 4 mit zw , und gib in jedem durchsuchten Baum denjenigen Streifen, in dessen Blatt geendet wird, an die folgende Abfrage weiter: 11: Für jeden weitergegebenen Streifen si mache 12: falls zsi ≤ zmin dann 13: sAntwort ← si und zmin ← zsi 14: ende 15: Gib als Antwort sAntwort aus. In Abschnitt 8.7 wird dargelegt, wie wir aus den sublokalen Minimierungsanfragen mit den einzelnen Klassen von gespeicherten Streifen das lokale Ergebnis der Minimierungsanfrage bezüglich aller gespeicherter Streifen bilden, um es an die globale Prognose weiterzugegeben. 8.3 Redundante Typ-A-Ereignisse In Abschnitt 3.3.4 haben wir definiert, was ein redundantes Typ-A-Ereignis ist, und in Abschnitt 3.4 argumentierten wir, dass die lineare Komplexität der Quickest-Path-Map und die lineare Anzahl der relevanten Ereignisse während der Simulation der Wellenfrontausdehnung nur dann garantiert werden können, wenn redundante Ereignisse ignoriert werden. Angenommen es werden bei einer gegebenen Ray-Shooting-Anfrage alle entsprechenden sublokalen Datenstrukturen angefragt, dann werden offensichtlich auch redundante Ereignisse vorhergesagt. In diesem Abschnitt legen wir dar, wie alle sublokalen Anfragen vermieden werden, welche redundante Typ-A-Ereignisse melden. In den Abbildungen 3.17, 3.18 und 3.19 ist dargestellt, wie sich nach einem Typ-A-Ereignis an dem Segment si des Transportnetzwerks die Geschwindigkeit gi auf die Neigung der Kanten el und er der Wellenfront auswirkt, welche inzident zu dem neuen Wellenfrontknoten v sind, der sich orthogonal von si fortbewegt. Zwischen der Neigung von Kanten und der Geschwindigkeit auf einem 8.4 Die Datenstrukturen für Lowest-Intersection-Anfragen 87 Netzwerksegment gilt bei Typ-A-Ereignissen die in Abschnitt 6.4.1 dargelegte Abhängigkeit. Die Frage, ob eine Anfrage mit dem Knotenstrahl v an eine sublokale Ray-Shooting-Datenstruktur DRS redundante Ereignisse liefert, kann demnach mit Hilfe der Neigung der zu v inzidenten Kanten der Wellenfront und der Geschwindigkeit gi der in DRS gespeicherten Streifen beantwortet werden. Zu diesem Zweck werden zunächst alle Ray-Shooting-Datenstrukturen, welche lediglich vertikale Wände speichern (dies sind genau die erweiterten Netzwerksegmente), derart in k Datenstrukturen aufgeteilt, dass für jede mögliche Geschwindigkeit gi der Netzwerksegmente eine Datenstruktur bereitsteht. Sobald der Knotenstrahl v der Wellenfront entsteht, wird für ihn, zusätzlich zu den in Abschnitt 6.2 beschriebenen Daten, gespeichert, welche Neigung seine beiden inzidenten Kanten der Wellenfront besitzen. Bei einer Ray-Shooting-Anfrage mit v werden nun von den Datenstrukturen, welche vertikale Wände speichern, nur diejenigen angefragt, welche erweiterte Netzwerksegmente speichern, deren Geschwindigkeit eine flachere Neigung der Kanten der Wellenfront zulassen als die in v gespeicherte. Lemma 8.1 Es ist ohne eine Erhöhung der asymptotischen Laufzeit oder des asymptotischen Speicherbedarfs möglich, Ray-Shooting-Anfragen so abzuwickeln, dass redundante Typ-A-Ereignisse ignoriert werden. Beweis. Eine Aufteilung einiger Ray-Shooting-Datenstrukturen in jeweils konstant viele Datenstrukturen erhöht den Speicherbedarf nicht. Es kann in konstanter Zeit festgestellt werden, ob eine Datenstruktur angefragt wird oder nicht. Weiterhin erhöht sich die Anzahl notwendiger sublokaler Anfragen pro Ray-Shooting-Anfrage im schlechtesten Fall um den konstanten Faktor k. Somit erhöht sich auch die asymptotische Laufzeit nicht. Nach Argumenten dieses Abschnittes werden durch die dargelegte Technik redundante Typ-A-Ereignisse nicht an die lokale oder an die globale Vorhersage weitergegeben und somit niemals behandelt. 8.4 Die Datenstrukturen für Lowest-Intersection-Anfragen Nachdem wir in den vorangegangenen Abschnitten eine Datenstruktur betrachtet haben, welche Ray-Shooting-Anfragen durch orthogonale Bereichsanfragen beantwortet, untersuchen wir in den folgenden Abschnitten eine analoge Datenstruktur für Lowest-Intersection-Anfragen. Während bei einer Ray-ShootingAnfrage unter einer gegebenen Menge von Flächen die erste gesucht wird, welche von einem Anfragestrahl getroffen wird, wird bei einer Lowest-Intersection-Anfrage unter einer Menge von Strahlen im Raum derjenige Strahl gesucht, welcher mit einem Anfragestreifen den Schnittpunkt mit kleinster z-Koordinate bildet. Wir betrachten diejenige Datenstruktur DLI , welche Lowest-Intersection-Anfragen für den Anfragestreifen s und den Strahl w (und alle anderen Knotenstrahlen und Streifen dieser Ähnlichkeitsklassen) beantwortet. Dabei nehmen wir nach wie vor an, dass s ein Streifen vom Typ 2 ist. Als Datenstruktur kommt auch bei der Implementierung von DLI ein mehrstufiger Bereichsbaum T zum Einsatz. 88 Die Minimierungsanfragen Allerdings kann bei Lowest-Intersection-Anfragen die zweite Stufe eingespart werden, da eine Bereichsanfrage für eine Fläche zwischen zwei Geraden in nur einer Stufe beantwortet werden kann, siehe dazu Abschnitt 8.4.1 und Algorithmus 2. Es ergibt sich somit ein dreistufiger Bereichsbaum T = {T 1 , T 2 , T 3 }, wobei in jeder Stufe wieder ein balancierter, binärer Suchbaum verwendet wird. Es gelten also weiterhin die in Abschnitt 8.1 dargelegten Eigenschaften solcher Bäume. Im Folgenden werden zunächst die Datenstruktur, dann der Ablauf einer Anfrage beschrieben, während auch an dieser Stelle auf eine Beschreibung der Einfüge-, Lösch- und Balancieroperationen verzichtet und auf Cormen u. a. (2001) verwiesen wird. Innerhalb einer Datenstruktur werden in den nächsten Abschnitten folgende Bezeichnungen benutzt: • die Menge der in DLI gespeicherten Knotenstrahlen: W = {w1 , . . . , wm }, • die Menge der x-Koordinaten der Fußpunkte: X = {x1 , . . . , xm }, • die Menge der y-Koordinaten der Fußpunkte: Y = {y1 , . . . , ym } und • die Menge der z-Koordinaten der Fußpunkte: Z = {z1 , . . . , zm } Der Knotenstrahl w = wi ∈ W mit 1 ≤ i ≤ m wird also definiert durch die Koordinaten xi , yi , zi , und ist einer von m in DLI gespeicherten Knotenstrahlen derselben Ähnlichkeitsklasse. Die Ähnlichkeitsklasse von Streifen, welche DLI bedient, ist die Klasse des Streifens s. Für den (transformierten) Streifen s müssen bei einer Lowest-Intersection-Anfrage an DLI die folgenden Informationen gesendet werden: • die x-Koordinate ls des linken Bodenpunktes. • die x-Koordinate rs des rechten Bodenpunktes. • die y-Koordinate ys des Bodens. • die z-Koordinate zs des Streifens. Man beachte, dass der Streifen s als Typ-2-Streifen nach der Transformation f orthogonal zur z-Achse steht und der Boden von s parallel zur x-Achse. In den folgenden vier Abschnitten werden die drei Stufen des Bereichsbaums DLI dargelegt. Anschließend wird ein Lowest-Intersection-Anfragealgorithmus vorgestellt. 8.4.1 Die erste Stufe der Datenstruktur Die erste Stufe der Datenstruktur bildet ein balancierter, binärer Suchbaum, in dem die Blätter die einzelnen Streifen vertreten. Als Schlüsselmenge fungiert X . Betrachtet man die Projektion der Knotenstrahlen und des Anfragestreifens auf die x-y-Ebene, so dient diese Stufe dem folgenden Zweck: Finde alle Knotenstrahlen, welche rechts der Geraden durch die linke Seite und links der Geraden durch die rechte Seite von s liegen. Der Baum der ersten Stufe wird als T 1 bezeichnet. Jeder Knoten κ des Baumes enthält neben dem Schlüssel einen Zeiger 8.5 Orthogonale Bereichsanfrage statt Lowest-Intersection-Anfrage 89 auf die Wurzel einer Datenstruktur der zweiten Stufe, die wir als Unterbaum von κ, oder kurz mit T 2 (κ) bezeichnen. Man bezeichnet die Menge der zu den Blättern korrespondierenden Knotenstrahlen, welche unterhalb eines Knotens κ liegen, als die kanonische Untermenge von κ. Die kanonische Untermenge eines Knotens κ wird als S(κ) bezeichnet 8.4.2 Die zweite Stufe der Datenstruktur Die zweite Stufe der Datenstruktur bildet eine Menge von balancierten, binären Suchbäumen, in denen wieder die Blätter die einzelnen Knotenstrahlen vertreten. Als Schlüsselmenge fungiert nun Y. Betrachtet man die Projektion der Knotenstrahlen und des Anfragestreifens auf die x-y-Ebene, so dient diese Stufe dem folgenden Zweck: Finde alle Knotenstrahlen, welche oberhalb der Geraden durch den Boden von s liegen. Sei nun T 2 (κ) der Unterbaum des Knotens κ. Der Baum T 2 (κ) enthält nun als Blätter die Menge der x-Koordinaten der Knotenstrahlen in S(κ). Erneut gilt: Jeder Knoten λ des Baumes T 2 (κ) enthält neben dem Schlüssel einen Zeiger auf die Wurzel einer Datenstruktur der dritten Stufe, die wir als Unterbaum von λ, oder kurz mit T 3 (λ) bezeichnen. Der Begriff der kanonischen Untermenge wird hier in gleicher Weise wie in der ersten Stufe verwendet. 8.4.3 Die dritte Stufe der Datenstruktur Die dritte und letzte Stufe der Datenstruktur bildet wieder eine Menge von balancierten, binären Suchbäumen, in denen wie bisher die Blätter die Knotenstrahlen vertreten. Als Schlüsselmenge fungiert nun Z. In dieser Stufe werden all diejenigen Knotenstrahlen gefunden, deren Fußpunkt unterhalb s liegt. Da sich die Knotenstrahlen in DLI in positiver z-Richtung ausdehnen, sind dies die Knotenstrahlen, welche die Erweiterung des Anfragestreifens s zu einer Ebene im Raum treffen. Sei nun T 3 (λ) der Unterbaum der dritten Stufe des Knotens λ aus der zweiten Stufe. Nach Konstruktion besitzt λ einen Zeiger auf die Wurzel von T 3 (λ). Der Baum T 3 (λ) enthält nun als Blätter die Menge der z-Koordinaten der Knotenstrahlen in S(λ). Die dritte Stufe von DLI enthält keine weiteren Zeiger. 8.5 Orthogonale Bereichsanfrage statt LowestIntersection-Anfrage Der dargelegte dreistufige Bereichsbaum zur Umsetzung von Lowest-Intersection-Anfragen wird analog zu den Datenstrukturen der Ray-Shooting-Anfragen konstruiert und genutzt (siehe Abbildung 8.1). Bei einer Anfrage mit dem Streifen s wird jede Stufe dieser Datenstruktur DLI von oben bis unten durchlaufen. Dabei werden die in DLI gespeicherten Knotenstrahlen in den Stufen eins und zwei bezüglich einer ihrer Seiten darauf getestet, ob sie in der Projektion auf die x-y-Ebene s treffen können. Die dritte Stufe findet aus diesen Knotenstrahlen schließlich den Knotenstrahl wAntwort , der im Raum am nächsten unterhalb des 90 Die Minimierungsanfragen Fußpunktes ẇ liegt, also denjenigen Knotenstrahl, der den Anfragestreifen s als erstes trifft. Der folgende Algorithmus beschreibt den Ablauf einer Anfrage. Algorithmus 2 Beantwortung einer Lowest-Intersection-Anfrage durch eine orthogonale Bereichsanfrage. Anforderung: Datenstruktur DLI , Daten ls , rs , ys , zs des Anfragestreifens s. Ergebnis: Erster Knotenstrahl in DLI , der s trifft. 1: zmax ← −∞ 2: wAntwort ← ∅ 3: s ← f (s) (Transformation f siehe Abschnitt 7) 4: Durchsuche T 1 mit ls und rs bis zu dem letzten gemeinsamen Knoten vsplit . 5: Durchsuche T 1 ab dem Knoten vsplit mit ls und markiere bei jedem Abbiegen nach links den Unterbaum des rechten Bruders. 6: Prüfe das Blatt explizit, markiere es gegebenenfalls. 7: Durchsuche T 1 ab dem Knoten vsplit mit rs , markiere bei jedem Abbiegen nach rechts den Unterbaum des linken Bruders. 8: Prüfe das Blatt explizit, markiere es gegebenenfalls. 9: Durchsuche die markierten Bäume in T 2 mit ys , markiere bei jedem Abbiegen nach links den Unterbaum des rechten Bruders. 10: Prüfe das Blatt explizit, markiere es gegebenenfalls. 11: Durchsuche die markierten Bäume in T 3 mit zs , und gib in jedem durchsuchten Baum denjenigen Steifen wi , in dessen Blatt geendet wird, an die folgende Abfrage weiter: 12: Für jeden weitergegebenen Knotenstrahl wi mache 13: falls zwi ≤ zmax dann 14: wAntwort ← wi und zmax ← zwi 15: ende 16: Gib als Antwort wAntwort aus. Analog zu den durch orthogonale Bereichsanfragen ersetzten Ray-ShootingAnfragen liefert auch dieser Algorithmus nur sublokale Antworten auf LowestIntersection-Anfragen. Auch für die Laufzeit von Algorithmus 2 gelten, bis auf die um eins geringere Dimension des verwendeten Bereichsbaums, dieselben Beobachtungen wie in Abschnitt 8.2. Im folgenden Abschnitt wird dargelegt, wie die beiden vorgestellten Datenstrukturen an andere Klassen von Streifen und Knotenstrahlen angepasst werden. Anschließend folgt eine Untersuchung, wie mit den sublokalen Ergebnissen der Algorithmen aus diesem Abschnitt und aus Abschnitt 8.2 die lokalen Minimierungsanfragen beantwortet werden, und somit die globale Vorhersage gespeist wird. Im letzten Abschnitt dieses Kapitels beleuchten wir kurz Fractional-Cascading, eine Technik zur Beschleunigung von Suchbäumen. 8.6 Die Anpassung der Minimierungsanfragen Die in den vergangenen Abschnitten betrachteten Datenstrukturen bedienen jeweils nur Knotenstrahlen und Streifen einer bestimmten Klasse. In diesem Abschnitt werden die notwendigen Anpassungen der Minimierungsanfragen an 8.6 Die Anpassung der Minimierungsanfragen 91 andere Ähnlichkeitsklassen betrachtet. Eine besondere Rolle spielen dabei Streifen vom Typ 4, da diese drei nicht parallele Seiten besitzen. Die Klasse des bisher betrachteten Knotenstrahls w unterscheidet sich von anderen Klassen durch die Richtung und die Geschwindigkeit der Knotenstrahlen. Eine Änderung dieser beiden Parameter hat jedoch keine Auswirkung auf die Konzeption der Datenstrukturen und der Minimierungsanfragen. Ein Typ-1Streifen unterscheidet sich lediglich darin von einem Typ-2-Streifen, dass er statt zwei Seiten nur eine besitzt. Das Konzept der vorgestellten Datenstrukturen ist jedoch auch für Streifen vom Typ 1 anwendbar. Die erste Stufe der Lowest-Intersection-Datenstrukturen dient in diesem Fall zwar nur noch der Überprüfung der x-Koordinate eines Bodenpunktes, doch sie bleibt notwendig. Die zweite Stufe der Ray-Shooting-Datenstrukturen fällt weg, da kein zweiter Bodenpunkt zur Verfügung steht. Die restlichen Stufen der Datenstrukturen bleiben in ihrer Funktion vollständig erhalten. In den vorgestellten Algorithmen 1 und 2 der sublokalen Minimierungsanfragen muss dementsprechend lediglich die Abfrage des zweiten Bodenpunktes gestrichen werden. Ein Streifen s vom Typ 4 erfordert eine Erweiterung der vorgestellten Datenstrukturen. Diese Erweiterung gestaltet sich für beide Typen von Minimierungsanfragen gleich. Betrachtet man einen Typ-1-Streifen, so besitzt ein Typ4-Streifen als einzigen Zusatz eine schräge Kante, welche die Fläche beschränkt, siehe Abbildung 6.17. Wir führen für jede Steigung dieser Schräge eine neue Koordinatenachse Ψ ein, welche in der Projektion auf die x-y-Ebene redundant ist und orthogonal zur Schräge der bedienten Streifen liegt. Man betrachte dazu Abbildung 8.2. Da die Anzahl der verschiedenen Steigungen von Schrägen nach Beobachtung 6.5 konstant ist, lässt Ψ sich diese Koordinatenachse Ψ für jede einzelne Datenstruktur anpassen. Wie seine restlichen Kanten definiert auch die Schräge des Streifens s eine Halbebene, die ein Knotenstrahl schneiden muss, um s zu treffen. Analog zu den ersten beiden Stufen einer Datenstruktur für Typ-1-Streifen x wird für Streifen vom Typ 4 eine zusätzliche Stufe vor der bisher letzAbbildung 8.2: Die Koordinatenrich- ten Stufe eingebaut, welche eine Prüfung der Ψ-Koordinate der Schräge tung Ψ. zulässt. Entsprechend dieser Erweiterung der Datenstrukturen wird der jeweilige Anfragealgorithmus ebenfalls um die entsprechenden Zeilen ergänzt. Somit hat jede der Datenstrukturen höchstens vier Stufen. y Stehen Datenstrukturen für alle Kombinationen aus Klassen von Knotenstrahlen und Streifen bereit, so können Minimierungsanfragen beantwortet werden. Im folgenden Abschnitt untersuchen wir, wie aus den sublokalen Ergebnissen der einzelnen Datenstrukturen die Antwort auf ein lokale Minimierungsanfrage erstellt wird. 92 8.7 Die Minimierungsanfragen Der Ergebnisfilter In Kapitel 5 untersuchten wir, wie bei einer Simulation der Wellenfrontausdehnung stets das nächste eintretende Ereignis vorhergesagt werden kann. Die globale Prognose bevorstehender Ereignisse von Eppstein (1995) erfordert Minimierungsanfragen wie in Abschnitt 5.3 vorgestellt. In den vergangenen Abschnitten haben wir die beiden Typen von Minimierungsanfragen beschrieben, jedoch jeweils nur für eine Kombination aus einer Streifenklasse und einer Ähnlichkeitsklasse von Knotenstrahlen. In diesem Abschnitt untersuchen wir, welche Mechanismen notwendig sind, um aus diesen sublokalen Prognosen die, für die globale Prognose erforderlichen lokalen Prognosen zu erstellen. Angenommen es wird für die globale Prognose eine Minimierungsanfrage mit Objekt ν gestellt. Diese Anfrage hat die Form: Welches Objekt ξ erzeugt mit Objekt ν als erstes ein Ereignis? Dabei ist ξ aus einer der möglichen Ähnlichkeitsklassen, und es ist a priori nicht möglich abzusehen, von welcher Klasse ξ ist. Daher muss die lokale Anfrage mit Objekt ν an alle Datenstrukturen weitergegeben werden, welche die Klasse des Objekts ν bedienen; die Anzahl solcher Datenstrukturen ist nach Lemma 6.5 konstant. In den einzelnen Datenstrukturen werden dann die Minimierungsanfragen mit Objekt ν durchgeführt. Die Ergebnisse dieser sublokalen Anfragen beantworten zunächst die folgende Frage: Welches Objekt ξ der Klasse K erzeugt mit Objekt ν als erstes ein Ereignis? Für jede sublokale Prognose wird nun die verbleibende Zeit bis zum Eintreten des vorhergesagten Ereignisses berechnet. Aus der konstant großen Menge der sublokalen Antworten wird anschließend von einem Ergebnisfilter in konstanter Zeit das Ereignis ermittelt, dessen Eintreten zeitlich als nächstes bevorsteht. Dieses Ereignis involviert nun das Objekt ξ, welches die ursprünglich gestellte lokale Minimierungsanfrage beantwortet. Ohne Beweis fassen wir das Ergebnis dieses Abschnitts im folgenden Lemma zusammen. Lemma 8.2 Antworten auf Minimierungsanfragen im Sinne von Abschnitt 5.3 können aus den Ergebnissen der sublokalen Datenstrukturen in konstanter Zeit erstellt werden. 8.8 Fractional-Cascading In diesem Abschnitt betrachten wir eine Verbesserung der in diesem Kapitel vorgestellten Datenstrukturen durch eine Technik bekannt als FractionalCascading. Chazelle und Guibas (1986a) stellten Fractional-Cascading erstmals vor. Dieses Verfahren stellt eine Augmentierung bestehender Datenstrukturen zur Beantwortung von Suchanfragen in Bäumen oder ganz allgemein in Graphen dar. Dazu werden spezielle Zeiger, genannt Brücken, eingeführt, welche ausnutzen, dass zwischen den kanonischen Untermengen von Knoten Korrelationen bestehen, so dass eine Suche in einer kanonischen Untermenge die Suche in einer anderen erleichtert. Unter anderem können auch orthogonale Bereichsanfragen mit Hilfe von Fractional-Cascading beschleuningt werden. Aufbauend auf den Ergebnissen von Chazelle und Guibas (1986a) (und der begleitenden Arbeit mit Anwendungen von Chazelle und Guibas (1986b)) beschreiben Mitchell u. a. (1987) wie Fractional-Cascading auch für Datenstrukturen genutzt werden 8.8 Fractional-Cascading 93 kann, welche dynamischen Einfüge- und Löschoperationen unterworfen sind. Es würde den Rahmen dieser Arbeit sprengen, dynamisches Fractional-Cascading für mehrdimensionale Bereichsbäume darzulegen. Daher wird für die Augmentierung der in diesem Kapitel dargelegten Datenstrukturen, sowie für die Beweise der asymptotischen Laufzeiten von Anfrage-, Lösch- und Einfügeoperationen auf die Arbeit von Mitchell u. a. (1987) verwiesen. Im Folgenden nehmen wir an, dass die beschriebenen Minimierungs-Datenstrukturen durch dynamisches Fractional-Cascading augmentiert werden. In Abschnitt 10.1 werden wir die folgenden Ergebnisse in unsere Berechnung der asymptotischen Laufzeit und des Speicherbedarfs einbeziehen. Sei ein d-dimensionaler Bereichsbaum gegeben, der mit Hilfe von Fractional-Cascading eine Menge von m Objekten für orthogonale Bereichsanfragen speichert, dann ergibt sich Folgendes: d−1 • Die Konstruktionszeit beträgt O(m(log m) d−1 • Der Speicherbedarf beträgt O(m(log m) log log m) ) • Lösch- und Einfügeoperationen benötigen jeweils eine Laufzeit von nur d−1 O((log m) log log m) d−1 • Eine Bereichsanfrage wird in einer Laufzeit von O(L+(log m) log log m) beantwortet, wobei L die Komplexität der Ausgabe ist. Man beachte, dass in unserem Problem nicht alle Treffer einer Anfrage ausgegeben werden, d−1 sondern nur der erste, was eine Laufzeit von O((log m) log log m) bedeutet. Priority-Search (siehe McCreight (1985)) bildet eine gute Alternative zu einem gewöhnlichen Bereichsbaum für den Fall, dass ein zweidimensionaler angefragter Bereich einseitig offen ist, also von der Form [x1 , x2 ] × [y1 , ∞). Mit dieser Technik lässt sich durch Augmentieren der Knoten eines Suchbaums eine Stufe der Datenstruktur einsparen. Somit benötigen Anfragen an eine PrioritySearch-Datenstruktur analog zur Fractional-Cascading-Technik eine geringere Laufzeit. In unserem Algorithmus sind Streifen vom Typ 1 bis 3 einseitig offen und auch zweidimensional. Allerdings benötigen wir für eine sublokale Vorhersage eine Ordnung der Treffer in Richtung der z-Koordinate, was in einer PrioritySearch-Datenstruktur nicht einfach zu implementieren ist. Gegenüber der (komplizierten) Fractional-Cascading-Technik bietet Priority-Search eine einfachere Datenstruktur, erfordert allerdings eine Anpassung bei der Implementation. Wir verzichten in dieser Arbeit auf eine detaillierte Betrachtung von Priority-Search. Mit diesem Abschnitt ist die Beschreibung des Konstruktionsalgorithmus der Quickest-Path-Map abgeschlossen. Eine Übersicht über die Funktionsweise des Algorithmus ist in Abbildung 10.1 gegeben, und die Untersuchung der asymptotischen Laufzeit und des Speicherbedarfs folgt in Kapitel 10. Im folgenden Kapitel betrachten wir zunächst, wie mit Hilfe der Quickest-Path-Map Anfragen beantwortet werden. Kapitel 9 Anfragen Nachdem in den vergangenen Kapiteln die Simulation der Wellenfrontausdehnung im Detail beschrieben wurde, betrachten wir in diesem Kapitel, wie wir nach dieser Vorarbeit in der Lage sind, eine Anfrage nach dem schnellsten Pfad zum nächsten Bezugspunkt in S = {ω1 , . . . , ωn } zu beantworten. Über die Laufzeit einer Anfrage an die Quickest-Path-Map stellen Aichholzer u. a. (2002) den folgenden Satz auf, welchen wir in diesem Kapitel konstruktiv beweisen werden: Satz 9.1 (nach Aichholzer u. a. (2002)) Sei ein beliebiger Anfragepunkt p gegeben. Der schnellste Pfad Q(p, S) von p zu S kann mit Hilfe von PointLocation in der Quickest-Path-Map in einer Laufzeit von O(L + log n) gefunden werden, wobei L die Komplexität des Pfades ist. 9.1 Die Quickest-Path-Map Das Resultat unserer Bemühungen die Wellenfrontausdehnung ausgehend von S gemäß der City-Metrik zu simulieren ist die Quickest-Path-Map (beziehungsweise das verfeinerte City-Voronoi-Diagramm) VC (S), wie in Abschnitt 2.2 beschrieben. Bei jedem Ereignis, das für die Wellenfrontausdehnung global vorhergesagt wird, wird mindestens ein Streifen fertiggestellt und somit der QuickestPath-Map eine weitere Region zugefügt. Dabei wird das zugehörige definierende Element (siehe Abschnitt 3.5) gespeichert. Der Prozess ist beendet, wenn schließlich kein weiteres Ereignis mehr vorhergesagt wird. Zu diesem Zeitpunkt werden Randregionen als abgehandelt betrachtet und dementsprechend wie in Abschnitt 3.3.3 beschrieben als (unbeschränkte) Regionen von VC (S) gespeichert oder bestehenden Regionen hinzugefügt. Darüber hinaus werden den Randregionen in gewohnter Weise definierende Objekte zugewiesen. Bei der Speicherung der Quickest-Path-Map spielen die z-Koordinaten der Kanten und Knoten von VC (S) keine Rolle und werden nicht mit abgespeichert. Diese waren lediglich für den Konstruktionsprozess relevant. Ebenso werden die zusätzlichen Konstruktionskanten von KV nicht weiter berücksichtigt. Im folgenden Abschnitt betrachten wir eine Datenstruktur, die als Nebenprodukt des Konstruktionsprozesses von VC (S) entsteht und die Pfadsuche vereinfacht. 96 9.2 Anfragen Der Quickest-Path-Graph Bei der Simulation der Wellenfront speichern wir in der Quickest-Path-Map Knoten, Kanten und Regionen sowie definierende Objekte und die in Abschnitt 3.5 definierten β-Kanten. Wie in Abschnitt 6.4.1 bereits definiert, unterscheiden wir in VC (S) zwei grundsätzliche Typen von Kanten: gezogene Kanten und PionierKanten. In diesem Abschnitt betrachten wir einen Graphen, der den wesentlichen Teil einer Pfadanfrage an die Quickest-Path-Map beantworten kann; er wird von Aichholzer u. a. (2002) in ähnlicher Form erstellt und genutzt. Definition 9.1 (Quickest-Path-Graph) Die Einschränkung von VC (S) auf die Knoten sowie die gerichteten Pionier- und β-Kanten ergibt den QuickestPath-Graph T (S). Der Quickest-Path-Graph ist zwar kein Baum, da der T (S) entsprechende ungerichtete Graph T 0 (S) nicht notwendigerweise zyklenfrei ist (siehe Abbildung 3.10), jedoch ist T (S) zyklenfrei, und für den Eingangsgrad degin der Knoten VT (S) von T (S) gilt: ∀v ∈ VT (S) , v ∈ / S : degin (v) ≥ 1 degin (ω) = 0 Somit sind alle ω ∈ S Quellen. Der Quickest-Path-Graph ist zusammenhängend, da seine Kanten durch die kontinuierliche Wellenfrontausdehnung erzeugt wurden. Dabei sei erwähnt, dass die Menge der Kanten des Quickest-PathGraphs bei Typ-B-Ereignissen zunächst unzusammenhängend werden kann. Die Nutzung von β-Kanten (Zeigern) sichert jedoch auch in diesem Fall, dass der Quickest-Path-Graph zusammenhängend bleibt; siehe dazu Abschnitt 3.5. Man kann sich den Quickest-Path-Graphen als eine Menge von Bäumen vorstellen, welche jeweils einen Bezugspunkt ωi als Wurzel haben und sich teilweise überlappen. Diese Struktur des Quickest-Path-Graphs T (S) lässt die folgende Beobachtung zu: Beobachtung 9.1 (S als Menge von Senken ) Für jeden Punkt p ∈ T (S) gilt: Folgt man von p aus den Kanten von T (S) sukzessiv entgegen ihrer Orientierung, so gelangt man zu S. An Knoten v von T (S) mit degin (v) ≥ 2 wählt man eine beliebige nächste Kante. Beweis. Man betrachte den zu T (S) inversen Graph T (S), dessen Kanten jeweils entgegengesetzte Orientierung besitzen. Der gerichtete Graph T (S) ist zyklenfrei, da T (S) zyklenfrei ist. Somit ist jeder Pfad, der sukzessive den orientierten Kanten von T (S) folgt, endlich. Da weiterhin T (S) zusammenhängend ist und als Senken ausschließlich die Elemente von S hat, ist der Endknoten jedes solchen Pfades ein Element ω von S. Wir nennen einen Pfad, der entsteht, indem man von p ∈ T (S) aus sukzessiv den Kanten von T (S) entgegen ihrer Orientierung folgt, einen Te-Pfad. Soll der Quickest-Path-Graph für die Pfadsuche genutzt werden, so gilt es noch zu zeigen, wie ein Te-Pfad in einen isothetischen Pfad nach S umgesetzt werden kann, und dass ein solcher Pfad tatsächlich ein schnellster Pfad nach S ist. 9.2 Der Quickest-Path-Graph 97 ϕ e2C a r e1C eβ m b ωi Abbildung 9.1: Der β-Kanten-Pfad für die β-Kante eβ von a (definierendes Element der Region r) nach b als isothetischer Pfad. Während Pionier-Kanten stets isothetisch sind, sind dies β-Kanten im Allgemeinen nicht. Pionier-Kanten können somit direkt als Kanten eines Pfades genutzt werden, während β-Kanten genauere Betrachtung erfordern. Nach Definition 3.8 verbindet eine (gerichtete) β-Kante das definierende Element einer Region, welches in ein Typ-B-Ereignis involviert ist, mit dem Ort, an dem das Ereignis stattfindet. Um wie bei Pionier-Kanten dem inversen Verlauf der Wellenfrontausbreitung zu folgen, ist es bei β-Kanten relevant, welcher Figur die Kante entstammt, die das entsprechende Typ-B-Ereignis erzeugt hat. Beobachtung 9.2 (β-Kanten-Pfad) Der schnellste Pfad vom Startknoten a = (xa , ya ) zum Endknoten b = (xb , yb ) einer nicht isothetischen β-Kante eβ besteht aus zwei Kanten und drei Knoten. Sei ϕ die in eβ gespeicherte Neigung der Kanten der Wellenfront der involvierten Region. Für die Koordinaten (xm , ym ) des mittleren Knotens m gilt: ( (xa , yb ) falls ϕ ≥ 45◦ , (xm , ym ) = (9.1) (xb , ya ) falls ϕ < 45◦ Den Pfad (a, m, b) nennen wir β-Kanten-Pfad. Er kann in konstanter Laufzeit berechnet werden. Beweis. Zum Beweis der Behauptung betrachte man Abbildung 9.1. Die Neigung einer Kante der Wellenfrontkante gibt an, in welcher Richtung die Wellenfront sich (durch das Netzwerk) schneller ausdehnen kann. Die Wellenfront breitet sich demnach auf einem Pfad wie dargestellt aus. Ist ϕ = 45◦ , so beschleunigt kein Netzwerksegment die lokale Wellenfrontausdehnung, somit ist der Pfad der Wellenfrontausdehnung in diesem Fall nicht eindeutig. Für die konstante Laufzeit ist nichts zu beweisen. Man beachte, dass bezüglich der L1 -Norm für die Länge des Pfades (a, m, b) gilt: ||(a, m, b)||Manhattan = ||a − b||1 . Es ist also der Manhattan-Abstand von a und b gleich der Länge des β-Kanten-Pfads bezüglich der L1 -Norm. Aber bezüglich der City-Metrik gilt diese Gleichung nicht, da sie das Segment e1C nicht 98 Anfragen berücksichtigt. Für die City-Metrik gilt somit die Ungleichung ||(a, m, b)||City < ||a − b||1 . Mit Hilfe von Beobachtung 9.2 können wir nun die nicht isothetischen Kanten eines Te-Pfads durch isothetische Kanten ersetzen. Somit können wir für jeden Punkt p ∈ T (S) einen isothetischen Pfad nach S angeben. Definition 9.2 (T -Pfad) Ein Pfad heißt T -Pfad, wenn er von einem Punkt p ∈ VT (S) (VT (S) ist die Knotenmenge von T (S)) aus sukzessiv den Kanten von T (S) entgegen ihrer Orientierung folgt, und wenn β-Kanten entsprechend Beobachtung 9.2 durch β-Kanten-Pfade ersetzt sind. Offensichtlich besteht ein T -Pfad aus isothetischen Kanten und endet nach Beobachtung 9.1 in S. Das folgende Lemma garantiert nun zusammenfassend, dass es sich bei einem T -Pfad tatsächlich um einen schnellsten Pfad handelt. Lemma 9.1 (T -Pfade sind schnellste Pfade) Für einen gegebenen Punkt p ∈ T (S) ist ein T -Pfad ein schnellster Pfad Q(p, S) von p nach S. Beweis. Nach Argumenten aus Abschnitt 3.3 simuliert die Wellenfront bei ihrer Ausdehnung alle möglichen schnellsten Pfade zugleich. Somit genügt es zu zeigen, dass ein T -Pfad den Pfad eines Punktes der Wellenfront exakt zurückverfolgt. Für Pionier-Kanten ist dies nach Definition 6.3 gegeben. Für β-Kanten-Pfade trifft dies nach Beobachtung 9.2 ebenfalls zu. Die Verkettung der Kanten eines T -Pfads stellt somit den Pfad eines Punkts der Wellenfront dar, welchen der T -Pfad zurückverfolgt. Nach Beobachtung 9.1 endet der Pfad in S. Es sei an dieser Stelle angemerkt, dass ein T -Pfad nicht eindeutig sein muss, man betrachte dazu Abbildung 3.10. Hier hat der Knoten vC bezüglich des Quickest-Path-Graphen den Eingangsgrad zwei. Im nächsten Abschnitt betrachten wir mit Hilfe von Lemma 9.1 die Suche nach dem schnellsten Pfad Q(p, S) von einem beliebigen gegebenen Punkt p der Ebene zu einem der Bezugspunkte ω ∈ S. 9.3 Die Pfadsuche Sei die Quickest-Path-Map VC (S) für ein gegebenes Transportnetzwerk C und eine Menge S von Bezugspunkten fertiggestellt und eine Quickest-Path-Anfrage mit dem Anfragepunkt p gegeben. Die Suche nach dem schnellsten Pfad von p nach S (und andersherum) erfolgt in drei Schritten: 1. Es wird die Region r der Quickest-Path-Map festgestellt, in der p liegt. 2. Es wird gegebenenfalls der schnellste Pfad von p zum definierenden Objekt Def(r) von r gesucht. 3. Ausgehend von Def(r) wird der T -Pfad nach S festgestellt. Während wir den dritten Schritt bereits im vorigen Abschnitt dargelegt haben, betrachten wir die ersten beiden Schritte in den folgenden Abschnitten. In Abschnitt 9.3.3 beschreiben wir zusammenfassend einen Algorithmus zur Beantwortung einer Quickest-Path-Anfrage und zeigen dessen Korrektheit. 9.3 Die Pfadsuche 9.3.1 99 Point-Location Wie in Abschnitt 3.5 dargelegt, stellen die Regionen der Quickest-Path-Map Bereiche kombinatorisch äquivalenter schnellster Pfade zu S dar. Somit beginnt die Suche des schnellsten Pfades für einen Anfragepunkt p damit, die Region r zu finden, welche p enthält. Um die Region r ∈ VC (S) mit p ∈ r zu finden, ist es also notwendig für p eine Point-Location in einer Partition der Ebene mit O(c + n) Regionen, Knoten und Kanten durchzuführen. Für den Fall, dass p genau auf einer Kante oder auf einem Knoten der Quickest-Path-Map liegt, sei noch einmal angemerkt, dass es keine Rolle spielt, welcher der inzidenten Regionen p zugeordnet wird, da an solchen Orten verschiedene Teile der Wellenfront zeitgleich auftreffen. Die folgende Aussage ist eine bekannte Tatsache aus der algorithmischen Geometrie und ist zum Beispiel in de Berg u. a. (2001) nachzulesen: Fakt 9.1 (Point-Location) Für eine Partition der Ebene mit Komplexität O(m) kann nach einer Laufzeit von O(m log m) eine Datenstruktur DPL erstellt werden, welche einen Speicherbedarf von O(m) hat und Point-Location-Anfragen mit einer Laufzeit von O(log(m)) beantwortet. Point-Location stellt ein traditionelles Problem der algorithmischen Geometrie dar. Es existiert eine Vielzahl von Ansätzen, welche jeweils zu den in Fakt 9.1 genannten Ergebnissen führen. Dabei werden nach de Berg u. a. (2001) die folgenden vier grundsätzlich verschiedenen Methoden unterschieden: 1. Die Chained-Method nach Edelsbrunner u. a. (1986), welche mit SegmentBäumen (siehe de Berg u. a. (2001)) und Fractional-Cascading (siehe dazu Kapitel 11 sowie Chazelle und Guibas (1986a) und Chazelle und Guibas (1986b)) arbeitet. 2. Die Methode der Triangulierungsverfeinerung nach Kirkpatrick (1983). 3. Die Nutzung von Persistenz nach Sarnak und Tarjan (1986). 4. Die randomisiert-inkrementelle Methode nach Mulmuley (1990). Da Point-Location nicht zentraler Punkt dieser Arbeit ist, wird auf eine detaillierte Betrachtung möglicher Techniken an dieser Stelle verzichtet und auf die genannten Referenzen verwiesen. Als direktes Resultat von Fakt 9.1 halten wir die folgende, unserer Problematik entsprechende Beobachtung fest: Beobachtung 9.3 (Point-Location in VC (S)) Nach einer Vorverarbeitungszeit von O((c + n) log(c + n)) kann aus VC (S) eine Point-LocationDatenstruktur der Größe O(c + n) erstellt werden, mit der in einer Laufzeit von O(log(c + n)) die Region r ∈ VC (S) mit p ∈ r bestimmt werden kann. Da eine solche Point-Location-Datenstruktur DPL lediglich eine andere Darstellung der Quickest-Path-Map ist, jedoch dieselben Informationen enthält, bezeichnen wir DPL im Folgenden im Sinne der Übersichtlichkeit weiterhin als Quickest-Path-Map VC (S). Im nächsten Abschnitt untersuchen wir, wie nach erfolgter Point-Location für den Anfragepunkt p ∈ r der schnellste Pfad zum definierenden Objekt Def(r) der Region r festgestellt wird. 100 9.3.2 Anfragen Zum definierenden Objekt Nachdem wir den Anfragepunkt p in der Quickest-Path-Map lokalisiert haben, stellen wir nun den schnellsten Pfad zu dem definierenden Objekt epC Def(r) der Region r fest, in der p sich p befindet. Sei für den Anfragepunkt p r eβ also die (oder eine) Region r ∈ VC (S) mit p ∈ r bekannt und wie in Abωi = dr schnitt 6.4.2 jeder Region das entsprechende definierende Objekt zugeordnet. Das Problem, den schnellsten Pfad von p zu Def(r) zu finden, ist äquivalent zu dem in Beobachtung 9.2 gelösten Problem, den β-Kanten-Pfad Abbildung 9.2: Der Pfad von p ∈ r zum einer β-Kante zu finden. Dies wird ofdefinierenden Objekt Def(r) ist ein β- fenbar, wenn man sich vorstellt, dass Kanten-Pfad. bei p ein hinreichend kleines Netzwerksegment epC (hellgrau) beginnt, welches nicht vor dem Punkt p von der Wellenfront erreicht wird, siehe Abbildung 9.2. Da nach Abschnitt 6.4.2 für jede Region die Neigung ϕ der auszeichnenden Kanten der Wellenfront gespeichert ist, können wir somit entsprechend Beobachtung 9.2 den schnellste Pfad von p nach Def(r) in konstanter Laufzeit berechnen. 9.3.3 Der schnellste Pfad Mit Hilfe der Ergebnisse aus den vergangenen Abschnitten können wir nun einen Algorithmus angeben, der aus der Quickest-Path-Map den schnellsten Pfad Q(p, S) von p nach S feststellt. Die Funktion Π.append(p) ist eine Methode des Objekts Π. Sie fügt an das Ende der Liste Π das Objekt p an. Algorithmus 3 Ausgabe der Knoten des schnellsten Pfades von p nach S. Anforderung: Datenstruktur VC (S), Anfragepunkt p Ergebnis: kürzester Weg Π von p nach S 1: Π ← ∅ 2: Π.append(p) 3: Finde mittels Point-Location in VC (S) die Region r ∈ VC (S) mit p ∈ r 4: Def(r) ← definierendes Objekt von r 5: vm ← mittlerer Knoten des β-Kanten-Pfads von p nach Def(r) 6: Π.append(vm ) 7: Π.append(Def(r)) 8: v ← Def(r) 9: solange v ∈ / S führe aus 10: v ← Nachfolger von v auf dem T -Pfad von Def(r) nach S 11: Π.append(v) 12: ende 13: Gib als Antwort Π aus. 9.3 Die Pfadsuche 101 Satz 9.2 (Algorithmus 3) Für einen gegebenen Anfragepunkt p und eine gegebene Quickest-Path-Map der Komplexität O(c + n) gibt Algorithmus 3 die Knoten eines schnellsten Pfads Q(p, S) von p nach S aus. Die Laufzeit beträgt O(L + log(c + n)), wobei L die Anzahl ausgegebener Knoten ist. Der asymptotische Speicherbedarf ist identisch mit dem der Quickest-Path-Map. Beweis. Wir beweisen zunächst die Laufzeit, anschließend die Korrektheit des Algorithmus. Der Speicherbedarf ergibt sich direkt aus Fakt 9.1. Nach Abschnitt 9.3.1 kann Schritt 2 in einer Laufzeit von O(log(c + n)) durchgeführt werden. Der β-Kanten-Pfad in Schritt 4 kann nach Beobachtung 9.2 in konstanter Zeit festgestellt werden. Die Schleife zwischen Schritt 8 und Schritt 11 wird (L−1) mal durchlaufen, wobei L die Anzahl der Knoten des T -Pfads von Def(r) nach S ist. Die Schleife endet nach Lemma 9.1 bei einem Knoten ωi ∈ S. Die Schritte in der Schleife können durch die Verzeigerung der gerichteten Kanten jeweils in konstanter Zeit durchgeführt werden. Alle restlichen Schritte können ebenfalls in konstanter Zeit durchgeführt werden. Somit ergibt sich die angegebene Laufzeit. Betrachtet man die Ausgabe Π von Algorithmus 3 in umgekehrter Reihenfolge, so erhält man zunächst einen schnellsten Pfad von S nach Def(r) und somit den Pfad eines Punktes der Wellenfront. Der inverse β-Kanten-Pfad von Def(r) zum Anfragepunkt p ist eine Fortsetzung dieses Pfades zu p, da Def(r) definierendes Objekt der Region r ist, in der sich p befindet. Somit stellt der zu Π inverse Pfad einen Pfad dar, den ein Punkt der Wellenfront von S nach p nutzte. Nach Argumenten aus Abschnitt 3.3 stellt Π folglich einen schnellsten Pfad Q(p, S) vom Anfragepunkt p zu einem der Bezugspunkte in S dar. Kapitel 10 Analyse der Ergebnisse In diesem Kapitel untersuchen wir die in dieser Arbeit beschriebenen Algorithmen und Datenstrukturen abschließend auf ihre asymptotische Laufzeit und ihren Speicherbedarf. Dabei betrachten wir zunächst den Konstruktionsalgorithmus für die Quickest-Path-Map und anschließend den Anfragealgorithmus. Anschließend betrachten wir einige potentielle Degeneriertheiten, welche auftreten können. Abbildung 10.1 zeigt schematisch die Komponenten des Konstruktionsalgoi,j rithmus. Die Lowest-Intersection-Datenstruktur DLI bedient die Ähnlichkeitsj i klasse KS von Streifen sowie KK von Knotenstrahlen. Analog dazu bedient die i,j i und KSj . Man beachte, dass Ray-Shooting-Datenstruktur DRS die Klassen KK die in Abschnitt 8.3 dargelegte Aufteilung gewisser Datenstrukturen, welche erweiterte Segmente des Netzwerks speichern, nach der Geschwindigkeit auf den Segmenten, nicht abgebildet ist. Nach Lemma 8.1 können wir diese jedoch bei Laufzeit- und Speicherbedarfsberechnungen außer Acht lassen. Der Ergebnisi sucht aus den sublokalen Vorhersagen der verschiedenen Lowest-Infilter DLI tersection-Datenstrukturen, welche jeweils die Streifenklasse KSi sowie eine der τ verschiedenen Klassen von Knotenstrahlen bedient, das nächste Ereignis aus und gibt es als lokale Vorhersage an die globale Vorhersage weiter. Analoges gilt i für den Ergebnisfilter DRS . In Abbildung 10.1 ist die Zeitkorrektur der Anfragen (siehe Abschnitt 7.1.6) in den sublokalen Datenstrukturen integriert. 10.1 Konstruktion der Quickest-Path-Map In diesem Abschnitt untersuchen wir komponentenweise die asymptotische Laufzeit und den Speicherbedarf des Konstruktionsalgorithmus der Quickest-PathMap. Dabei beginnen wir mit den sublokalen Vorhersagen. Orthogonale Bereichsanfragen sind ein weit verbreitetes Problem, und es wurde schon in den jungen Jahren der algorithmischen Geometrie eine Vielzahl von Techniken entwickelt um sie schnell zu beantworten. Die in den Abschnitten 8.1 und 8.4 dargelegten Datenstrukturen nutzen einen 3- oder 4-dimensionalen Bereichsbaum, welcher eine recht verbreitete und übersichtliche Lösung darstellt. Ein d-dimensionaler Bereichsbaum für m Objekte hat einen Speicherbedarf von 104 Analyse der Ergebnisse Quickest-Path-Map VC (S) Objekte werden abgehandelt oder erzeugt Eintragungen Objekte werden eingefügt Wellenfront WS (t) Änderungen Auswertung des global vorhergesagten, nächsten Ereignisses Globale Vorhersagen Transformation f Technik von Eppstein und Erickson (1999) (Satz 5.1) Zeitkorrektur Lokale Vorhersagen Ergebnisfilter 1 DRS 1 DLI 2 DLI σ DLI 1,1 DLI 1,2 DLI 1,σ DLI 2,1 DLI τ,1 DLI τ,2 DLI τ,σ DLI Lowest-IntersectionDatenstrukturen Sublokale Vorhersagen Objekte werden gelöscht Konstruktionsdiagramm KV 1,1 DRS 2 DRS τ DRS 1,2 DRS 1,τ DRS σ,2 DRS σ,τ DRS 2,1 DRS σ,1 DRS Ray-ShootingDatenstrukturen Abbildung 10.1: Die Konstruktion der Quickest-Path-Map. 10.1 Konstruktion der Quickest-Path-Map d−1 105 d−1 O((m)(log m) ) und kann in einer Laufzeit von O((m)(log m) ) erstellt werden (siehe zum Beispiel de Berg u. a. (2001)). Wie schon in Abschnitt 8.1 erwähnt, bedürfen Lösch- und Einfügeoperationen in einem AVL-Baum mit m Objekten einer Laufzeit von O(log m) (inklusive der Zeit zum Balancieren). d−1 Da Bereichsbäume aus AVL-Bäumen bestehen, und jedes Objekt in (log m) AVL-Bäumen gespeichert ist, beträgt die Laufzeit zum dynamischen Einfügen und Löschen von Objekten aus einem d-dimensionalen Bereichsbaum, welcher m d Objekte speichert, O((log m) ). Die Anfragezeit an einen solchen Baum beträgt d O((log m) ). Diese Ergebnisse sind von Lamoureux (1996) sowie Preparata und Shamos (1993) umfassend dargelegt und bewiesen. Wir augmentieren jedoch Bereichsbäume wie in Abschnitt 8.8 angekündigt durch die Fractional-Cascadingd−1 Technik, wodurch sich die Konstruktionszeit auf O(m(log m) log log m) red−1 duziert. Der Speicherbedarf beträgt O(m(log m) ), Lösch- und Einfügeoped−1 rationen benötigen eine Laufzeit von O((log m) log log m), und Bereichsanfragen mit nur einem ausgegebenen Element können in einer Laufzeit von d−1 O((log m) log log m) beantwortet werden. Im Zuge der Wellenfrontausdehnung erstellen wir unseren Bereichsbaum rein dynamisch, das heißt, er speichert beim Start der Wellenfront keine Objekte. Dies bedeutet, dass die initiale Konstruktionszeit eines Bereichsbaumes vernachlässigt werden kann und nur die dynamischen Änderungen abgezählt werden müssen. Nach Korollar 3.1 fügen wir O(c + n) Objekte in den Bereichsbaum ein. Die Anzahl der Löschoperationen lässt sich somit ebenfalls durch (c + n) beziffern. Unsere Bereichsbäume für Ray-Shooting- und Lowest-Intersection-Anfragen haben nach Abschnitt 8.6 höchstens vier Stufen. Die asymptotische Laufzeit für die Aufrechterhaltung der Bereichsbäume über den gesamten Konstruktionsprozess der Quickest-Path-Map beträgt somit 3 O((c + n)(log(c + n)) log log(c + n)). Der asymptotische Speicherbedarf eines 3 solchen Baumes beträgt O((c + n)(log(c + n)) ). Der Ergebnisfilter, der die Ergebnisse der sublokalen Vorhersagen zu einer lokalen Vorhersage zusammenfasst und an die globale Vorhersage weitergibt, benötigt für jede Anfrage konstante Zeit, da für eine lokale Vorhersage nach Lemma 6.5 nur eine konstante Anzahl sublokaler Ergebnisse vorliegt. Die asymptotische Laufzeit des Ergebnisfilters beträgt somit für eine Anfrage O(1). Die globale Vorhersage benötigt nach Satz 5.1 zum Aufrechterhalten des nächsten Ereignisses für jede Einfügeoperation eine Laufzeit von O(T (c + n) log (c + n)) und für jede Löschoperation eine Laufzeit von 2 O(T (c + n)(log(c + n)) ), wobei T (c + n) die Laufzeit für die Antwort einer Minimierungsanfrage (bestehend aus sublokaler und lokaler Anfrage) ist. 3 Dies ergibt bei T (c + n) = O((log(c + n)) log log(c + n)) + O(1) eine Lauf4 zeit von O((log(c + n)) log log(c + n)) pro Einfügeoperation beziehungsweise 5 O((log(c + n)) log log(c + n)) pro Löschoperation. Nach Korollar 3.1 treten bei der Wellenfrontausdehnung O(c + n) Ereignisse auf. Weiterhin erzeugt jedes Ereignis nach Abschnitt 3.3.3 jeweils eine konstante Anzahl von Änderungen an der Wellenfront, somit erfolgen insgesamt O(c + n) Einfüge- und Löschoperationen an der Wellenfront. Die asymptotische Gesamtlaufzeit der 5 globalen Vorhersage beträgt somit O((c + n)(log(c + n)) log log(c + n)). Der Speicherbedarf der globalen Vorhersage ist nach Satz 5.1 identisch mit dem der 3 Minimierungsanfragen und somit O((c + n)(log(c + n)) ). 106 Analyse der Ergebnisse Die Verarbeitung jedes global vorhergesagten Ereignisses zieht neben den im letzten Absatz erwähnten Einfüge- und Löschoperationen auch Änderungen an der Wellenfront WS (t) und somit am Konstruktionsdiagramm KV nach sich, sowie potentiell eine Eintragung in der Quickest-Path-Map VC (S). Da jedes Ereignis nach Abschnitt 3.3.3 Änderungen an der Wellenfront von konstantem Umfang erzeugt, besitzt jede der genannten Operationen jeweils einen konstanten Umfang und somit konstante Laufzeit. Der Speicherbedarf der Wellenfront, der Quickest-Path-Map und des Konstruktionsdiagramms beträgt nach Korollar 3.1 jeweils O(c + n). Die Zeitkorrektur der Anfragen und der in die MinimierungsDatenstrukturen eingefügten Objekte sowie die Transformation f benötigen offensichtlich jeweils nur eine konstante Laufzeit pro Objekt und haben somit keine Auswirkungen auf die restlichen asymptotischen Berechnungen. 10.2 Das Ergebnis In den letzten Kapiteln haben wir einen Algorithmus zur Erstellung der Quickest-Path-Map skizziert und somit einen konstruktiven Existenzbeweis für einen Algorithmus mit der im letzten Abschnitt dargelegten Laufzeit geliefert. Zudem haben wir einen Algorithmus zur Pfadsuche in der Quickest-Path-Map angegeben. Wir fassen nun das wesentliche Resultat dieser Arbeit zusammen: Satz 10.1 (Schnellste Pfade) Für ein isothetisches Transportnetzwerk mit c Kanten, einer konstanten Auswahl von Transportgeschwindigkeiten und einer Menge S von n Bezugspunkten ist es möglich, in einer asymptotischen Laufzeit 5 von O((c+n)(log(c + n)) log log(c+n)) und bei einem Speicherbedarf von O((c+ 3 n)(log(c + n)) ) eine Quickest-Path-Map für die City-Metrik zu erstellen, in der Anfragen nach schnellsten Pfaden zu S in einer Laufzeit von O(L + log(c + n)) beantwortet werden, wobei L die Komplexität der Ausgabe ist. Beweis. Die asymptotische Laufzeit der globalen Vorhersage übertrifft nach Abschnitt 10.1 diejenige aller restlichen Komponenten des Konstruktionsalgorithmus. Die Laufzeit für die Aufrechterhaltung der globalen Prognose bei einer Löschoperation in einer vierstufigen Datenstruktur von 5 O((log(c + n)) log log(c + n)) dominiert die Laufzeiten der restlichen Operationen, welche für die globale Prognose notwendig sind. Bei O(c + n) Ereignissen (siehe Abschnitt 3.4) beträgt die asymptotische Laufzeit der Kon5 struktion somit O((c + n)(log(c + n)) log log(c + n)). Der Speicherbedarf von 3 O((c + n)(log(c + n)) ) ergibt sich aus den im letzten Abschnitt ausgeführten Argumenten basierend auf Satz 5.1. Die Laufzeit einer Anfrage beträgt nach Satz 9.2 O(L + log(c + n)). Speichert man sukzessiv für jede Region der Quickest-Path-Map schon während des Konstruktionsprozesses den nächsten Bezugspunkt, von dem die auszeichnende Kante der Wellenfront ursprünglich herrührt, so ergibt sich aus Satz 10.1 direkt das folgende Korollar: Korollar 10.1 (Nächster Bezugspunkt) Die konstruierte Quickest-PathMap beantwortet Anfragen nach dem nächsten Bezugspunkt in einer Laufzeit von O(log(c + n)). 10.3 Degeneriertheiten und Besonderheiten 10.3 107 Degeneriertheiten und Besonderheiten In diesem Abschnitt betrachten wir einige technische Details des StraightSkeletons, welche zu degenerierten Situationen und Besonderheiten führen. Keine der im Folgenden angesprochenen Problematiken haben Auswirkungen auf das Ergebnis dieser Arbeit, jedoch verdienen sie Erwähnung, da sie entweder bei einer Implementierung beachtet werden müssen oder schlichtweg interessant sind. 10.3.1 h-orientierte Straight-Skeletons In Abschnitt 2.1 haben wir das gewichtete Straight-Skeleton vorgee2 stellt, und im Verlaufe dieser Arbeit, e3 insbesondere in Beobachtung 6.4, haben wir erarbeitet, dass die Kanten v der bei der Wellenfrontausdehnung genutzten Figuren nur eine konstante Anzahl verschiedener Steigungen besitzen können. Das Straight-Skeleton Abbildung 10.2: Das Straight-Skeleton einer Figur, dessen Kanten nur h vereiner h-orientierten Figur ist nicht wohl- schiedene Steigungen besitzen können, wird h-orientiert genannt. Tatdefiniert. sächlich gibt es ernste Probleme ein h-orientiertes Straight-Skeleton überhaupt zu definieren.1 Man betrachte die orthogonale Figur P in Abbildung 10.2. Alle Kanten außer der Kante e1 besitzen die Geschwindigkeit 1, und e1 wandert mit der Geschwindigkeit 2 nach innen. Doch was passiert am Punkt v, an dem die Kante e2 durch ein Typ-CEreignis verschwindet und die Kanten e1 und e3 kollinear sind? Die Kante e1 bewegt sich weiter mit höherer Geschwindigkeit als e3 . Eine solche Situation lässt sich vermeiden, indem man die P perturbiert, das heißt man verändert die Figur geringfügig um die Orthogonalität von P aufzuheben. Jedoch führt dies je nach Art und Weise des Perturbierens zu verschiedenen Ergebnissen. Wir können auf eine Lösung dieser Problematik an dieser Stelle verzichten, da in unserem Modell zwar in seltenen Fällen (siehe Abbildung 3.21) orthogonale Figuren entstehen können, in diesen jedoch keine zwei parallele Seiten unterschiedliche Geschwindigkeiten besitzen können. Dies ergibt sich aus Abschnitt 6.3, in dem wir argumentieren, dass eine direkte Abhängigkeit zwischen der translationalen Geschwindigkeit einer Kante und ihrer Steigung besteht. e1 10.3.2 Simultane Ereignisse Die im vergangenen Abschnitt erwähnte Abbildung 3.21 deutet an, dass Ereignisse durchaus simultan eintreten können. Dies ist offenbar auch durch eine nicht degenerierte Ausgangssituation möglich. Abbildung 10.3 zeigt, wie parallel aufeinandertreffende Kanten eines Straight-Skeletons in der Kante e enden. Drei 1 Dank an Jeff Erickson für seine Anregung in dieser Sache. 108 Analyse der Ergebnisse 3 vW v2 e2C 1 vC eC e r 1 vW 1 1 r2 v r3 ωi 2 vW Abbildung 10.3: Die Wellenfrontausdehnung endet in einer Kollision von Kanten. Abbildung 10.4: Spezielle gezogene Kanten. simultane Ereignisse sind hier zu behandeln: die beiden Seitenkanten verschwinden, und die beiden langen Kanten treffen in einem flachen Typ-D-Ereignis aufeinander. Es bleibt der Implementation überlassen, wie solche Ereignisse gehandhabt werden. Es wäre auch denkbar Abbildung 10.3 als Spezialfall der in Abbildung 3.9 aufgezeigten Situation zu behandeln. Ähnliches gilt für die Situation in Abbildung 3.10, wo an vC mehrere Typ-D- und Typ-A-Ereignisse eintreten (die Typ-A-Ereignisse können auch als Typ-B-Ereignisse behandelt werden). 10.3.3 Selbstständige gezogene Kanten In Abschnitt 6.2 haben wir Skelettkanten in Pionier- und gezogene Kanten eingeteilt. Abbildung 10.4 zeigt zwei (beziehungsweise drei) interessante gezogene 3 Knotenstrahlen auf. Der Knotenstrahl vW trennt die Regionen der Ebene, wel1 3 che über die beiden Segmente eC und e2C erreicht werden. Zwar ist vW ein gezogener Knotenstrahl, dennoch bewegt er sich entsprechend der City-Metrik, da er ebensoschnell gezogen wird, und kann somit auch als Pionier-Knotenstrahl angesehen werden. Beim Knoten v1 des Straight-Skeletons entsteht eine weitere interessante Situation. Die Fläche bestehend aus r1 , r2 und r3 ist aus der Sicht des Dachmodells eine durchlaufende Dachfläche, so dass intuitiv diese drei Regionen zusammengefasst werden können. Jedoch besitzen die Regionen r1 und r3 andere definierende Elemente (Endpunkt von e1C und ω). Der Region r2 (links unten) kann nun als definierendes Element entweder v 1 , ω oder sogar vC zugeordnet 1 2 werden, und dementsprechend also entweder der Knotenstrahl vW oder vW oder sogar beide eingebaut werden. Wieder ist dies der Implementation überlassen, da die resultierenden schnellsten Pfade gleiche Länge haben. 10.4 Der Einfluss von k 10.4 109 Der Einfluss von k Bei der Untersuchung der asymptotischen Laufzeiten und des Speicherplatzes haben wir implizit festgestellt, dass eine konstante Anzahl von Geschwindigkeiten auf dem Transportnetzwerk C keine Verschlechterung zur Folge hat. Dennoch verdient der Parameter k, der bislang schlichtweg als konstant angenommen wurde, einige Aufmerksamkeit. Mit einem gegebenen Wert k ergibt sich Folgendes: • Für Pionier-Knotenstrahlen gibt es (k + 1) Geschwindigkeiten und 4 Richtungen, und somit 4(k + 1) Klassen von Pionier-Knotenstrahlen. • Für gezogene Knotenstrahlen sind somit 5 · 4 · (k + 1)2 Klassen möglich (siehe Abschnitt 6.3). • Kanten der Wellenfront haben eine von 2 · (k + 1) möglichen Steigungen und durch die beiden begrenzenden Knotenstrahlen 4 · 52 · (k + 1)3 Ausbreitungsrichtungen. • Da die Steigung und die Ausbreitungsrichtung einer Kante der Wellenfront unter anderem jeweils der Klasse der Pionier-Kante zugrunde liegen, welche diese Kante erzeugt (siehe zum Beispiel Abschnitt 9.3.2), ist die Anzahl von Streifenklassen ebenfalls 4 · 52 · (k + 1)3 . • Für jede Kombination einer Klasse von Pionier-Knotenstrahlen und einer Klasse von Streifen muss jeweils eine Ray-Shooting- und eine Lowest-Intersection-Datenstruktur bereitgestellt werden. Zwar gibt es Kombinationen dieser Klassen, welche unnötig sind, zum Beispiel wenn die Knotenstrahlen parallel zu den Streifen sind, doch die Anzahl der nötigen Datenstrukturen kann mit 800 · (k + 1)4 nach oben abgeschätzt werden. Zunächst erscheint diese Zahl sehr hoch, und dies selbst für kleinste Werte von k. Betrachten wir die notwendigen Datenstrukturen jedoch als ad-hocDatenstrukturen, welche erst bei Bedarf (in konstanter Zeit) erstellt werden, so relativiert sich die genannte obere Schranke. Aus asymptotischer Sicht ist allerdings weiterhin nur eine konstante Anzahl von Datenstrukturen möglich. Es sei angemerkt, dass individuelle Geschwindigkeiten auf Netzwerkkanten mit der in dieser Arbeit vorgestellten Technik zur Konstruktion der Quickest-Path-Map nicht vereinbar sind, da die Mengen der Ähnlichkeitsklassen dann nicht von konstanter Größe wären, sondern abhängig von c. Dies wiederum zöge einen Speicherbedarf von Θ(c(n + c)) nach sich, was unerwünscht ist. Kapitel 11 Fazit In diesem abschließenden Kapitel resümieren und diskutieren wir die Ergebnisse dieser Arbeit. Der vorgestellte Algorithmus erstellt die Quickest-Path-Map in einer asymptotischen Laufzeit von O((c + n)polylog(c + n)) bei einem Speicherbedarf von O((c + n)polylog(c + n)). Anfragen nach schnellsten Pfaden zu S werden mit Hilfe der Quickest-Path-Map in einer Laufzeit von O(L + log(c + n)) beantwortet werden, wobei L die Komplexität der Ausgabe ist, während eine Voronoi-Anfrage nach dem nächsten Punkt (also ohne die Angabe des Pfades zu diesem) durch einfache Point-Location in einer Laufzeit von O(log(c + n)) beantwortet werden kann. Der Vergleich des vorgestellten Konstruktionsalgorithmus mit dem bisher schnellsten Algorithmus, vorgestellt von Aichholzer u. a. (2002) und beschrieben in Abschnitt 2.3, zeigt, dass die Abhängigkeit der asymptotischen Laufzeit von c um einen fast linearen Faktor verringert wurde. Zudem können mehrere Transportgeschwindigkeiten zugelassen werden. Der asymptotische Speicherbedarf ist wiederum um einen polylogarithmischen Faktor größer. Aichholzer u. a. erreichen mit ihrem Algorithmus eine asymptotische Laufzeit von O(n log n + c2 log c) sowie linearen Speicherbedarf (man beachte, dass diese Laufzeit für den Spezialfall c = O(1) geringer ist als die unseres Algorithmus). Technisch unterscheiden sich die beiden Algorithmen wesentlich. Während Aichholzer u. a. nach einer relativ aufwendigen Initialisierung aller Figuren eine Reduktion auf gewöhnliche Voronoi-Diagramme nutzen, passen wir die Elemente der Wellenfrontausdehnung an die Technik von Eppstein und Erickson (1999) an, um die Quickest-Path-Map durch die sukzessive Vorhersage und Behandlung der nächsten Änderung an der kombinatorischen Gestalt der Wellenfront (Ereignis) zu erstellen. Dazu erweitern wir den Prozess der Wellenfrontausdehnung zunächst um eine dritte Dimension und klassifizieren die ausgezeichneten Flächen und die Knotenstrahlen. Durch diese Einteilung in Ähnlichkeitsklassen ist es uns dann möglich, mit Hilfe einer konstant großen Menge speziell an die jeweiligen Klassen angepasster Datenstrukturen Minimierungsanfragen in polylogarithmischer Laufzeit zu beantworten, wobei Lösch- und Einfügeoperationen in diesen Datenstrukturen ebenfalls nur polylogarithmische Laufzeit benötigen. Die globale Prognose wird mit den Antworten aus den Minimierungsanfragen gespeist und liefert das nächste eintretende Ereignis. Da nach Korollar 3.1 die 112 Fazit Anzahl der eintretenden Ereignisse linear ist in c + n, erfolgt nur eine lineare Anzahl globaler Prognosen und daher auch nur eine lineare Anzahl von Aktualisierungen der Minimierungs-Datenstrukturen. Dadurch erreichen wir eine subquadratische asymptotische Laufzeit für den beschriebenen Konstruktionsalgorithmus. Das Modell der Wellenfrontausdehnung ist dem vorgestellten Algorithmus und der Methode von Aichholzer u. a. (2002) gemein. Während jedoch Aichholzer u. a. eine Wellenfrontausdehnung lediglich bei der Durchführung der kontinuierlichen Dijkstra-Methode zur Initialisierung der Netzwerkknoten (und möglicherweise bei der Verwendung einer Technik zur Konstruktion abstrakter Voronoi-Diagramme, siehe Abschnitt 2.3) nutzen, besteht unser Algorithmus im Grunde ausschließlich aus einer sorgfältig durchgeführten, umfassenden Wellenfrontausdehnung. 11.1 Kritik Dieser Abschnitt beleuchtet zwei Schwächen des vorgestellten Algorithmus. Der superlineare Speicherbedarf ist offensichtlich suboptimal, da die Menge der verschiedenen gespeicherten Objekte auch während der Konstruktion lediglich O(c + n) beträgt (siehe Korollar 3.1). Während der Algorithmus von Aichholzer u. a. (2002) lediglich linearen Speicherbedarf hat, benötigt der von uns verwendete mehrdimensionale Bereichsbaum den etwas größeren Speicherplatz von 3 O((c + n)(log(c + n)) ) (siehe Kapitel 8). Ein weiterer Kritikpunkt der vorgestellten Technik stellt der in Abschnitt 10.4 dargelegte Einfluss der Konstante k dar, der Anzahl verschiedener Transportgeschwindigkeiten. Zwar ist k als Konstante bei der Berechnung der asymptotischen Laufzeit und des Speicherbedarfs irrelevant, betrachtet man aber den Einfluss von k auf die Anzahl theoretisch möglicher Kombinationen von Ähnlichkeitsklassen, so steigt die Menge benötigter Datenstrukturen und somit auch der Speicherbedarf empfindlich mit k. Diese Abhängigkeit lässt die genutzte Technik nur für sehr geringe Werte von k sinnvoll erscheinen. Wie in Abschnitt 10.4 bereits angesprochen, würde eine Implementation des Algorithmus, welche ausschließlich benötigte Datenstrukturen erstellt, und nicht etwa sämtliche mögliche Kombinationen aus Ähnlichkeitsklassen abdeckt, den Einfluss von k abmildern. 11.2 Anwendung und Anschauung Mit der dreidimensionalen Interpretation des Straight-Skeletons und der Quickest-Path-Map (Abschnitt 4.2) ist eine alternative Anschauung der betrachteten Situation denkbar. Man stelle sich vor, in einem Regenwald sei ein großer Garten geplant. Mit dem Wissen, dass der Boden bei einem heftigen Regenguß mit den Wassermengen überfordert ist, muss beim Anlegen des Gartens garantiert werden, dass Wasser stets abfließen kann. Bekannt sind einige Zugänge zum Grundwasser, durch die Wasser abfließen kann. Auf gewöhnlichem Gartenboden ist eine gewisse Neigung notwendig, damit Wasser abfließt ohne zu versickern. 11.3 Offene Probleme 113 In Rinnen, welche auf eine vorgegebene (optisch ansprechende) Art und Weise angelegt werden, fließt das Wasser schneller ab, so dass je nach Material der Rinne (Stein, Lehm oder ähnliches) eine geringere Neigung notwendig ist, um ein Abfließen zu sichern. Ein Landschaftsarchitekt könnte mit Hilfe des vorgestellten Algorithmus einen wunschgemäß vollständig drainagierten Garten planen, in dem keinerlei Pfützen entstehen, und der zusätzlich insofern optimal ist, als dass eine minimale Gesamthöhe des Terrains erreicht wird. Betrachtet man eine Situation mit nur einem einzigen Bezugspunkt ω, so verliert die Quickest-Path-Map zwar ihre Eigenschaft als Voronoi-Diagramm, die Pfadsuche ist jedoch weiterhin gelöst. Die Funktion einen schnellsten Pfad zu ω in einer Laufzeit von O(L + log c) zu finden, ist ein Spezialfall des Ergebnisses dieser Arbeit. Eine Quickest-Path-Map für c Netzwerksegmente und nur einen 5 Bezugspunkt kann in einer asymptotischen Laufzeit von O(c(log c) log log c) 3 mit einem Speicherbedarf von O(c(log c) ) erstellt werden. Basierend auf der angewendeten Technik offenbart die Reduktion auf nur einen Bezugspunkt keine wesentliche Vereinfachung des Algorithmus. 11.3 Offene Probleme Das Ergebnis dieser Arbeit stellt durch das Erreichen einer subquadratischen asymptotischen Laufzeit eine Verbesserung der bisherigen Ergebnisse dar. Dennoch stellt sich die Frage, ob es auch bei linearem Speicherbedarf möglich ist, eine Quickest-Path-Map in subquadratischer Laufzeit zu konstruieren. Betrachtet man den Konstruktionsalgorithmus von Aichholzer u. a. (2002) (skizziert in Abschnitt 2.3), so stellt sich die Frage, ob die in dieser Arbeit vorgestellte Methode zur Simulation einer Wellenfrontausdehnung auch bei anderen Problemen mit entsprechenden Gegebenheiten (insbesondere der konstanten Anzahl von Kollisionstypen) als Alternative zu der kontinuierlichen Dijkstra-Methode in Frage kommt. Weiterhin besteht die offene Frage, ob es möglich ist, basierend auf den Ergebnissen dieser Arbeit einen Algorithmus zur Konstruktion einer Quickest-Path-Map für nur einen Bezugspunkt zu erstellen, welcher eine geringere asymptotische Laufzeit besitzt. Abschließend sei die Frage nach einem Konstruktionsalgorithmus gestellt, dessen Speicherbedarf ohne eine wesentliche Erhöhung der asymptotischen Laufzeit weniger empfindlich gegenüber der Konstanten k ist. 11.4 Wegpunkte dieser Arbeit In den sieben Monaten, in denen diese Arbeit entstanden ist, gab es eine Vielzahl von hartnäckigen Problemen und Durchbrüchen, von denen einige eine Erwähnung verdienen. Zunächst wurde lediglich das spezielle Problem für einen Bezugspunkt (n = 1) betrachtet. Dabei schien es zu Beginn der Arbeit recht einfach, durch eine Partition der Ebene Ereignisse der Typen A und B vorherzusagen. Diese Partition wurde nur mit Hilfe eines Sweep-Line-Algorithmus über das Netzwerk erstellt und für Point-Location genutzt. Ereignisse des Typ C konnten ebenfalls einfach 114 Fazit vorhergesagt werden, nicht jedoch Typ-D-Ereignisse. Besondere Schwierigkeiten bereitete die Erkennung von Inseln ohne enthaltene Netzwerksegmente, da auf diese bekannte Techniken für Straight-Skeletons angewendet werden können. Erst der Versuch die Technik von Eppstein und Erickson (1999) zu verwenden, vermochte Typ-D-Ereignisse in einer gewünschten Laufzeit vorherzusagen, vorausgesetzt die entsprechenden Miniminierungsanfragen würden ausreichend schnell beantwortet. Die Minimierungsanfragen legten es nahe bekannte RayShooting-Methoden zu verwenden, ohne jedoch die gewünschte Laufzeitverbesserung zu erzielen. Die Einteilung der Elemente der Wellenfront in einander ähnliche, dreidimensionale Objekte, ermöglichte es nun, sämtliche Ereignistypen zusammenzufassen und die alten Ansätze dementsprechend zu verwerfen. Dies machte den Algorithmus erheblich übersichtlicher. Zudem ließ die Erstellung der Ähnlichkeitsklassen hoffen, die Minimierungsanfragen durch eine Anpassung zu beschleunigen. Die Modellierung der Streifen bereitete erhebliche Probleme, insbesondere in Verbindung mit deren erwünschter “Bescheidenheit“. Würden Streifen nicht, wie in Abschnitt 6.5.1 beschrieben, lediglich eine Region abdecken, welche sie bei ungehinderter Ausbreitung tatsächlich erreichen würden, so könnte nicht garantiert werden, dass virtuelle Ereignisse gänzlich implizit vermieden werden. Insbesondere stellten dabei die Typ-4-Streifen eine Hürde für die gewünschte Vereinfachung der Minimierungsanfragen dar, denn sie lassen sich nicht orthogonalisieren. Durch die Idee der Ψ-Achse wurde dieses letzte Problem schließlich beseitigt. Bei der Untersuchung der Virtualität und der Relevanz von Ereignissen wurde dann klar, dass Lowest-Intersection-Datenstrukturen falsche Ergebnisse liefern, da sie mit Fußpunkten von Knotenstrahlen rechneten. Die intuitiv etwas verwirrende Zeitkorrektur überwand letztendlich auch dieses Hürde. Erst gegen Ende der Arbeit an dem Konstruktionsalgorithmus wurde offenbar, dass die verwendeten Techniken die Einschränkung auf nur einen Bezugspunkt nicht weiter notwendig machten. Eine Verallgemeinerung auf mehrere Bezugspunkte wurde dann in kurzer Zeit untersucht und eingebunden. Die Übertragung des Algorithmus auf eine Menge von Bezugspunkten steigerte den Wert dieser Arbeit letztendlich noch einmal erheblich. 11.4 Wegpunkte dieser Arbeit 115 2 2 2 4 2 2 3 4 4 2 2 3 3 3 4 2 4 2 2 2 3 2 3 Abbildung 11.1: Eine komplexe Quickest-Path-Map für elf Bezugspunkte (dicke Punkte) und 23 Netzwerksegmenten (dicke Linien, mit Geschwindigkeiten). Einzugsgebiete werden durch die gestrichelten Voronoi-Kanten eingegrenzt, während die gepunkteten Skelettkanten die Regionen von Punkten äquivalenter schnellster Pfade bilden. Da keine zwei nicht abgehandelten Knotenstrahlen konvergieren und alle Netzwerksegmente bereits von der Wellenfront überstrichen wurden, tritt jenseits des Rands der Zeichnung kein weiteres Ereignis mehr ein. Somit sind auch die Randregionen abgehandelt und das Diagramm fertiggestellt. Literaturverzeichnis [Abellanas u. a. 2001] Abellanas, Manuel ; Hurtado, Ferran ; Icking, Christian ; Klein, Rolf ; Langetepe, Elmar ; Ma, Lihong ; Palop del Rı́o, Belén ; Sácristan, Vera: Proximity problems for time metrics induced by the L1 metric and isothetic networks. In: Actas de los IX Encuentros de Geometrı́a Computacional. Universitat de Girona, 2001, S. 175–182. – URL http://citeseer.ist.psu.edu/abellanas01proximity.html [Agarwal und Matoušek 1994] Agarwal, Pankaj K. ; Matoušek, Jiřı́: On Range Searching with Semialgebraic Set. In: Discrete Computational Geometry 11 (1994), S. 393–418 [Aichholzer u. a. 1995] Aichholzer, Oswin ; Alberts, David ; Aurenhammer, Franz ; Gärtner, Bernd: A Novel Type of Skeleton for Polygons. In: Journal of Universal Computer Science 1 (1995), Dezember, Nr. 12, S. 752– 761. – URL http://www.jucs.org/jucs_1_12/a_novel_type_of [Aichholzer und Aurenhammer 1998] Aichholzer, Oswin ; Aurenhammer, Franz: Straight skeletons for general polygonal figures in the plane. In: Samoilenko, A. M. (Hrsg.): Voronoi’s Impact on Modern Sciences II. National Academy of Science of Ukraine, 1998 (Proceedings of the Institute of Mathematics of the National Academy of Science of Ukraine 21), S. 7–21. – URL http://www.cis.tugraz.at/igi/oaich/psfiles/aa-ssgpf-98.ps.gz [Aichholzer u. a. 2002] Aichholzer, Oswin ; Aurenhammer, Franz ; Palop del Rı́o, Belén: Quickest Paths, Straight Skeletons, and the City Voronoi Diagram. In: Proc. 18th Symp. Computational Geometry, ACM Press, Juni 2002, S. 151–159. – URL http://www.cis.tugraz.at/igi/oaich/psfiles/ aap-qpssc-03.ps.gz [Aurenhammer und Klein 2000] Aurenhammer, Franz ; Klein, Rolf: Voronoi Diagrams. Kap. 5, S. 201–290. In: Handbook of Computational Geometry. Amsterdam, the Netherlands : Elsevier Science, 2000. – URL http://www.igi.tugraz.at/auren/ [Bronstein u. a. 2001] Bronstein, Ilja N. ; Semendjajew, Konstantin A. ; Musiol, Gerhard ; Mühlig, Heiner: Taschenbuch der Mathematik. Thun und Frankfurt/Main : Verlag Harri Deutsch, 2001 [Chazelle und Guibas 1986a] Chazelle, Bernard ; Guibas, Leonidas J.: Fractional Cascading: I. A Data Structuring Technique. In: Algorithmica 1 (1986), Nr. 2, S. 133–162 [Chazelle und Guibas 1986b] Chazelle, Bernard ; Guibas, Leonidas J.: Frac- 118 LITERATURVERZEICHNIS tional Cascading: II. Applications. In: Algorithmica 1 (1986), Nr. 2, S. 163–191 [Cheng und Vigneron 2002] Cheng, Siu-Wing ; Vigneron, Antoine: Motorcycle graphs and straight skeletons. In: Proc. 13th Symp. Discrete Algorithms, ACM and SIAM, Januar 2002, S. 156–165 [Cormen u. a. 2001] Cormen, Thomas H. ; Leiserson, Charles E. ; Rivest, Ronald L. ; Stein, Clifford: Introduction to Algorithms. Zweite Edition. MIT Press, 2001 [de Berg u. a. 2001] de Berg, Mark ; van Kreveld, Mark ; Overmars, Mark ; Schwarzkopf, Otfried: Computational Geometry. Zweite Edition. Springer Verlag, 2001 [Demaine u. a. 2000] Demaine, Erik D. ; Demaine, Martin L. ; Mitchell, Joseph S. B.: Folding flat silhouettes and wrapping polyhedral packages: new results in computational origami. In: Computational Geometry: Theory & Applications 16 (2000), Mai, Nr. 1, S. 3–21 [Dijkstra 1959] Dijkstra, Edsger W.: A note on two problems in connexion with graphs. In: Numerische Mathematik 1 (1959), S. 269–271 [Edelsbrunner u. a. 1986] Edelsbrunner, Herbert ; Guibas, Leonidas J. ; Stolfi, Jorge: Optimal Point Location in a Monotone Subdivision. In: SIAM Journal on Computing 15 (1986), Mai, Nr. 2, S. 317–340 [Eppstein 1995] Eppstein, David: Dynamic Euclidean Minimum Spanning Trees and Extrema of Binary Functions. In: Discrete Computational Geometry 13 (1995), Nr. 1, S. 111–122 [Eppstein und Erickson 1999] Eppstein, David ; Erickson, Jeffrey G.: Raising Roofs, Crashing Cycles, and Playing Pool: Applications of a Data Structure for Finding Pairwise Interactions. In: Discrete Computational Geometry 22 (1999), Juni, Nr. 4, S. 569–592 [Gewali u. a. 1990] Gewali, Laxmi P. ; Meng, Alex C. ; Mitchell, Joseph S. ; Ntafos, Simeon: Path Planning in 0/1/Infinity Weighted Regions with Applications. In: INFORMS Journal on Computing 2 (1990), Nr. 3, S. 253–272 [Hurtado u. a. 1999] Hurtado, Ferran ; Palop del Rı́o, Belén ; Sacristán, Vera: Diagramas de Voronoi con fonciones temporales. In: VIII Encuentros de Geometrı́a Computacional 8 (1999), S. 279–287 [Kirkpatrick 1983] Kirkpatrick, David G.: Optimal search in planar subdivisions. In: SIAM Journal on Computing 12 (1983), Februar, Nr. 1, S. 28–35 [Klein u. a. 1993] Klein, Rolf ; Mehlhorn, Kurt ; Meiser, Stefan: Randomized incremental construction of abstract Voronoi diagrams. In: Computational Geometry: Theory & Applications 3 (1993), Nr. 3, S. 157–184 [Lamoureux 1996] Lamoureux, Michael: A Dynamic Data Structure For Multi-Dimensional Range Searching. Fredericton, New Brunswick, Canada, University Of New Brunswick, Diplomarbeit, März 1996 [Lee 1982] Lee, Der-Tsai: Medial Axis Transformation of A Planar Shape. In: IEEE Trans. Pattern Analysis and Machine Intelligence 4 (1982), Juli, Nr. 4, S. 363–369 LITERATURVERZEICHNIS 119 [Lee und Papadopoulou 2001] Lee, Der-Tsai ; Papadopoulou, Evanthia: the L∞ Voronoi Diagram of segments and VLSI applications. In: International Journal of Computational Geometry & Applications 11 (2001), Oktober, Nr. 5, S. 503–528 [McCreight 1985] McCreight, Edward M.: Priority Search Trees. In: SIAM Journal on Computing 14 (1985), Mai, Nr. 2, S. 257–276 [Mehlhorn u. a. 1991] Mehlhorn, Kurt ; Meiser, Stefan ; O’Dunlaing, Colm: On the construction of abstract Voronoi diagrams. In: Discrete Computational Geometry 6 (1991), Nr. 3, S. 211–224 [Mitchell 1993] Mitchell, Joseph S. B.: Shortest paths among obstacles in the plane. In: Proceedings of the ninth annual symposium on Computational geometry, ACM Press, 1993, S. 308–317 [Mitchell u. a. 1987] Mitchell, Joseph S. B. ; Mount, David M. ; Papadimitriou, Christos H.: The discrete geodesic problem. In: SIAM Journal on Computing 16 (1987), August, Nr. 4, S. 647–667 [Mitchell und Papadimitriou 1991] Mitchell, Joseph S. B. ; Papadimitriou, Christos H.: The weighted region problem: finding shortest paths through a weighted planar subdivision. In: Journal of the ACM 38 (1991), Nr. 1, S. 18– 73 [Mulmuley 1990] Mulmuley, Ketan: A fast planar partition algorithm. In: Journal of Symolic Computation 10 (1990), September, Nr. 3, S. 253–280 [Ottmann und Widmayer 2001] Ottmann, Thomas ; Widmayer, Peter: Algorithmen und Datenstrukturen. Vierte Edition. Spektrum Akademischer Verlag, 2001 (B.I. Hochschultaschenbücher: Reihe Informatik) [Preparata und Shamos 1993] Preparata, Franco P. ; Shamos, Michael I.: Computational Geometry: An Introduction. Fünfte Edition. Springer-Verlag, 1993 [Sarnak und Tarjan 1986] Sarnak, Neil ; Tarjan, Robert E.: Planar point location using persistent search trees. In: Communications of the ACM 29 (1986), Juli, Nr. 7, S. 669–679 [Wille 1997] Wille, Detlef: Repetitorium der linearen Algebra Teil 1. Zweite Edition. Binomi-Verlag, 1997 Index β-Kante, 38 j-Nadeln, 48 Ähnlichkeitsklasse, 51 ähnlich, 51, 59 abgehandelt, 62 Abstandsfunktion, 21 Anfrage lokale, 45 sublokale, 46 Anfragestrahlen, 82 Anfragestreifen, 82 balancierter Baum, 83 bedienen, 64, 67 Bereichsbaum, 83, 87, 88 Bezugspunkt, 1 Brücken, 92 Chained-Method, 99 City-Metrik, 20 City-Voronoi-Diagramm, 13 verfeinertes, 14, 95 Datenstruktur Lowest-Intersection-, 82 Ray-Shooting-, 82 definierendes Objekt, 37, 60 Distanzstempel, 15 Drehung des Koordinatensystems, 69 Drehungsmatrix, 69 Einheitsgeschwindigkeit, 19 Einzugsgebiet, 13 Ereignis, 23 Typ-A-, 26 Typ-B-, 26 Typ-C-, 27 Typ-D-, 28 Ergebnisfilter, 92 Erweiterung, 41 Eulersche Polyederformel, 34 Figur, 11, 23 Fractional-Cascading, 90, 92, 99 Fußpunkt, 69 geodäsischen Pfadproblem, 3 Geschwindigkeit, 20 translationale, 57 Gewichtete-Regionen-Problem, 3 Grad eines Knotens, 20 Graph inverser, 96 homothetisch, 35 homothetisches Zentrum, 35 Insel, 27 Interferenz, 51 Intervall-Kandidat, 15 isothetisch, 1, 19, 20 kanonische Untermenge, 84 Kante, 20 gezogene, 50, 96, 108 Pionier-, 50, 96, 108 Kern, 43 Knoten, 19 isolierter, 20 Knotenstrahl, 49 kombinatorisch äquivalent, 22 konkav, 9 Konstruktionsdiagramm, 14 kontinuierliche Dijkstra-Methode, 15, 113 Kreis, 21 L1 -, 23 City-Metrik-, 21 Kreisscheibe, 29 Länge, 20 Lebenszeit, 50 122 linkshändig, 71 Lowest-Intersection-Anfrage, 44, 82 INDEX 43, Manhattan-Abstand, 97 Metrik Lp , 3 Abstandsmetrik, 4 City-, 2, 21, 97 euklidische, 3 induzierte, 21 Manhattan, 21 Manhattan-, 23 Minimierungsanfragen, 45 Mittelachse, 13 Mittelpunkt, 21 monoton, 9 Nachfolger, 35 Norm L1 -, 1, 19, 21 euklidische, 21, 52 orientiert h-, 107 orthogonale Bereichsanfrage, 65, 86 Partition, 9 Persistenz, 99 perturbieren, 107 Pfad, 20 T -, 98 β-Kanten-, 97 Te-, 96 schnellster, 19, 20, 98, 106 Pfadkodierung, 37 Pfadsuche, 98 Point-Location, 99 Polygon gewichtetes, 10 Polygonzug, 20 primärer Zugangspunkt, 15 Prioritätsschlange, 15 Priority-Search, 93 Prognose globale, 44 lokale, 45, 82 sublokale, 82 Quelle, 15, 96 Quickest-Path-Anfrage, 1 Quickest-Path-Graph, 96 Quickest-Path-Map, 1, 14, 95 Radius, 21 randomisiert-inkrementell, 99 Randregionen, 33 Ray-Shooting-Anfrage, 4, 44, 82 rechtshändig, 71 redundant, 34 redundante Figur, 31 redundantes Ereignis, 31 relevante Figur, 33 relevantes Ereignis, 31, 33 Richtungskosinus, 69 Rotation, 83 Scherung, 67, 71, 73–75 Schräge, 80 Schrumpfprozess, 9 Segment, 20 Segment-Bäume, 99 Senke, 96 simultan, 107 Skelettkante, 11, 50 Speicherbedarf superlinearer, 112 Spitzen, 77 Straight-Skeleton, 4, 9 Streifen, 56 Streifentyp, 61, 80 sublokal, 82 Suchbaum AVL-, 83 balancierter binärer, 83, 88 Sweep-Line-Algorithmus, 15, 113 Trajektorie, 78 Transformation, 60 Transportnetzwerk, 19 Triangulierungsverfeinerung, 99 Unterbaum, 84 virtuelle Figur, 30 virtuelles Ereignis, 30 Voronoi-Diagramm, 13 Lp -, 3 Airlift-, 3 Voronoi-Kante, 14 Wellenfront, 11 INDEX Wellenfrontausdehnung, 4, 11 Winkelhalbierende, 9 wohldefiniert, 107 Wurzel, 15 zeitkorrigiert, 77 Zeitstempel, 15 Zykel, 24 123