Universität Paderborn, Fakultät für Elektrotechnik, Informatik und Mathematik Kinetische Datenstrukturen Eine Ausarbeitung im Rahmen des Seminars zur Projektgruppe Peer-to-peer-Netzwerke für dynamische 3D-Szenen von Dietrich Travkin 27. November 2003 INHALTSVERZEICHNIS Dietrich Travkin Inhaltsverzeichnis 1 Einführung 1 2 Konzepte kinetischer Datenstrukturen 2.1 Ereignisbasiertes Bewegungsmodell . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Beweise und Zertifikate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Flugpläne und Flugplan-Updates . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 3 4 3 Beispiele für kinetische Datenstrukturen 3.1 Analysekriterien für kinetische Datenstrukturen . . . . . . . . . . . . . . . . . 3.2 Datenstrukturen für ein einfaches Maximum-Problem . . . . . . . . . . . . . 5 5 6 4 Anwendbarkeit 4.1 Anwendungsgebiete für kinetische Datenstrukturen . . . . . . . . . . . . . . . 4.2 Anwendbarkeit in der Projektgruppe . . . . . . . . . . . . . . . . . . . . . . . 10 10 11 Eine Ausarbeitung im Rahmen des Seminars zur Projektgruppe Peer-to-peer-Netzwerke für dynamische 3D-Szenen, 2003/2004 i 2. Konzepte kinetischer Datenstrukturen 1 Dietrich Travkin Einführung In [1] und [2] wurde ein allgemeines Verfahren vorgestellt, welches beschreibt, wie Datenstrukturen und Algorithmen entwickelt werden können, die es ermöglichen, die Lösungsmenge zu einem bestimmten Problem trotz der sich verändernden Daten aufrecht zu erhalten bzw. online zu aktualisieren. Dabei ist das Problem von der Art, dass die Lösungsmenge von n sich kontinuierlich verändernden Objekten gleicher (oder ähnlicher) Art abhängt. Anders als bei den klassischen dynamischen Datenstrukturen, die eine Lösungsmenge nach dem Einfügen bzw. Entfernen von zu betrachtenden Objekten aktualisieren, konzentriert sich dieses Verfahren hauptsächlich auf die kontinuierliche Veränderung der Objektdaten, es ist aber auch eine Kombination der beiden Konzepte möglich. Um diese zu unterscheiden, werden die in [1] und [2] vorgestellten Datenstrukturen und Algorithmen kinetische Datenstrukturen (kurz KDS) genannt. In [1] wurden mehrere solcher Datenstrukturen – insbesondere geeignet für Simulationen – kurz vorgestellt. Diese behandeln meist geometrische Probleme mit n sich kontinuierlich bewegenden Objekten. Als Lösungsmenge kann dabei z.B. die konvexe Hülle oder ein minimaler Spannbaum der Objekte auftreten. Während die Bewegung der Objekte simuliert wird, ist es die Aufgabe der KDS, zu jedem Zeitpunkt die aktuelle Lösungsmenge – also in diesem Fall eine konvexe Hülle bzw. einen minimalen Spannbaum – angeben zu können. Meist entstehen kinetische Datenstrukturen aus bereits bekannten und in der algorithmischen Geometrie gut erforschten statischen Algorithmen. Für statische (sich nicht bewegende) Objekte gibt es bereits effiziente Algorithmen zur Berechnung geometrischer Strukturen wie konvexer Hüllen und minimaler Spannbäume. Das oben erwähnte Verfahren gibt an, wie ein solcher Algorithmus an die veränderte Situation, nämlich an die sich kontinuierlich bewegenden Objekte, angepasst werden kann. In dieser Arbeit sollen die grundlegenden Konzepte der kinetischen Datenstrukturen vorgestellt und an einigen einfachen Beispielen illustriert werden. Es werden die Anwendungsgebiete für kinetische Datenstrukturen beleuchtet und grob auf die Verwendung in der Projektgruppe Peer-to-peer-Netzwerke für dynamische 3D-Szenen hin geprüft. 2 Konzepte kinetischer Datenstrukturen Die von einer KDS zu verwaltenden Informationen (Lösungsmenge), in dem obigen Beispiel also die konvexe Hülle oder ein minimaler Spannbaum, werden von den Autoren in [1] und [2] als Konfigurationsfunktion bezeichnet. Diese hat eine kombinatorische Beschreibung, welche gerade die geometrische Struktur ist, an der man interessiert ist. Als Konfigurationsfunktion können außer den minimalen Spannbäumen und konvexen Hüllen auch BSP-Bäume, Closest Pairs, minimale Spannkreise usw. auftreten. Die geometrische Struktur ist in diesen Fällen ein Graph bzw. ein Objektpaar. Zu beachten ist, dass sich diese nur zu bestimmten Zeitpunkten (diskret) ändert, während sich andere Daten wie die Kostenfunktionen (bei minimalen Spannbäumen die Kantengewichtsfunktion, bei Closest Pairs die Entfernungen zwischen je zwei Objekten) kontinuierlich in Abhängigkeit von Zeit ändern, wenn sich die Objekte bewegen. Zum besseren Verständnis wird die Konfigurationsfunktion im Folgenden als Lösungsmenge und ihre kombinatorische Beschreibung als geometrische Struktur bezeichnet, denn die hier erwähnten kinetischen Datenstrukturen behandeln fast ausschließlich geometrische Probleme. Während einer Simulation werden die Zeitpunkte, an denen sich die geometrische Struktur der Lösungsmenge ändert, als Ereignisse in einer chronologisch geordneten Prioritätswarteschlange verwaltet. Bei der konvexen Hülle sind diese Ereignisse genau die Zeitpunkte, an denen ein drittes Objekt ein Segment der konvexen Hülle erreicht, denn kurz darauf kann dieses Objekt zur konvexen Hülle hinzukommen, wodurch sich diese ändert (Abb. 1). Die Zeitpunkte für die Ereignisse werden von der KDS mit Hilfe von Bewegungsinformationen der Objekte errechnet. Die Bewegungsinformationen werden in Form von so genannten Flugplänen bekannt gegeben. Sie beschreiben die Bewegungsbahnen der Objekte in naher Zukunft. Außerdem wird die Korrektheit der von der KDS errechneten Daten zur Laufzeit aufrechterhalten und zwar von der KDS selbst mit Hilfe von mehreren Bedingungen. Diese Bedingungen Eine Ausarbeitung im Rahmen des Seminars zur Projektgruppe Peer-to-peer-Netzwerke für dynamische 3D-Szenen, 2003/2004 1 2. Konzepte kinetischer Datenstrukturen Dietrich Travkin werden Zertifikate genannt und implizieren die Korrektheit der errechneten geometrischen Struktur der Lösungsmenge. Bei der Berechnung der konvexen Hülle belegen die Zertifikate gerade, dass alle nicht auf der konvexen Hülle liegenden Objekte innerhalb der konvexen Hülle liegen. Die Menge dieser Zertifikate wird in [1] Korrektheitsbeweis genannt. Solange alle Zertifikate gültig sind, ändert sich auch die geometrische Struktur der Lösungsmenge nicht. Sobald ein Ereignis auftritt, muss die KDS die Zertifikate auf Gültigkeit überprüfen. Die ungültigen Zertifikate müssen von der KDS durch neue ersetzt und die Lösungsmenge evtl. angepasst werden. Abbildung 1: Ein Objekt erreicht ein Segment der konvexen Hülle (zweites Teilbild). Das wird von der KDS als Ereignis behandelt. Später wird dieses Objekt zu einem neuen Element der konvexen Hülle (drittes Teilbild). Im Folgenden werden kinetische Datenstrukturen genauer beschrieben und es werden die grundlegenden Konzepte vorgestellt. 2.1 Ereignisbasiertes Bewegungsmodell Die kontinuierliche Bewegung von Objekten kann zu Simulationszwecken approximiert werden, indem die Simulationszeit in kleine Intervalle fester Länge unterteilt und die Bewegung nur an den Intervallübergängen simuliert wird. Bei jedem Übergang von einem Intervall zum nächsten werden die Objekte von ihrer aktuellen Position entfernt und an ihrer neuen Position wieder eingefügt. Wenn die Zeitintervalle klein genug gewählt sind, entsteht auf diese Weise der Eindruck einer kontinuierlichen gleichmäßigen Bewegung. Dieses Verfahren hat allerdings einen großen Nachteil und zwar sind die gewählten Zeitintervalle immer entweder zu kurz oder zu lang: Wenn die Objekte sich nur sehr langsam bewegen, ändern sich ihre ebenfalls diskretisierten Positionen nicht bei jedem Übergang zum nächsten Zeitintervall. Dadurch werden unnötige Berechnungen gemacht und damit Ressourcen verschwendet. In diesem Fall sind die Zeitintervalle zu kurz. Bewegen sich die simulierten Objekte sehr schnell, so werden ihre Positionen zu selten neu berechnet und es können wichtige Informationen wie Kollisionen und damit verbundene Bewegungsänderungen verloren gehen. Das hat eine inkorrekte Simulation zur Folge. In diesem Fall sind die Zeitintervalle zu lang. Da die relevanten (kritischen) Ereignisse (diese verändern die geometrische Struktur der Lösungsmenge) gewöhnlicherweise in sehr unregelmäßigen Zeitabständen auftreten, ist es unmöglich eine passende, feste Länge der Zeitintervalle für die Simulation zu bestimmen. Ein Ausweg ist die ereignisbasierte Simulation. In dieser werden die relevanten Ereignisse und die dazu gehörenden berechneten Zeitpunkte ihres Auftretens in einer Prioritätswarteschlange verwaltet. Dabei gibt der Zeitpunkt, an dem ein Ereignis auftreten wird, die Priorität an, d.h. die Ereignisse sind in der Warteschlange chronologisch sortiert. Sie werden nacheinander aus der Warteschlange entfernt, bearbeitet und simuliert. Aufgrund der dadurch eventuell neu entstandenen Informationen können neue Ereignisse entstehen, die in die Schlange eingeordnet werden. Es kann auch vorkommen, dass alte Ereignisse überflüssig werden und deshalb aus der Warteschlange entfernt werden. Auf diese Weise werden nur dann Berechnungen gemacht, wenn diese auch benötigt werden und es werden alle relevanten Ereignisse behandelt. Die Korrektheit der Simulation ist dann gewährleistet. Die kritischen Ereignisse sind genau die Zeitpunkte, an denen sich die geometrische Struktur der Lösungsmenge (allgemeiner: kombinatorische Beschreibung der KonfigurationsfunkEine Ausarbeitung im Rahmen des Seminars zur Projektgruppe Peer-to-peer-Netzwerke für dynamische 3D-Szenen, 2003/2004 2 2. Konzepte kinetischer Datenstrukturen Dietrich Travkin tion) ändert. Angenommen, die betrachtete Lösungsmenge ist ein Closest Pair. Die Entfernung (das ist die Kostenfunktion) soll durch die euklidische Entfernung der Objekte zueinander beschrieben sein. Diese ändert sich kontinuierlich mit der Bewegung der Objekte. Die geometrische Struktur der Lösungsmenge ist hier ein Paar von Objekten mit geringstem Abstand zueinander (meist gibt es nur ein solches Paar). Die geometrische Struktur der Lösungsmenge ändert sich nicht, solange es keine zwei Objekte gibt, die näher zusammen sind, als das bisher betrachtete Paar. Nur die Entfernungen aller Objekte zueinander ändern sich. Der kritische Zeitpunkt ist erreicht, sobald es ein weiteres Paar mit dem gleichem Abstand gibt, wie beim Closest Pair. Das ist der Zeitpunkt, an dem sich die geometrische Struktur der Lösungsmenge ändert, nämlich wird (kurz darauf) das aktuelle Closest Pair durch ein neues Paar ersetzt. In den meisten Fällen sind die kritischen Ereignisse nur schwer allein zu behandeln. Deswegen wird bei den kinetischen Datenstrukturen eine möglichst kleine Obermenge dieser Ereignisse gewählt, die leichter zu handhaben ist. Um die kritischen Ereignisse von den anderen zu unterscheiden, werden die kritischen Ereignisse extern und alle anderen intern genannt. Die externen Ereignisse ändern die Lösungsmenge, deswegen darf keines dieser Ereignisse unbeachtet bleiben. Nur so kann die Korrektheit der Simulation gewährleistet werden. Die internen Ereignisse ändern die Lösungsmenge nicht, werden aber von der kinetischen Datenstruktur benötigt. Angenommen, man ist an dem höchsten von n sich entlang der y-Achse kontinuierlich bewegenden Punkte interessiert und hat eine KDS, die eine bzgl. der y-Werte geordnete Liste der Punkte verwaltet (dieses Beispiel wird als KDS 1 in Abschnitt 3.2 noch genauer behandelt). Dann sind die externen Ereignisse nur diejenigen, bei denen die obersten zwei Punkte in der Liste ihre Ordnung wechseln (dann gibt es einen neuen höchsten Punkt). Damit die Liste aber ihre Ordnung behält, werden von der KDS alle Ereignisse behandelt, bei denen zwei beliebige in der Liste untereinander liegende Punkte ihre Ordnung wechseln (siehe Abb. 2). Die internen Ereignisse sind hier offensichtlich für die KDS hilfreich. Abbildung 2: Die Punkte a, b, c und d bewegen sich mit konstanter Geschwindigkeit entlang der y-Achse. Die KDS verwaltet eine bzgl. der y-Werte geordnete Liste der Punkte. Jede Änderung der Ordnung in der Liste wird von der KDS als Ereignis behandelt. Da man sich nur für das Maximum interessiert, sind nur die Ereignisse extern, die das Maximum ändern. 2.2 Beweise und Zertifikate Eine kinetische Datenstruktur verwendet einen sich mit der Simulationszeit verändernden Korrektheitsbeweis, der die Richtigkeit der aktuellen geometrischen Struktur der Lösungsmenge impliziert. So ein Beweis besteht aus mehreren elementaren Bedingungen zu den Bewegungsdaten, die von der KDS zur Laufzeit überprüft werden. Diese Bedingungen werden Zertifikate genannt und sind meist schlicht algebraische Ungleichungen. Jedes Zertifikat hat einen frühesten Zeitpunkt, an dem es ungültig werden kann (failure time). Dieser Zeitpunkt wird als Ereignis in die Ereigniswarteschlange (event queue) eingetragen. Solange kein Zertifikat ungültig wird, kann sich die geometrische Struktur der Lösungs- Eine Ausarbeitung im Rahmen des Seminars zur Projektgruppe Peer-to-peer-Netzwerke für dynamische 3D-Szenen, 2003/2004 3 2. Konzepte kinetischer Datenstrukturen Dietrich Travkin menge nicht ändern. Wird aber ein Zertifikat ungültig, dann ist es die Aufgabe der kinetischen Datenstruktur, die aktuelle geometrische Struktur der Lösungsmenge zu überprüfen, gegebenenfalls den Korrektheitsbeweis durch ändern der Zertifikatmenge zu reparieren und zu aktualisieren. Es ist möglich, dass die Zertifikatmenge, also der Beweis, aktualisiert werden muss, obwohl sich die geometrische Struktur der Lösungsmenge nicht ändert, in diesem Fall wurde das Zertifikat bei einem internen Ereignis ungültig. Bei einem externen Ereignis ändert sich die geometrische Struktur der Lösungsmenge und es muss auch die Zertifikatmenge aktualisiert werden. Ziel ist es, eine Zertifikatmenge zu finden, die es möglich macht, den Korrektheitsbeweis nach dem Ungültigwerden eines Zertifikats mit möglichst geringen Kosten zu reparieren. Idealerweise hilft die Zertifikatmenge bei einem externen Ereignis auch, die geometrische Struktur der Lösungsmenge zu aktualisieren. Die Korrektheitsbeweise und Zertifikate sind eher theoretische Größen und tauchen bei den kinetischen Datenstrukturen meist nur implizit auf, was in den Beispielen noch deutlicher wird. Insbesondere wird bei der KDS 3 in Abschnitt 3.2 erklärt, wie ein Korrektheitsbeweis aufgebaut werden kann bzw. welche Bedingungen sich als Zertifikate eignen. 2.3 Flugpläne und Flugplan-Updates Die kinetische Datenstruktur muss unter anderem aufgrund der ihr zur Verfügung stehenden Informationen die Zeitpunkte für neue Ereignisse berechnen und die gegebenenfalls zu entfernenden Ereignisse in der Warteschlange finden. Die zur Verfügung stehenden Informationen sind Positionsdaten, Bewegungskonstanten und -attribute, die aktuelle geometrische Struktur der Lösungsmenge, die aktuelle Zertifikatmenge (Korrektheitsbeweis), die Ereigniswarteschlange und im einfachsten Fall auch die veröffentlichten vollständigen Flugpläne zu jedem Objekt. Der Flugplan eines Objekts beschreibt seine Bewegung in naher Zukunft. Typischerweise sind die Flugpläne polynomielle oder rationale Bewegungsbahnen. Die Flugpläne können sich während der Simulation ändern, z.B. aufgrund einer Kollision oder Interaktion mit einem anderen Objekt oder der Umgebung. Es ist sogar möglich, dass ein Objekt seinen Flugplan ohne einen ersichtlichen Grund ändert, z.B. bei zufälligen Bewegungen oder wenn dieses Objekt von einem Menschen gesteuert wird. Abbildung 3: Die Punkte a, b und c bewe- Abbildung 4: Beim Simulieren des Ereignisses e1 gibt es eine Flugplanänderung der Punkte a und b. Weil a keine Kollision mehr mit c haben wird, ist das Ereignis e2 in Abb. 3 ungültig und wird entfernt. Stattdessen kommt das neue Ereignis e3 in die Ereigniswarteschlange. gen sich mit konstanter Geschwindigkeit entlang der y-Achse. Die KDS verwaltet alle Kollisionen der Punkte. Hier sieht man die zum Zeitpunkt t0 bekannten (vorher berechneten) Ereignisse e1 und e2 . Die kinetische Datenstruktur muss über alle Flugplanänderungen informiert werden. Dazu müssen alle Ereignisse, die eine Flugplanänderung bewirken, bevor sie simuliert werden in die Ereigniswarteschlange eingetragen werden. Ändert sich der Flugplan eines Objektes, so müssen für alle Zertifikate, in die das Objekt verwickelt ist, die Zeitpunkte neu berechnet werden, an denen sie ungültig werden und die Position der entsprechenden Ereignisse in der Warteschlange muss aktualisiert werden. Wenn in einem bestimmten Zeitintervall die Flugpläne zu jedem Objekt bekannt sind und diese sich nicht ändern, so kann zu jedem zurzeit gültigen Zertifikat der Zeitpunkt berechnet werden, an dem es ungültig wird. Eine Ausarbeitung im Rahmen des Seminars zur Projektgruppe Peer-to-peer-Netzwerke für dynamische 3D-Szenen, 2003/2004 4 3. Beispiele für kinetische Datenstrukturen 3 Dietrich Travkin Beispiele für kinetische Datenstrukturen In diesem Abschnitt werden drei kinetische Datenstrukturen vorgestellt. Auf diese Weise sollen die kinetischen Datenstrukturen illustriert und die im vorherigen Abschnitt vorgestellten Konzepte in der Praxis vorgestellt werden. Um die Algorithmen besser miteinander vergleichen zu können, werden zuvor vier Analysekriterien vorgestellt. Für die Beispiele in diesem Abschnitt werden starke Einschränkungen bzgl. der Problemstellung gemacht. Es wird davon ausgegangen, dass alle Flugpläne vollständig vorhanden sind und jede Flugplanänderung als Ereignis in der Warteschlange behandelt wird. Außerdem wird vorausgesetzt, dass alle Flugpläne eine feste Komplexität haben, unabhängig von der Anzahl der simulierten Objekte. Das schließt bestimmte Arten von Simulationen wie klassische n-Körper-Simulationen aus (weil jeder Körper die Flugbahn jedes anderen Körpers durch Anziehung oder Abstoßen beeinflusst und damit die Flugbahn jedes einzelnen Objektes von O(n) Körpern abhängt). 3.1 Analysekriterien für kinetische Datenstrukturen Um die Analyse zu vereinfachen, wird vorausgesetzt, dass es keine Flugplanänderungen außer beim Aufbauen der kinetischen Datenstruktur gibt. Um die Komplexität der Schnitte zwischen Bewegungsbahnen einzuschränken, soll zusätzlich gelten, dass alle Bewegungsbahnen pseudo-algebraische Splines – wie sie in [1] und [2] genannt werden – sind, d.h. jede Bewegungsbahn besteht aus einer Menge von zusammengesetzten Kurven (beschrieben durch Polynome kleiner Ordnung, meist ≤ 3) und die Übergänge von einer Kurve zur nächsten sind Flugplan-Updates (siehe Abb. 5). Die Kurven sind dabei pseudo-algebraisch bzgl. der kinetischen Datenstruktur, d.h., dass alle Zertifikate in der kinetischen Datenstruktur für einen beliebigen den Kurven folgenden Weg nur begrenzt oft den Zustand zwischen gültig und ungültig wechseln können. Diese Bedingung wird dazu benutzt, die Anzahl möglicher Schnitte zwischen Bewegungsbahnen einzuschränken. Abbildung 5: Hier ist die Bewegungsbahn eines Objekts in Form von mehreren Splines in Rot dargestellt. In Grün sind die Flugplan-Updates gekennzeichnet. Zur Vereinfachung wird eine Menge klein genannt, wenn ihre Ordnung O(polylog(n)) oder O(nε ) für ein beliebig kleines ε > 0 ist. Ansprechbarkeit (responsiveness) Die Ansprechbarkeit beschreibt die Laufzeit, die im Worst Case benötigt wird, um den Korrektheitsbeweis nach dem Scheitern eines Zertifikats zu aktualisieren. Dazu gehört das Prüfen, ob die geometrische Struktur der Lösungsmenge sich geändert hat, falls ja, muss diese aktualisiert werden. Es müssen evtl. neue Zertifikate erzeugt und/oder alte entfernt werden. Die Ereigniswarteschlange muss aktualisiert werden. Ist diese Laufzeit klein (im eben definierten Sinne), so ist die entsprechende kinetische Datenstruktur ansprechbar. Effizienz (efficiency) Die Effizienz beschreibt die Eigenschaft, dass die Anzahl der während der gesamten Simulation behandelten Ereignisse im Verhältnis zu der Anzahl der externen Ereignisse klein ist. Es wird zwischen schwacher Effizienz und starker Effizienz unterschieden, die Beispiele in dieser Arbeit sind aber bestenfalls schwach effizient. Schwache Effizienz (weak efficiency) beschreibt, dass der Quotient aus der Anzahl aller Eine Ausarbeitung im Rahmen des Seminars zur Projektgruppe Peer-to-peer-Netzwerke für dynamische 3D-Szenen, 2003/2004 5 3. Beispiele für kinetische Datenstrukturen Dietrich Travkin im Worst Case bearbeiteten Ereignisse (Zähler) und der Anzahl der im Worst Case vorhandenen externen Ereignisse (Nenner) klein ist. Starke Effizienz (strong efficiency) beschreibt, dass der Quotient aus der Anzahl aller bearbeiteten Ereignisse (Zähler) und der Anzahl der externen Ereignisse (Nenner) im Worst Case klein ist. Lokalität (locality) Die Lokalität beschreibt die maximale Anzahl Zertifikate, in die ein Objekt verwickelt ist. Ist diese Anzahl klein, so ist die kinetische Datenstruktur lokal. Da bei der Flugplanänderung eines Objektes die Zertifikate überprüft werden müssen, in die das Objekt verwickelt ist, führt eine kleine Anzahl solcher Zertifikate zu schnellen Flugplan-Updates. Kompaktheit (compactness) Die Kompaktheit beschreibt die maximale Anzahl Zertifikate in der kinetischen Datenstruktur zu einem Zeitpunkt der Simulation. Ist diese Anzahl der Ordnung O(n · polylog(n)) oder O(nε+1 ) für ein beliebig kleines ε > 0 , so ist die kinetische Datenstruktur kompakt. 3.2 Datenstrukturen für ein einfaches Maximum-Problem Um die bisher nur sehr allgemein vorgestellten kinetischen Datenstrukturen besser zu illustrieren, betrachten wir die folgende Situation im Eindimensionalen. Gegeben n Punkte, die sich mit konstanten (aber evtl. verschiedenen) Geschwindigkeiten entlang der y-Achse bewegen, anfangend bei einer beliebigen Konfiguration. Wenn zwei Punkte die gleiche Höhe erreichen, so bewegen sie sich kollisionsfrei aneinander vorbei. Eine kinetische Datenstruktur soll zu jedem Zeitpunkt den obersten Punkt angeben können (der größte Punkt, wenn man diesen als Zahl betrachtet). Da die Geschwindigkeiten der Punkte konstant sind, könnte man ihre Positionen durch Geraden in der y-t-Ebene (die t-Achse ist die Zeitachse) darstellen. Ein Schnitt zwischen zwei Geraden ist dann gerade der Zeitpunkt, an dem zwei Punkte die gleiche Höhe erreicht haben und sich ihre Rangordnung bzgl. der Höhe ändert. Setzt man die obersten Segmente zwischen solchen Schnittpunkten zu einem Polygonzug zusammen, entsteht eine graphische Beschreibung, die zu jedem Zeitpunkt den obersten Punkt angibt (siehe Abb. 6). Mit dieser Erkenntnis lässt sich das Problem offline vor der Simulation der Bewegungen lösen, was aber so nicht erwünscht ist. Bei diesem Ansatz setzt man voraus, dass alle Bewegungen im Voraus bekannt sind. Deswegen ist es nicht möglich, das Ergebnis online an eventuelle FlugplanUpdates anzupassen. Abbildung 6: Die Punkte a, b, c und d bewegen sich mit konstanter Geschwindigkeit entlang der y-Achse. Der Polygonzug bestehend aus den dick gezeichneten Liniensegmenten gibt zu jedem Zeitpunkt das Maximum der Punkte bzgl. ihrer y-Werte an. KDS 1 (geordnete Liste) Ein anderer (kinetischer) Ansatz ist, eine zu jedem Zeitpunkt bzgl. der Höhe geordnete Liste der Punkte zu verwalten. Zu Beginn der Simulation existiert bereits eine korrekt geordneEine Ausarbeitung im Rahmen des Seminars zur Projektgruppe Peer-to-peer-Netzwerke für dynamische 3D-Szenen, 2003/2004 6 3. Beispiele für kinetische Datenstrukturen Dietrich Travkin te Liste. Für je zwei in der Ordnung nebeneinander liegenden Punkte wird ein Ereignis in die Warteschlange eingefügt, der angibt, wann diese zwei Punkte die gleiche Höhe erreichen werden. Tritt ein solches Ereignis ein, so ändern die zwei betroffenen Punkte ihre Positionen in der Ordnung. Dabei gehen bis zu zwei Nachbarschaften zwischen Punkten verloren und es kommen bis zu zwei neue hinzu. Deswegen müssen bis zu zwei Ereignisse aus der Warteschlange entfernt und bis zu zwei neue eingefügt werden (siehe Abb. 7 und 8). Abbildung 8: Beim Simulieren des Ereignisses eb,c ändert sich die Ordnung in der Liste. Dabei gehen die Nachbarschaftsbeziehungen {a, b} und {c, d} verloren und es kommen 2 neue hinzu, nämlich {a, c} und {b, d}. Die KDS entfernt deswegen die eingeplanten Ereignisse ea,b und ec,d und fügt die neuen Ereignisse ea,c und eb,d ein. Abbildung 7: Zum Zeitpunkt t0 existiert eine korrekt geordnete Liste der Punkte. Die KDS hat für alle Nachbarn in dieser Liste die zugehörigen Ereignisse eb,c , ea,b und ec,d berechnet und in die Ereigniswarteschlange eingefügt. Die Zertifikate bei dieser kinetischen Datenstruktur sind gerade die Bedingungen dafür, dass der y-Wert eines Punktes kleiner bzw. größer ist als der y-Wert seines Nachbars. Es gibt immer nur O(n) Zertifikate, also ist diese Datenstruktur kompakt. Jeder Punkt ist in bis zu 2 Zertifikate verwickelt, deswegen ist die Datenstruktur auch lokal. Das Aktualisieren der Zertifikate (bis zu 2 Ereignisse entfernen, bis zu 2 neue Ereignisse hinzufügen und eine Vertauschung in der geordneten Liste) benötigt die Laufzeit O(n), damit ist die Datenstruktur zusätzlich ansprechbar. Der höchste Punkt kann im Worst Case O(n) Mal wechseln, wenn die Flugpläne sich nicht ändern, es gibt also höchstens O(n) externe Ereignisse. Die Anzahl der insgesamt behandelten Ereignisse ist aber im Worst Case O(n2 ) (z.B., wenn eine Hälfte der Punkte sich nicht bewegt und die andere n Hälfte der Punkte die erste Hälfte kreuzt, so streift jeder Punkt in der einen Hälfte die 2 Punkte in der anderen Hälfte, insgesamt sind das n2 · n2 = O(n2 ) behandelte Ereignisse), d.h. diese kinetische Datenstruktur ist nicht effizient . KDS 2 (binärer Heap) Eine weitere Möglichkeit für eine kinetische Datenstruktur ist, die Punkte bzgl. ihrer Position auf der y-Achse in einem binären Heap zu verwalten (der Punkt mit maximalem y-Wert ist die Wurzel). Zu Beginn der Simulation ist so ein Heap bereits aufgebaut. Unter der Annahme, dass sich zu jedem Zeitpunkt höchstens zwei Punkte auf gleicher Höhe befinden, kann die Datenstruktur (und damit auch die Zertifikate) bei Eintreten eines externen Ereignisses in konstanter Zeit aktualisiert werden. Im Worst Case, nämlich wenn ein Punkt und sein Elternteil im Heap ihre Rangordnung wechseln, reicht es aus, die Elementpositionen im Heap zu vertauschen. Dabei gehen bis zu 4 Eltern-Kind-Beziehungen im Heap verloren und es kommen bis zu 4 neue Beziehungen hinzu (siehe Abb. 9). Da die Höhen der im Heap vertauschten Punkte zu diesem Zeitpunkt gleich sind, bleiben dabei alle Heap-Eigenschaften erhalten. Auch diese kinetische Datenstruktur ist kompakt, denn die Anzahl der Zertifikate (das sind gerade die ≤-Beziehungen, die durch die Heap-Kanten repräsentiert werden) ist O(n). Jeder Punkt ist in bis zu 3 Zertifikate verwickelt (zwei Kinder und ein Elternteil), also ist Eine Ausarbeitung im Rahmen des Seminars zur Projektgruppe Peer-to-peer-Netzwerke für dynamische 3D-Szenen, 2003/2004 7 3. Beispiele für kinetische Datenstrukturen Dietrich Travkin Abbildung 9: Links ist der Heap vor dem Vertauschen der Knoten b und d zu sehen, die zugehörigen Punkte haben gleiche y-Werte. Nach dem Vertauschen gehen die vier grün markierten Kanten verloren und es kommen die vier im rechten Bild blau markierten Kanten hinzu. die kinetische Datenstruktur lokal. Das Aktualisieren der Zertifikatmenge, um die Korrektheit der Heap-Ordnung aufrecht zu erhalten, ist in linearer Laufzeit möglich, deswegen ist die Datenstruktur ansprechbar. Die Anzahl der externen Ereignisse im Worst Case ist wie oben O(n), die Anzahl der insgesamt behandelten Ereignisse ist allerdings nur schwer zu bestimmen. Laut [2] wurde O(n log2 n) als obere Schranke bewiesen. Damit ist diese kinetische Datenstruktur auch (schwach) effizient. KDS 3 (Kinetisches Turnier) und Kinetisierung statischer Algorithmen Nun soll noch eine dritte Möglichkeit für eine kinetische Datenstruktur vorgestellt werden. In diesem Fall soll allerdings illustriert werden, wie ein klassischer statischer Algorithmus (für das statische Problem, d.h. in unserem Beispiel: die Punkte bewegen sich nicht) kinetisiert“, ” also an das kinetische Problem angepasst wird. Wenn sich die Punkte nicht bewegen, dann braucht der statische Algorithmus nur ein Maximum der y-Werte von n (statischen) Punkten zu berechnen. Wählen wir einen Algorithmus, der das Maximum berechnet, indem dieser die Punktemenge in zwei beliebige etwa gleichgroße Gruppen aufteilt, dann rekursiv das Maximum jeder Gruppe berechnet und anschließend durch Vergleichen der beiden Maxima das Maximum aller Punkte bestimmt. Der Algorithmus geht also wie bei einem Turnier vor, um den Sieger (das Maximum) zu bekommen. Dabei führt der Algorithmus insgesamt O(n) Vergleiche durch, diese belegen die Korrektheit des errechneten Maximums. Betrachtet man nun den kinetischen Fall, d.h. die Punkte können sich bewegen, dann ist das Ergebnis des statischen Algorithmus solange, wie die von ihm gemachten Vergleiche korrekt bleiben, auf jeden Fall richtig. Deswegen können alle diese Vergleichsergebnisse, genauer: die Bedingungen a.y ≤ b.y für Punkte a und b, als Zertifikate für die Korrektheit des Maximums betrachtet werden (Korrektheitsbeweis). Im Allgemeinen kann ein statischer Algorithmus kinetisiert werden, indem zu den von ihm benutzten Korrektheitsbedingungen (Zertifikate) – in unserem Beispiel also den Vergleichen – je ein Ereignis in eine Warteschlange eingefügt wird, das beschreibt, wann diese Bedingung in Zukunft (möglicherweise) verletzt wird. Für die Fälle, dass ein Zertifikat verletzt wird, versucht man, eine möglichst einfache und effiziente Methode zu finden, die Ausgabe des statischen Algorithmus zu korrigieren und die Zertifikatmenge zu aktualisieren. Wie bereits erwähnt, werden dabei Flugpläne und Bewegungskonstanten verwendet, um die Ereigniszeitpunkte zu berechnen und die Ereignisse werden chronologisch bearbeitet bzw. simuliert. Bei dem Maximum-Problem und dem oben beschriebenen statischen Algorithmus wird ein Zertifikat ungültig, wenn sich bei einem bestimmten Vergleich das Ergebnis ändert. Das ist ein Vergleich zwischen zwei Gewinnern“ (Maxima) zweier Untergruppen auf einem bestimmten ” Level des Turnierbaums. Ändert sich also das Ergebnis dieses Vergleichs (es gibt einen neuen Gewinner“), so müssen alle zugehörigen Vergleiche höherer Ebenen aktualisiert werden, bis ” der neue Gewinner“ verliert“ oder der Gesamtsieger“ ist. Die Autoren von [2] nennen die ” ” ” durch die oben genannten Anpassungen entstehende kinetische Datenstruktur kinetisches Turnier. Da der Turnierbaum balanciert ist, benötigt die Aktualisierung des Turnierbaums nach dem Ungültigwerden eines Zertifikats O(log n) Rechenschritte und es müssen im Worst Case O(log n) Zertifikate entlang eines Weges von dem ungültig gewordenen Zertifikat zur Wurzel Eine Ausarbeitung im Rahmen des Seminars zur Projektgruppe Peer-to-peer-Netzwerke für dynamische 3D-Szenen, 2003/2004 8 3. Beispiele für kinetische Datenstrukturen Dietrich Travkin des Turnierbaums aktualisiert werden. Dabei wird in jedem Schritt eine konstante Anzahl Ereignisse aus der Warteschlange entfernt bzw. eingefügt. Das kinetische Turnier ist in diesem Beispiel also eine ansprechbare kinetische Datenstruktur. Die maximale Anzahl der Zertifikate in dieser Struktur ist O(n), das ist gerade die Anzahl der Vergleiche, die der statische Algorithmus macht. Deswegen ist die Datenstruktur kompakt. Jeder Punkt kann in höchstens O(log n) Zertifikate verwickelt sein (das sind die Vergleiche entlang eines Pfades in dem Turnierbaum), darum ist die Datenstruktur auch lokal. Nun stellt sich die Frage der Effizienz. Es gibt – wie bereits erwähnt – höchstens O(n) externe Ereignisse, aber wie viele Ereignisse werden von dieser KDS insgesamt behandelt (im Worst Case)? Nun, das kinetische Turnier macht eigentlich nichts anderes als, mit der Divide-and-conquer-Methode einen obersten Liniensegmentzug von n sich evtl. schneidenden Linien in der t-y-Ebene zu berechnen (siehe Abb. 6 auf Seite 6). Die Anzahl der Ereignisse bei dem kinetischen Turnier ist proportional zu der Anzahl aller Wechsel eines Gewinners in einem Knoten des Turnierbaums (Ein Gewinner wechselt, wenn z.B. bei den Punkten a und b als Kontrahenten in einer Ebene des Turnierbaums anstatt a der Punkt b zum Gewinner wird, d.h. die Beziehung a ≥ b ändert sich zu a ≤ b). Jeder dieser Gewinnerwechsel entspricht einem Schnitt zwischen zwei von dem Divide-and-conquer-Algorithmus berechneten obersten Liniensegmentzügen zweier Untergruppen der Punkte (siehe Abb. 10). Wie viele Abbildung 10: Die beiden Geraden stellen je einen obersten Liniensegmentzug der Untergruppen {a} und {b} dar. Beim Ereignis e passiert ein Gewinnerwechsel, d.h. in dem Turnierbaum gibt es für die Untergruppen {a} und {b} einen neuen Gewinner und zwar b. solcher Schnitte werden also von dem Divide-and-conquer-Algorithmus im Worst Case berechnet? Der Algorithmus teilt das Problem rekursiv in zwei Unterprobleme halber Größe auf, löst diese und fügt die Lösungen der beiden Unterprobleme zu einer Gesamtlösung zusammen. Dadurch entsteht für die Laufzeit die Rekursionsgleichung T (n) = 2T ( n2 ) + f (n), wobei f (n) die Laufzeit für eine Merge-Operation ist. Die Lösung eines Unterproblems ist ein oberster Liniensegmentzug, zwei solche Segmentzüge werden durch eine Merge-Operation zu einem neuen Segmentzug zusammengeführt (siehe Abb. 11). Die Merge-Operation kann Abbildung 11: Links sind die Liniensegmentzüge der Untergruppen {a, d} und {b, c} dick eingezeichnet. Diese werden mit der Merge-Operation zu einem neuen Liniensegmentzug aller Punkte, also der Gruppe {a, b, c, d} zusammengeführt. mit einem Sweepline-Verfahren implementiert werden, sodass die Laufzeit für eine MergeOperation im Worst Case Θ(n) ist (siehe Abb. 12). Damit löst sich die Rekursionsgleichung T (n) = 2T ( n2 ) + Θ(n) mit Hilfe des Master-Theorems zu T (n) = O(n log n) auf. Das heißt, Eine Ausarbeitung im Rahmen des Seminars zur Projektgruppe Peer-to-peer-Netzwerke für dynamische 3D-Szenen, 2003/2004 9 4. Anwendbarkeit Dietrich Travkin Abbildung 12: Hier werden die Liniensegmentzüge zweier Untergruppen mit dem SweeplineVerfahren zu einem gemeinsamen Liniensegmentzug zusammengeführt. Dabei wird abwechselnd ein rotes bzw. ein grünes Segment festgehalten und auf Schnitte mit chronologisch sortierten Segmenten der jeweils anderen Farbe geprüft, bis ein Segment erreicht wurde, dessen Endpunkt rechts von dem Endpunkt des festgehaltenen Segments liegt. Ist so ein Segment erreicht worden, so wird dieses (nach dem Prüfen auf Schnitte mit dem aktuellen festgehaltenen Segment) zum neuen festgehaltenen Segment mit einer anderen Farbe. Ob zwei Liniensegmente sich schneiden kann in konstanter Zeit geprüft werden. Die Anzahl der Prüfungen, ob sich zwei Segmente schneiden, ist O(n). Damit kann die Merge-Operation in O(n) Rechenschritten durchgeführt werden. O(n log n) ist eine obere Schranke für die Anzahl der vom kinetischen Turnier behandelten Ereignisse. Die Anzahl der externen Ereignisse ist im Worst Case O(n), damit ist diese kinetische Datenstruktur auch (schwach) effizient. 4 Anwendbarkeit 4.1 Anwendungsgebiete für kinetische Datenstrukturen Die in dieser Arbeit vorgestellten Beispiele für kinetische Datenstrukturen sind aus Gründen der Didaktik von besonders einfacher Natur. In [1] wurden kinetische Datenstrukturen auch für komplexere geometrische Problemstellungen präsentiert, z.B. die Berechnung konvexer Hüllen, minimaler Spannkreise und Spannbäume, Closest Pairs, Voronoi-Diagramme und Delaunay-Triangulierungen und BSPs (Binary Space Partitions). Laut [1] sind die kinetischen Datenstrukturen auch für nicht-geometrische Probleme anwendbar, z.B. für das hier vorgestellte Maximum-Problem (die Punkte werden dann nur noch als Zahlen angesehen, d.h. als y-Werte der Punkte) oder für die Berechnung von kürzesten Pfaden in einem Graph mit sich ständig ändernden Kantenkosten. Damit die kinetischen Datenstrukturen anwendbar sind, müssen einige Voraussetzungen erfüllt sein: Es wird eine große Anzahl sich kontinuierlich bewegender (verändernder) Objekte (starr oder sogar verformbar) behandelt, wobei die Bewegungen (Veränderungen) bestimmten bekannten Gesetzen folgen (z.B. Maximalgeschwindigkeit und -beschleunigung). Die Objekte dürfen nicht von einem Ort zu einem anderen springen (bzw. ihren Wert sprungweise ändern). Bei geometrischen Problemen müssen die Bewegungsbahnen der Objekte so genannte pseudo-algebraische Splines sein, um die Komplexität der Schnitte zwischen Bewegungsbahnen einzugrenzen. Für die oben genannten kinetischen Datenstrukturen aus [1] wird zusätzlich vorausgesetzt, dass sämtliche Flugpläne mit vollständiger Bewegungsinformation vorhanden sind und alle Flugplan-Updates als Ereignisse in die Warteschlange der kinetischen Datenstruktur eingetragen sind. Außerdem soll jeder Flugplan eine konstante Komplexität haben, dieser darf also nicht von der Anzahl n der sich bewegenden Objekte abhängen. Erwähnenswert ist auch, dass eine kinetische Datenstruktur zentral agiert, d.h. bei Bewegungssimulationen befinden sich sämtliche Daten sowie die kinetische Datenstruktur auf nur einem Rechner. Die Berechnungen müssen auch nicht Echtzeit-fähig sein, denn die Laufzeit misst sich an der Anzahl der externen Ereignisse. Das heißt aber, dass eine kinetische Datenstruktur für z.B. 3000 externe Ereignisse innerhalb von 1 ms genauso viel Rechenzeit zur Verfügung hat, wie für 3000 externe Ereignisse innerhalb von einer Stunde. Eine Ausarbeitung im Rahmen des Seminars zur Projektgruppe Peer-to-peer-Netzwerke für dynamische 3D-Szenen, 2003/2004 10 4. Anwendbarkeit Dietrich Travkin Für die Beispiele aus [1] wird vorausgesetzt, dass die Flugpläne für alle Objekte a priori bekannt sind, das ist meist nicht der Fall. Es ist möglich, dass Flugpläne nur Teilinformationen zu den Bewegungsdaten enthalten oder gar keine Flugpläne vorliegen. In diesem Fall kann man aber die kinetische Datenstruktur so entwickeln, dass sie versucht, die Bewegungen der Objekte in naher Zukunft vorherzusagen, indem ihre vergangenen Bewegungen extrapoliert werden. So können aber keine exakten Zeitpunkte für die Ereignisse berechnet werden. Eine andere Möglichkeit ist, mit Hilfe der Positionsdaten und der gegebenen Bewegungskonstanten wie Maximalgeschwindigkeit sowie der evtl. zum Teil vorhandenen Flugpläne Abschätzungen zu machen, d.h. vorherzusagen, wann ein Zertifikat frühestens scheitern kann. Dieser Zeitpunkt wird als Ereignis in die Warteschlange eingefügt, bei dessen späterer Bearbeitung die Zertifikate unter Zuhilfenahme evtl. neuer oder aktualisierter Positions- und Bewegungsdaten überprüft werden. So bekommt man eine obere Schranke für die Zeitspanne, in der die geometrische Struktur der Lösungsmenge immernoch korrekt ist. Zusammenfassend kann man sagen, dass die Anwendungsgebiete für kinetische Datenstrukturen durch die oben genannten Voraussetzungen stark eingeschränkt sind. Für kompliziertere Problemstellungen sind Anpassungen nötig. Der Hauptvorteil der kinetischen Datenstrukturen ist, dass sie nach dem Online-Prinzip, ereignisbasierend vorgehen und nicht an feste Zeitintervalle gebunden sind. So wird die Kontinuität der Bewegungen besser ausgenutzt als bei vielen anderen Datenstrukturen und Algorithmen. Die kinetischen Datenstrukturen wurden in erster Linie für die Behandlung von sich kontinuierlich verändernden Daten optimiert und nicht, um mit Daten umgehen zu können, bei denen sich durch Einfügen und Entfernen die Anzahl der betrachteten Objekte ändern kann – wie bei den klassischen dynamischen Datenstrukturen. Es ist aber auch möglich (und oft erwünscht), die Konzepte der dynamischen und kinetischen Datenstrukturen zu verbinden, um auf diese Weise beide Problemarten behandeln zu können. Kinetische Datenstrukturen sind für Simulationen von kontinuierlichen Bewegungen ohne Echtzeitrestriktionen gut geeignet. Sie sichern die Korrektheit der Simulation und können mit großen Objektmengen umgehen. Die behandelten Probleme müssen so sein, dass die Bewegungen bzw. Veränderungen der Objekte bestimmten bekannten Gesetzen folgen (Schranken, Parameter, Konstanten,. . . ). Besonders gut lassen sich die kinetischen Datenstrukturen anwenden, wenn jede Flugplanänderung Flugplan-Updates (idealerweise mit vollständigen Bewegungsinformationen) bewirkt und sämtliche Flugplan-Updates bekannt gemacht werden. 4.2 Anwendbarkeit in der Projektgruppe Im Rahmen der Projektgruppe Peer-to-peer-Netzwerke für dynamische 3D-Szenen sollen unter anderem Sichtbarkeitsprobleme zwischen sehr vielen (ca. 100.000 oder mehr) hochdynamischen Objekten gelöst werden. Auch hier gehen wir von kontinuierlichen Bewegungen aus, deswegen stellt sich die Frage der Anwendbarkeit von kinetischen Datenstrukturen für die Verwaltung der benötigten Daten. Wie bereits erwähnt, sind die in [1] vorgestellten kinetischen Datenstrukturen nur unter einer Reihe Voraussetzungen an das zu behandelnde Problem anwendbar. Besondere Schwierigkeiten bereitet dabei die Echtzeit-Anforderung unserer Projektgruppe. Die kinetischen Datenstrukturen, so wie sie in [1] vorgestellt wurden, können zwar eine beliebige endliche Anzahl Ereignisse in einem beliebig kleinen (simulierten) Zeitintervall behandeln, die zugehörige Berechnung kann dann aber sehr lange dauern. Die Datenstrukturen müssten so angepasst werden, dass die zu behandelnden Ereignisse in Echtzeit simuliert und die Rechenzeitbeschränkungen berücksichtigt werden. Das beinhaltet ein Abbrechen von Berechnungen, die nicht bis zu ihrer Deadline beendet werden können oder ein Anpassen der Genauigkeit der Berechnungen, um die Deadlines leichter einhalten zu können. Beides wirft aber das Problem der Korrektheit der Simulation auf. Eine weitere Anpassung wäre nötig, um die kinetischen Datenstrukturen verteilt, anstatt zentral (wie in [1]), zu benutzen, denn im Rahmen der Projektgruppe sollen die Bewegungsdaten auf mehrere Rechner im Peer-to-peer-Netzwerk verteilt behandelt werden. Außerdem wird für die in [1] vorgestellten kinetischen Datenstrukturen vorausgesetzt, dass für jede Flugplanänderung auch Flugplan-Updates vorhanden sind und die Bewegungsinformationen vollständig sind. Bei zufällig bewegten oder von Menschen geEine Ausarbeitung im Rahmen des Seminars zur Projektgruppe Peer-to-peer-Netzwerke für dynamische 3D-Szenen, 2003/2004 11 LITERATUR Dietrich Travkin steuerten Objekten ist es nicht möglich, sämtliche Bewegungen in Form von Flugplänen der kinetischen Datenstruktur bekannt zu machen. Die Datenstruktur muss also Bewegungen mit Hilfe von Bewegungskonstanten wie Höchstgeschwindigkeit abschätzen, was die Anzahl der zu behandelnden Ereignisse erhöht und die Datenstrukturen möglicherweise ineffizient macht. Klar ist, dass die vorgestellten kinetischen Datenstrukturen in der Projektgruppe nicht ohne umfangreiche Anpassungen verwendet werden können. Die Idee, die Korrektheit durch Zertifikate aufrecht zu erhalten und ereignisbasiert vorzugehen, könnte für die Projektgruppe nützlich sein. Die Echtzeitanforderungen stellen aber ein großes Problem dar und es ist noch nicht abzusehen, ob die kinetischen Datenstrukturen in der Projektgruppe tatsächlich Anwendung finden können. Literatur [1] Leonidas J. Guibas: Kinetic Data Structures - A State of the Art Report, Stanford University, 1997 [2] Julien Basch, Leonidas J. Guibas, John Hershberger: Data Structures for Mobile Data, ACM-SIAM Symposium on Discrete Algorithms, pages 747-756, 1997 Eine Ausarbeitung im Rahmen des Seminars zur Projektgruppe Peer-to-peer-Netzwerke für dynamische 3D-Szenen, 2003/2004 12