Datenstrukturen Kap. 8: Geometrische Algorithmen - fbi.h

Werbung
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Gliederung der Vorlesung
1. Einführung/Motivation
2. Rechnermodelle/Effizienzmaße
2.1 RAM
2.2 Effizienzmaße/O-Notation
3. Sortieren
3.1 Elementare Sortierverfahren
3.2 Effiziente Sortierverfahren
3.3 Andere Ansätze
4. Rekursive Algorithmen
4.1 Typische Beispiele
4.2 Iterative vs. rekursive Algorithmen
5. Einfache Datentypen
5.1 Warteschlangen
5.2 Stacks/Listen
6. Wörterbücher
6.1 Hashing
6.2 Suchbäume
6.3 Skip-Listen
7. Bäume/Graphen
7.1 Grundlegende Algorithmen
8. Geometrische Algorithmen
8.1 Geometrische Datenstrukturen
9. Stringsuchverfahren
9.1 Grundlegende Algorithmen
10. Algorithmische Prinzipien
10.1 Dynamisches Programmieren
10.2 Greedy-Algorithmen
1
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
Inklusions- und Schnittproblem für Rechtecke
A
B
C
D
E
gegeben:
Rechtecke, hier { A, B, C, D, E}
gesucht:
alle sich gegenseitig schneidenden Rechteck-Paare (X,Y),
hier { (A,B), (A,C), (A,D), (A,E), (B,C), (B,D) }
Annahme:
zwei Rechteckseiten haben maximal einen Punkt gemeinsam; alle
oberen und unteren Rechteckseiten haben paarweise verschiedene
y-Koordinaten
2
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
Inklusions- und Schnittproblem für Rechtecke
A
B
C
D
E
algorithmische Idee: Anwendung des Scan-Line-Prinzips
...
...
hier in y-Richtung
das Ermitteln der Beziehungen zwischen den „aktiven“
Objekten ist algorithmisch „spannender“
3
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
Inklusions- und Schnittproblem für Rechtecke
A
B
C
D
E
Teilprobleme
•
•
•
die Scan-Line in „geeigneten Sprüngen“ horizontal über die
Rechtecke parallel verschieben (/* Repräsentation */)
die relevanten Teilmengen verwalten
„Einsichten“ über die Beziehung zwischen den aktiven Objekten
ableiten und ausgeben
4
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
... Rechtecke (/* Teilproblem 1 /*)
A
B
C
D
E
Repräsentation:
•
•
je Rechteck: y-Koordinaten der Ecken (/* etwa [.Ay,Ay.] */)
für die Objektmenge: aufsteigend sortierte Menge Q aller
solcher Punkte (/* hier { .Ay, .By, .Cy, .Dy, Cy.,..., Ey. }
... die Elemente in Q sind die „Haltepunkte“ für die horizontale Scan-Line
5
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
... Rechtecke (/* Teilproblem 2 /*)
A
B
C
D
E
Verwaltung:
•
•
initial: tot = aktiv = ∅; inaktiv = Menge aller Rechtecke
einzelne Schritte:
•
falls aktuelles Element in Q vom Typ .Xy
•
aktiv = aktiv ∪ { X }
•
falls aktuelles Element in Q vom Typ Xy.
•
aktiv = aktiv \ { X }; tot = tot ∪ { X }
6
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
... Rechtecke (/* Teilproblem 3 /*)
A
B
C
D
E
es sei .Yy das aktuelle Element in Q
Æ es sind alle Paare (X,Y) auszugeben mit
•
•
X gehört zur Menge der aktiven Rechtecke
die Rechtecke X und Y haben einen Punkt gemeinsam
... es sind sogenannte Überlappungsanfragen zu beantworten
7
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
... Rechtecke (/* Teilproblem 3 /*)
A
B
C
D
E
es seien X und Y zwei Rechtecke mit den x-Koordinaten .X, X., .Y und Y.
Æ es sind zwei Fälle möglich
•
•
.X < .Y < X. (/* das kennen Sie schon; Bereichsanfrage */)
.Y < .X < Y. (/* neu; inverse Bereichsanfrage */)
8
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
gesucht: Datenstruktur zur Unterstützung von inversen Bereichsanfragen
•
•
Repräsentation von Mengen von Intervallen [.X,X.]
Operationen:
•
Einfügen eines Intervalls
•
Löschen eines Intervalls
•
Feststellen, ob ein gegebener Punkt in einem repräsentierten
Intervall liegt (/* inverse Bereichsanfrage, Aufspießfrage */)
9
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
Datenstruktur zur Unterstützung von inversen Bereichsanfragen
Vorverarbeitung (/* Skalierung */)
A
A = [2,9]
B = [4,8]
C = [5,6]
D = [7,10]
E = [1,3]
B
C
D
E
10
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
Datenstruktur zur Unterstützung von inversen Bereichsanfragen
Vorverarbeitung (/* Skalierung */)
A
B
C
D
E
jedes Intervall ist Vereinigung von endlich vielen Elementar-Intervallen
11
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
Datenstruktur zur Unterstützung von inversen Bereichsanfragen
Vorverarbeitung (/* Skalierung */)
A
B
C
D
E
jedes Intervall ist Vereinigung von endlich vielen Elementar-Intervallen
12
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
Datenstruktur zur Unterstützung von inversen Bereichsanfragen
... sogenannte Skelettbäume
1
2
3
4
5
6
7
8
Intervall [7,8]
Intervall [1,8]
Intervall [1,4]
1 2
3 4
Aufbau eines vollständigen Skelettbaum
5 6
7
13
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
Datenstruktur zur Unterstützung von inversen Bereichsanfragen
... sogenannte Skelettbäume
1
2
3
4
5
A
6
7
8
A
1 2
Repräsentation von Intervallen
3 4
5 6
A
7
14
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
Datenstruktur zur Unterstützung von inversen Bereichsanfragen
... sogenannte Skelettbäume
1
2
3
B
4
5
B
6
7
8
B
1 2
Repräsentation von Intervallen
3 4
5 6
B
7
15
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
Skelettbäume
Arbeit mit der Datenstruktur (/* Initialisierung */)
ƒ
Erzeuge einen vollständigen Binärbaum,
der alle zu repräsentierenden Intervalle
aufnehmen kann
... linear in n
16
Annahme: n = Anzahl der Rechtecke
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
Skelettbäume
Arbeit mit der Datenstruktur (/* Einfügen */)
ƒ
setze k = Wurzel
ƒ
falls das von k repräsentierte Intervall das Intervall I
vollständig enthält, so markiere k mit I und stoppe
ƒ
andernfalls mache wie folgt weiter:
ƒ
falls der rechte Sohn einen Punkt von I enthält,
mache im rechten Teilbaum weiter
ƒ
falls der linke Sohn einen Punkt von I enthält,
mache im linken Teilbaum weiter
linear in der Tiefe des Skelettbaums
17
Annahme: I = [a,b] das einzufügende Intervall
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
Skelettbäume
Arbeit mit der Datenstruktur (/* Einfügen */)
1
2
3
4
B
5
B
6
7
8
maximal 2 Intervalle
in dieser Ebene können
zu rekursiven Aufrufen
führen
maximal 2 Intervalle
in dieser Ebene können
zu rekursiven Aufrufen
führen
1 2
Repräsentation von Intervallen
3 4
5 6
B
7
18
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
Skelettbäume
Arbeit mit der Datenstruktur (/* Löschen */)
ƒ
setze k = Wurzel
ƒ
falls k mit I markiert ist, streiche I und stoppe
ƒ
andernfalls mache wie folgt weiter:
ƒ
falls der rechte Sohn einen Punkt von I enthält,
mache im rechten Teilbaum weiter
ƒ
falls der linke Sohn einen Punkt von I enthält,
mache im linken Teilbaum weiter
linear in der Tiefe des Skelettbaums
19
Annahme: I = [a,b] das zu löschende Intervall
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
Skelettbäume
Arbeit mit der Datenstruktur (/* Berarbeiten einer Anfrage */)
sei x der interessierende Punkt
ƒ
suche das Elementarintervall [x,x] im Skelettbaum und
gib alle Intervalle aus, mit denen die besuchten Knoten
markiert sind
linear in der Tiefe des Skelettbaums
20
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
Skelettbäume
... Randproblem: Listen mit den Knotenmarkierungen verwalten
Idee 1
•
an jeden Knoten k wird eine doppelt verkettete Liste Lk
aller Intervalle gespeichert, mit denen dieser Knoten
markiert ist
Æ nur für die Ausgabe wichtig !!!
Konsequenz
•
zusätzlich O(n log(n)) Speicherplatz
21
Hinweis: je Knoten gibt es maximal O(log(n)) Intervalle, mit denen dieser Knoten markiert ist
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
Skelettbäume
... Randproblem: Listen mit den Knotenmarkierungen verwalten
Idee 2
•
•
sortierte Liste L aller im Skelettbaum aktuell verwalteten
Intervalle I (/* so, daß binäre Suche realisierbar ist */)
zu jedem Intervall I eine einfach verkette Liste L‘I von
Verweisen auf die entsprechende Einträge in den doppelt
verketteten Listen, die an den Knoten im Skelettbaum
hängen
Konsequenz
•
zusätzlich O(nlog(n)) Speicherplatz
22
Hinweis: je Intervall gibt es maximal O(log(n)) Knoten, die mit diesem Intervall markiert sind
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
Skelettbäume
(/* Lk */)
Anfrage:
in O(log(n‘)) + O(k‘)
Einfügen:
in O(log(n‘)) + O(log(n‘)) + O(log(n‘))
(/* Lk, L, L‘I */)
Löschen:
in O(log(n‘)) + O(log(n‘)) + O(log(n‘))
(/* L, L‘I, Lk */)
... zusätzlicher Speicherplatz: O(n‘log(n‘))
insgesamt: O(log(n‘) + k‘)
23
n‘ – Anzahl der Intervalle; k‘ – Anzahl der Antworten auf die Anfrage
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
Schnittproblem mit Skelettbäumen (/* Komplexitätsanalyse */)
Teilproblem 1: in O(nlog(n))
(/* Sortieren*/)
Teilproblem 2: in O(n) * O(log(n))
(/* Einfügen, Löschen */)
Teilproblem 3: in O(n) * O(log(n)) + O(k)
(/* Ableiten + Ausgeben */)
... zusätzlicher Speicherplatz: O(nlog(n))
insgesamt: O(nlog(n) + k)
24
n – Anzahl der Rechtecke; k – Anzahl der Paare sich schneidender Rechtecke
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
eine andere Datenstruktur zur Unterstützung von inversen Bereichsanfragen
... sogenannte Intervallbäume
Fokus
•
•
dieselbe Laufzeit
weniger zusätzlicher Speicherplatz ... Ziel: O(n)
25
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
eine andere Datenstruktur zur Unterstützung von inversen Bereichsanfragen
... sogenannte Intervallbäume
Vorverarbeitung (/* Skalierung */)
A
A = [2,9]
B = [4,8]
C = [5,6]
D = [7,10]
E = [1,3]
B
C
D
E
1 2
3 4
5 6
7 8
9 10
26
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
( A, B, D )
( D, A, B )
Intervallbäume
A = [2,9]
B = [4,8]
C = [5,6]
D = [7,10]
E = [1,3]
4
(E)
(E)
1
•
•
7
9
(C)
(C)
2
3
6
8
10
5
höhenbalancierter Suchbaum mit je einem Punkt als Schlüssel
je Knoten k zwei Listen Lu(k) und Lo(k) mit Intervallnamen
•
aufsteigend sortierte Liste Lu(k) bzgl. des Intervallanfangs
•
absteigend sortierte Liste Lo(k) bzgl. des Intervallendes
•
ein Intervall ist in den Listen Lu(k) und Lo(k), falls der jeweilige Punkt zum
27
Intervall gehört und das Intervall nicht zu den Listen des Vaters gehört
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
Intervallbäume
Arbeit mit der Datenstruktur (/* Einfügen */)
ƒ
setze k = Wurzel
ƒ
falls k im Intervall I vorkommt, so wird I in beiden
Listen Lu(k) und Lo(k) eingefügt
ƒ
andernfalls mache wie folgt weiter:
ƒ
falls k > a, so mache im linken Teilbaum weiter
ƒ
falls k < a, so mache im rechten Teilbaum weiter
linear in der Tiefe des Intervallbaums
28
I = [a,b] das einzufügende Intervall
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
Intervallbäume
Arbeit mit der Datenstruktur (/* Löschen */)
ƒ
setze k = Wurzel
ƒ
falls I in Lu(k) bzw. Lo(k) vorkommt, so wird I in beiden
Listen Lu(k) und Lo(k) gestrichen
ƒ
andernfalls mache wie folgt weiter:
ƒ
falls k > a, so mache im linken Teilbaum weiter
ƒ
falls k < a, so mache im rechten Teilbaum weiter
linear in der Tiefe des Intervallbaums
29
I = [a,b] das einzufügende Intervall
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
Intervallbäume
Arbeit mit der Datenstruktur (/* Anfrage beantworten */)
sei x der interessierende Punkt
ƒ
setze k = wurzel
ƒ
falls x = k, gib alle Intervalle in Lu(k) aus
ƒ
falls x < k, gib alle Intervalle in Lo(k ) aus, die x enthalten
ƒ
falls x einen rechten Sohn hat, so mache im rechten
Teilbaum weiter; andernfalls stoppe
ƒ
falls k > a, gib alle Intervalle in Lu(k ) aus, die x enthalten
ƒ
falls x einen linken Sohn hat, so mache im linken
Teilbaum weiter; andernfalls stoppe
... geht durch einfaches Durchlaufen der entsprechenden Liste, da entweder Anfangsstück
bis Intervallende < x (/* Lo */) bzw. Intervallanfang > x (/* Lu */) interessant
30
linear in der Tiefe des Intervallbaums
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
( A, B, D )
( D, A, B )
Intervallbäume
A = [2,9]
B = [4,8]
C = [5,6]
D = [7,10]
E = [1,3]
7
4
(E)
(E)
1
9
(C)
(C)
2
3
6
8
10
5
x = 3 Æ A, E
x = 6 Æ A, B, C
x = 9 Æ D, B
31
Datenstrukturen
Kap. 8: Geometrische Algorithmen
Geometrische Datenstrukturen
Intervallbäume
Anfrage:
in O(log(n‘)) + O(k‘)
Einfügen:
in O(log(n‘))
Löschen:
in O(log(n‘))
... zusätzlicher Speicherplatz: O(n‘)
insgesamt: O(log(n‘) + k‘)
32
n‘ – Anzahl der Intervalle; k‘ – Anzahl der Antworten auf die Anfrage
Herunterladen