Kein Folientitel - Institut für Geodäsie und Geoinformation der

Werbung
Institut für Kartographie und Geoinformation
Prof. Dr. Lutz Plümer
Geoinformation II
6. Sem.
Vorlesung 2
20. April 2000
AVL-Bäume
Einfacher Segmentschnitt I
P2
g
P2
P1
P3
P3
P4
P4
g`
P3
S1 = det ( P1,P3,P4)
S2 = det ( P3,P1,P2)
S3 = det ( P2,P3,P4)
S4 = det ( P4,P1,P2)
P1
P2
P4
P1
Def.: Vor.: Alle Determinanten sind  0:
g und g` schneiden sich genau dann, wenn S1, S2
sowie S3, S4 jeweils verschiedene Vorzeichen
haben.
Verwaltung der aktiven Elemente
F
B
S2
S3
C
D
A
S4
S1
E
B
C
E
D
letzte Stunde
• Scan-Line
• Hauptideen
–
–
–
–
Projektion auf x-Achse
Beschränkung auf aktive Elemente
Ordnung der aktiven Elemente durch Scan-Line
Beschränkung auf Nachbarn
• zum Schluß: 2-Segment-Schnitt
(müßte Ihnen bekannt sein)
• heute:
– Datenstrukturen für Scan-Line
– Polygon-Overlay
zur Erinnerung: Algorithmus Scan-Line
Input:
S: eine Menge von Segmenten
Output:
die Schnittpunkte der Elemente von S
Sei
T = Endpunkte der Segmente von S
nach x-Koordinaten sortiert
(Haltepunkte)
L =  // aktive Segmente von S
while T   do
bestimme und entferne
den nächsten Punkt pT
x ist x-Koordinate von p
case: p ist linker Endpunkt von s
fuege_ein(s,x,L)
sl = vorgaenger(s,x,L)
sr = nachfolger(s,x,L)
schnitt(sl,s,T);
schnitt(s,sr,T);
p ist rechter Endpunkt von s
sl = vorgaenger(s,x,L)
sr = nachfolger(s,x,L)
entferne(s,x,L)
schnitt(sl,sr,T)
p ist Schnittpunkt von s und t
vertausche(s,t,L,x) // t < s
sl = vorgaenger(t,x,L)
sr = nachfolger(s,x,L)
schnitt(sl,t,T)
schnitt(s,sr,T)
Datenstrukturen für T und S
• Datenstrukur für T
– AVL-Baum
– siehe diskrete Mathematik
• zur Erinnerung: was ist ein AVL-Baum
– erstens ein Suchbaum
– und zwar ein ausgeglichener Suchbaum
• Datenstruktur für L
– AVL-Baum?
– Vorgänger und Nachfolger
– Variante des AVL-Baums
• alle Informationen sind in Blättern (nicht in inneren Knoten)
• die Blätter bilden eine doppelt verkettete Liste
Binärer Suchbaum
• Ein binärer Baum B ist ein binärer Suchbaum, falls er
leer ist oder die folgenden Eigenschaften erfüllt sind:
– die beiden Unterbäume sind binäre Suchbäume
– die Beschriftungen der Knoten des linken Suchbaums sind
kleiner als die Beschriftung der Wurzel
– die Beschriftungen des rechten Suchbaums sind größer als
die Beschriftung der Wurzel
n
<n
>n
Institut für Kartographie und Geoinformation
Prof. Dr. Lutz Plümer
Exkurs: AVL-Bäume
siehe Vorlesung Nr. 9
Diskrete Mathe I
AVL-Baum (Definition)
Ein binärer Baum heißt ausgeglichener Baum oder
AVL-Baum (nach Adelson-Velskij und Landis), falls
sich für jeden Knoten k die Höhen h der beiden
Teilbäume um höchstens 1 unterscheiden.
AVL-Baum: Beispiel
Balancefaktor
Balancefaktor bal(k)
bal(k) = h(rechter Teilbaum von k) h(linker Teilbaum von k)
Für AVL-Bäume gilt:
bal(k)  {1,0,1}
AVL-Baum: Beispiel
+1
-1
0
+1
0
+1
0
AVL-Baum: Beispiel
+1
-1
0
+1
0
+1
0
AVL-Baum: Beispiel
+2
0
+1
0
+1
0
Einfügen von Knoten
+1
Einfügen von k = 30
14
0
+1
8
3
0
20
11
0
17
0
33
0
0
26
0
39
Einfügen von Knoten
+1
Einfügen von k = 30
14
0
+1
8
3
0
20
11
0
17
0
33
0
0
26
0
39
Einfügen von Knoten
+1
Einfügen von k = 30
14
0
+1
8
3
0
20
11
0
17
0
33
0
0
26
0
39
Einfügen von Knoten
+1
Einfügen von k = 30
14
0
+1
8
3
0
20
11
0
17
0
33
0
0
26
0
39
Einfügen von Knoten
+1
Einfügen von k = 30
14
0
+1
8
3
0
20
11
0
17
0
33
0
0
26
0
39
Einfügen von Knoten
+1
Einfügen von k = 30
14
0
+1
8
3
0
20
11
0
17
0
33
0
0
26
0
39
0
30
Einfügen von Knoten
+1
Einfügen von k = 30
14
0
+1
8
3
0
20
11
0
17
0
33
0
+1
26
0
39
0
30
Einfügen von Knoten
+1
Einfügen von k = 30
14
0
+1
8
3
0
20
11
0
17
0
33
-1
+1
26
0
39
0
30
Einfügen von Knoten
+1
Einfügen von k = 30
14
0
+2
8
3
0
20
11
0
17
0
33
-1
+1
Ausgeglichenheit
ist verletzt
26
0
39
0
30
Einfügen von Knoten
+1
Einfügen von k = 30
14
0
+2
8
3
0
20
11
0
17
0
33
-1
+1
26
0
39
Ausbalancieren
durch Rotation
0
30
Einfügen von Knoten
+1
Einfügen von k = 30
14
0
+2
8
3
0
20
11
0
17
0
33
-1
+1
26
0
39
R- Rotation
0
30
Einfügen von Knoten
+1
Einfügen von k = 30
14
0
+2
8
3
0
20
11
0
17
0
33
-1
+1
26
0
39
0
30
Einfügen von Knoten
+1
Einfügen von k = 30
14
0
+2
8
3
0
20
11
0
17
0
33
-1
+1
26
0
39
0
30
Einfügen von Knoten
+1
Einfügen von k = 30
14
0
+2
8
3
0
20
11
0
17
0
26
33
L- Rotation
30
39
Einfügen von Knoten
+1
Einfügen von k = 30
14
0
+2
8
3
0
20
11
0
17
0
26
33
30
39
Einfügen von Knoten
+1
Einfügen von k = 30
14
0
+2
8
3
0
20
11
0
17
0
26
33
30
39
Einfügen von Knoten
+1
Einfügen von k = 30
14
0
0
8
3
0
26
11
0
20
0
33
0
17
0
0
30
0
39
Einfügen von Knoten
+1
Einfügen von k = 30
14
0
0
8
3
0
26
11
0
20
0
33
0
17
0
0
30
0
39
Einfügen von Knoten
+1
14
0
0
8
3
0
26
11
0
20
0
33
0
17
0
0
30
0
39
Löschen von Knoten
+1
Löschen von k = 8
14
0
+1
8
3
0
20
11
0
17
0
33
0
0
26
0
39
Löschen von Knoten
+1
Löschen von k = 8
14
0
+1
8
3
0
20
11
0
17
0
33
0
0
26
0
39
Löschen von Knoten
+1
Löschen von k = 8
14
0
+1
8
3
0
20
11
0
17
0
33
0
0
26
0
39
Löschen von Knoten
+1
Löschen von k = 8
14
-1
+1
11
3
0
20
17
0
33
0
0
26
0
39
Löschen von Knoten
+1
Löschen von k = 8
14
-1
+1
11
3
0
20
17
0
33
0
0
26
0
39
Löschen von Knoten
+1
Löschen von k = 8
14
-1
+1
11
3
0
20
17
0
33
0
0
26
0
39
Löschen von Knoten
+1
Löschen von k = 11
14
-1
+1
11
3
0
20
17
0
33
0
0
26
0
39
Löschen von Knoten
+1
Löschen von k = 11
14
-1
+1
11
3
0
20
17
0
33
0
0
26
0
39
Löschen von Knoten
+1
Löschen von k = 11
14
-1
+1
11
3
0
20
17
0
33
0
0
26
0
39
Löschen von Knoten
+1
Löschen von k = 11
14
0
+1
3
20
17
0
33
0
0
26
0
39
Löschen von Knoten
+2
Löschen von k = 11
14
0
+1
3
20
17
0
33
0
0
L- Rotation
26
0
39
Löschen von Knoten
+2
Löschen von k = 11
14
0
+1
3
20
17
0
33
0
0
26
0
39
Löschen von Knoten
+2
Löschen von k = 11
14
0
+1
3
20
17
0
33
0
0
26
0
39
Löschen von Knoten
0
20
0
0
14
3
0
33
17
0
26
0
39
0
Löschen von Knoten
0
20
0
0
14
3
0
33
17
0
26
0
39
0
L-Rotation
Knoten x wird eingefügt und verletzt dadurch die
Ausgeglichenheit an einem höher gelegenen Knoten k1
Notwendige Korrektur durch L-Rotation (symmetrisch:
R-Rotation): Umhängen von zwei Kanten
L-Rotation
+1
k1
0
k2
T1
T2
T3
L-Rotation
+2
k1
+1
k2
T1
T2
T3
x
L-Rotation
+2
k1
+1
k2
T1
T2
T3
x
L-Rotation
+2
k1
+1
k2
T1
T2
T3
x
L-Rotation
0
k2
k1
0
T3
T1
T2
x
LR-Rotation
x wird eingefügt und verletzt dadurch die Ausgeglichenheit an einem höher gelegenen Knoten k1.
Notwendige Korrektur durch LR- Rotation
(symmetrisch: RL-, RR- und LL- Rotation):
Umhängen von vier Kanten
LR-Rotation
-1
k1
0
k2
0
k3
T1
T4
T2
T3
LR-Rotation
-2
k1
+1
k2
+1
k3
T1
T4
T2
T3
x
LR-Rotation
-2
k1
+1
k2
+1
k3
T1
T4
T2
T3
x
LR-Rotation
-2
k1
+1
k2
+1
k3
T1
T4
T2
T3
x
LR-Rotation
-2
k1
+1
k2
+1
k3
T1
T4
T2
T3
x
LR-Rotation
-2
k1
-1
-1
k3
k2
T4
T3
T1
T2
x
LR-Rotation
-2
k1
-1
-1
k3
k2
T4
T3
T1
T2
x
LR-Rotation
-2
k1
-1
-1
k3
k2
T4
T3
T1
T2
x
LR-Rotation
0
k3
0
-1
k1
k2
T2
T1
T3
x
T4
Institut für Kartographie und Geoinformation
Prof. Dr. Lutz Plümer
Exkurs: AVL-Bäume in Kürze
siehe Vorlesung Nr. 10
Diskrete Mathe I
Übersicht
• Vollständige Bäume
• Minimale Knotenanzahl von AVL-Bäumen
– Fibonacci-Zahlen
•
•
•
•
•
•
•
•
Maximale Höhe von AVL-Bäumen
Das Wichtigste zu AVL in Kürze
4 Fälle im Überblick
„Überleitung“
Güte von Algorithmen
Groß-Oh-Notation
Inklusion
Komplexität - Beispiele
Vollständige Bäume
Ein binärer Baum heißt vollständig, wenn alle Blätter die
gleiche Höhe haben.
Ein vollständiger binärer Baum gegebener Höhe enthält
die maximale Anzahl von Knoten.
Wie groß ist die maximale Anzahl der Knoten eines
vollständigen Baumes gegebener Höhe?
Vollständige Bäume
Baum
Höhe
Anzahl
innere Knoten
Blätter
1
0
1
2
1
2
3
3
4
...
...
...
h
2h-1-1
2h-1
S = 2h-1
Vollständige Bäume
Satz: Ein vollständiger binärer Baum der Höhe h enthält
2h-1 Blätter und 2h-1 Knoten.
Beweis:
1) Induktionsanfang: h= 1
Der Baum besteht nur aus der Wurzel, die auch das
einzige Blatt ist:
21-1 = 20 = 1
Blatt
21-1 = 2 - 1 = 1 Knoten
2) Induktionsschritt: h  h + 1
Höhe h
2h-1 Blätter
2h-1 Knoten
Höhe h + 1
2h Blätter
2h-1 innere Knoten
S: 2h + 2h - 1 = 2h+1-1
Minimale Knotenanzahl von AVL-Bäumen
N(h) sei die minimale Anzahl von Knoten eines AVLBaumes der Höhe h.
h=1
N(1) = 1
h=2
N(2) = 2
h=3
N(3) = 4
Minimale Knotenanzahl von AVL-Bäumen
Allgemeiner Fall:
1
N(h-2)
N(h-1)
worst case der Höhe h: N(h) = N(h-1) + N(h-2) + 1
Fibonacci-Zahlen
fib(0) = 0
fib(1) = 1
fib(2) = 1
...
fib(n) = fib(n-1) + fib(n-2)
Abschätzung von fib: Sei

1  5

 1,618
2
fib(n) 



5
1
1  5

 0,618
2
n
n  

Minimale Knotenanzahl von AVL-Bäumen
Satz: N(h) = fib(h+2) - 1
Beweis:
1) Induktionsanfang: h = 1
fib(1+2) - 1 = fib(3) - 1 = 2 - 1 = 1
2) Induktionsschritt: h  h + 1
N(h+1) = 1 + N(h) + N(h-1)
1
= 1+ fib(h+2) - 1 + fib(h+1) - 1
= fib(h+3) - 1
= fib([h+1]+2) - 1
N(h-1)
N(h)
Maximale Höhe von AVL-Bäumen
Daraus folgt nach Umformung der Abschätzung:
Ein AVL-Baum mit n Knoten hat höchstens die Höhe
1,44... log(n) + const

Das Wichtigste zu AVL in Kürze
1. Die { L, R, RL, LR } - Rotationen finden Anwendung,
wenn bei der Rückkehr von den eingefügten/gelöschten
Knoten zur Wurzel des Baumes ein Balance-Faktor
{-2, +2 } gefunden wird.
2. Die Wiederherstellung der AVL-Eigenschaft involviert
höchstens 3 Knoten + Verweise auf die Nachfolger.
Prinzip der Lokalität
(Das Problem kann auch nur auf dem Weg von einem
Blatt zur Wurzel des Baumes auftreten.)
3. Es finden nur vertikale Verschiebungen der involvierten
Knoten statt.

Das Wichtigste zu AVL in Kürze
Die Form eines Baumes hängt von der Eingabefolge ab:
Eingabe von {1, 2, 3}
2
Eingabefolge: 2, 1, 3
1
3
2
Eingabefolge: 2, 3, 1
1
3
Das Wichtigste zu AVL in Kürze
Eingabefolge: 1, 2, 3
2
1
1
2
L-Rotation
2
0
3
1
3
Das Wichtigste zu AVL in Kürze
Eingabefolge: 3, 2, 1
-2
3
R-Rotation
2
2
1
1
3
Das Wichtigste zu AVL in Kürze
Eingabefolge: 3, 1, 2
2
2
R
3
3
2
L
1
2
1
2
1
L-R-Rotation
3
Das Wichtigste zu AVL in Kürze
Eingabefolge: 1, 3, 2
2
2
1
1
L
2
2
3
R
1
3
2
R-L-Rotation
3
4 Fälle im Überblick
Woher rührt die Verletzung der Balance am Knoten
R
LR
RL
L
?
Institut für Kartographie und Geoinformation
Prof. Dr. Lutz Plümer
Zurück zur GIS Vorlesung
Eine Variante des AVL-Baums
• mit einer doppelt verketteten Liste der Blätter
• für die Menge der aktiven Elemente
für die Haltepunkte ...
• ...mit den Operationen
– Einfügen eines gefundenen Schnittpunktes
– Finden und Entfernen des nächsten (also minimalen)
Elements ...
•
•
•
•
... genügt ein „normaler“ AVL-Baum
obwohl man mit Kanonen auf Spatzen schießt
besser: ein Heap
bei Interesse: Vorlesung 2 (heute),
Diskrete Mathematik
Herunterladen