Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
1
Das Maßproblem von Klee
Jörg Bruder Benjamin Drayer Joachim Krempel Daniel Schüssele
2
Übersicht Problem 1-dimensional Problem 2-dimensional
Scanline (Bentley) Naive Lösung Segmentbaum Lösung Problem d-dimensional
3
Das eindimensionale Maßproblem
Gegeben: n Intervalle auf einer Geraden.
4
Das eindimensionale Maßproblem
Gegeben: n Intervalle auf einer Geraden.
5
Das eindimensionale Maßproblem
Gegeben: n Intervalle auf einer Geraden. Gesucht: Länge der Vereinigung über alle n Intervalle
6
Das eindimensionale Maßproblem
Gegeben: n Intervalle auf einer Geraden. Gesucht: Länge der Vereinigung über alle n Intervalle
7
Das eindimensionale Maßproblem
Gegeben: n Intervalle auf einer Geraden. Gesucht: Länge der Vereinigung über alle n Intervalle Platzbedarf: O(n)
8
Das eindimensionale Maßproblem
Gegeben: n Intervalle auf einer Geraden. Gesucht: Länge der Vereinigung über alle n Intervalle Platzbedarf: O(n) Zeitkomplexität: O(n log(n))
9
Das zweidimensionale Maßproblem
10
Das zweidimensionale Maßproblem
Gegeben: n Rechtecke
11
Das zweidimensionale Maßproblem
Gegeben: n Rechtecke Gesucht: Die von den Rechtecken überdeckte Fläche
12
Scanline Speicherung der Rechtecke Scanline Berechnung der Fläche
13
Speicherung der Rechtecke
q = (x-low, x-high, y-low, y-high)
14
Scanline Sortiere x-Werte aufsteigend Verschmelze gleiche x-Werte
Analog y-Werte Speichere die v als Listen bei den u
15
Scanline
16
Scanline
17
Scanline
18
Scanline
19
Berechnung der Fläche
20
Berechnung der Fläche m(i)=Maß der aktiven Segmente
21
Naiver Ansatz Verwende die Scanline
Berechne m(i) als eindimensionales Maßproblem Achtung: Worstcaselaufzeit
22
Segmentbaum Idee Blätter q-voll, q-partiell 1-Umbrella count(x)
Delta(x) Einfügen Löschen Gesamtalgorithmus
23
Segmentbaum Idee Blätter q-voll, q-partiell 1-Umbrella count(x)
Delta(x) Einfügen Löschen Gesamtalgorithmus
24
Idee Speichere nicht die Fragmente aus denen ein Segment besteht sondern markiere bestimmte Knoten. Der Unterbaum, der von jedem Knoten ausgeht überdeckt gewisse Segmente. Das Maß der aktiven Segmente soll in den Knoten gespeichert werden. Wenn dies realisiert ist, dann kann man an der Wurzel des Baumes das Gesammtmaß für die gerade aktiven Segmente ablesen.
25
Segmentbaum Idee Blätter q-voll, q-partiell 1-Umbrella count(x)
Delta(x) Einfügen Löschen Gesamtlgorithmus
26
Blätter Speichere alle y-Werte bis auf und doppelt,
da sie einmal als Anfang und einmal als Ende eines Segments auftreten.
27
Segmentbaum Idee Blätter q-voll, q-partiell 1-Umbrella count(x)
Delta(x) Einfügen Löschen Gesamtlgorithmus
28
q-voll, q-partiell Knoten A ist q-voll, wenn das Segment von A ganz in q liegt
29
q-voll, q-partiell Knoten A ist q-partiell, wenn A nicht q-voll ist aber einen Sohn hat, der q-voll oder q-partiell ist.
30
Segmentbaum Idee Blätter q-voll, q-partiell 1-Umbrella count(x)
Delta(x) Einfügen Löschen Gesamtalgorithmus
31
1-Umbrella Konstrukt um Infomationen effizient in den Knoten zu halten
1-Umbrella für Segment q: -Tip t
32
1-Umbrella Konstrukt um Infomationen effizient in den Knoten zu halten
1-Umbrella für Segment q: -Tip t - high-line, low-line, high-tip, low-tip
33
1-Umbrella Konstrukt um Infomationen effizient in den Knoten zu halten
1-Umbrella für Segment q: -Tip t - high-line, low-line, high-tip, low-tip - q-volle Knoten an der high- oder low-line
34
1-Umbrella Konstrukt um Infomationen effizient in den Knoten zu halten
1-Umbrella für Segment q: -Tip t - high-line, low-line, high-tip, low-tip - q-volle Knoten an der high- oder low-line Analyse:
35
1-Umbrella Konstrukt um Infomationen effizient in den Knoten zu halten
1-Umbrella für Segment q: -Tip t - high-line, low-line, high-tip, low-tip - q-volle Knoten an der high- oder low-line Analyse: - O(log(n)) Knoten
36
1-Umbrella Konstrukt um Infomationen effizient in den Knoten zu halten
1-Umbrella für Segment q: -Tip t - high-line, low-line, high-tip, low-tip - q-volle Knoten an der high- oder low-line Analyse: - O(log(n)) Knoten - O(log(n)) Zeit
37
Segmentbaum Idee Blätter q-voll, q-partiell 1-Umbrella count(x)
Delta(x) Einfügen Löschen Gesamtalgorithmus
38
count(x) Idee war das Maß in den Knoten zu speichern nicht die Umbellas Gefahr: Das Maß soll sich nur erhöhen, wenn ein noch nicht ganz enthaltenes Segment eingefügt wird Gefahr: Beim Löschen muß berücksichtigt werden ob es noch andere Segmente gibt, die das gelöschte Intervall überdecken Lösung: Zusatzinformation in den Knoten
39
count(x) Informationen in den Knoten
Speichere im Knoten x das aktuelle Maß val(x) Speichere im Knoten x, wie oft x als q-voller Knoten in einem 1-Umbrella vorkommt als count(x)
40
Segmentbaum Idee Blätter q-voll, q-partiell 1-Umbrella count(x)
Delta(x) Einfügen Löschen Gesamtalgorithmus
41
Delta(x) Aktualisiert val(x) und count(x) im Knoten x, wenn ein Segment eingefügt wird und gibt Änderung zurück Fall 1: Fall 2: - count(x)++ - Änderung=Segmentgröße - val(x) - val(x)=Segmentgröße - count(x)++ - Änderung=0 - val(x) bleibt
42
Delta(x) Algorithmus: if(val(x)=Segmentgröße){ count(x)++; return 0; }
else{ f=Segmetgröße-val(x); val(x)=Segmentgröße; return f; Laufzeit: O(1)
43
Segmentbaum Idee Blätter q-voll, q-partiell 1-Umbrella count(x)
Delta(x) Einfügen Löschen Gesamtlgorithmus
44
Einfügen Berechnen des 1-Umbrellas
Von low- und high-tip bis t mit Delta(x) updaten Bei t Informationen verschmelzen Information zur Wurzel propagieren
45
Einfügen Algorithmus: incr=Delta(low-tip); x=father(low-tip);
46
Einfügen
47
Einfügen
48
Einfügen Algorithmus: incr=Delta(low-tip); x=father(low-tip);
while(x!=t){ f=0; if(x hat einen q-vollen Sohn y){ f=Delta(y); }
49
Einfügen
50
Einfügen Algorithmus: incr=Delta(low-tip); x=father(low-tip);
while(x!=t){ f=0; if(x hat einen q-vollen Sohn y){ f=Delta(y); } if(val(x)=Wert des gesammten von x aufgespannten Segments){ incr=0; else{ incr=incr+f; val(x)=val(x)+incr; x=father(x);
51
Einfügen
52
Einfügen Algorithmus: incr=Delta(low-tip); x=father(low-tip);
while(x!=t){ f=0; if(x hat einen q-vollen Sohn y){ f=Delta(y); } if(val(x)=Wert des gesammten von x aufgespannten Segments){ incr=0; else{ incr=incr+f; val(x)=val(x)+incr; x=father(x);
53
Einfügen Die Hilfsfunktion Delta(x) wird in konstanter Zeit abgearbeitet. Die Berechnung des 1-Umbrellas O(log(n)). Die Schleifendurchläufe der while-Schleife O(log(n)) Propagieren ebenfalls in O(log(n)) => Einfügen in O(log(n))
54
Segmentbaum Idee Blätter q-voll, q-partiell 1-Umbrella count(x)
Delta(x) Einfügen Löschen Gesamtalgorithmus
55
Löschen Analog zum Einfügen
56
Segmentbaum Idee Blätter q-voll, q-partiell 1-Umbrella count(x)
Delta(x) Einfügen Löschen Gesamtalgorithmus
57
Gesamtalgorithmus Scanline ist an
Lese aktive Segmente m(i) an der Wurzel ab, berechne Fläche mit Hilfe von Lösche Segmente die inaktiv werden Füge Segmente ein, die aktiv werden Analyse: - Scanline O(n) - m(i) berechnen O(1) - Löschen/Einfügen O(log(n)) => Gesamtlaufzeit O(n log(n))
58
Beispiel
59
Beispiel x-Werte: 2<4<7<8<9<10
y-Werte: 2<3<4<5<8
60
Beispiel
61
Beispiel Füge Segement a=[4,8] ein
62
Beispiel
63
Beispiel Fläche=4(4-2)=8 Füge Segement b=[3,5] ein
64
Beispiel
65
Beispiel Fläche=5(7-4)+8=23 Entferne a=[4,8]
66
Beispiel
67
Beispiel Fläche=2(8-7)+23=25 Entferne b=[3,5]
68
Beispiel
69
Beispiel Fläche=0(9-8)+25=25 Füge c=[2,3] ein
70
Beispiel
71
Beispiel Fläche=1(10-9)+25=26 Entferne c=[2,3]
72
Das mehrdimensionale Maßproblem
d-Dimensionen Scanlineansatz Kosten:
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.