Datenstrukturen und Algorithmen SS07

Werbung
Datenstrukturen und
Algorithmen SS07
Datum: 25.4.2007
Michael Belfrage
[email protected]
belfrage.net/eth
Programm von Heute
• Nachbesprechung Serie 4
• Challenge der Woche
• Traversierung von Bäumen
– Pre-, In-, Postorder
– Breadth-, Depth-First
• AVL-Bäume
• Aufgabe 5.4
Aufgabe 4.3
• Double Hashing:
– h(k) = k mod 11
– h‘(k) = 1 + k mod 9
– falls nun k = 11, dann gilt:
• h(11) = 11 mod 11 = 0
• h‘(11) = 1 + 11 mod 9 = 3
– Und folglich:
• h(k) – h‘(k) = 0 – 3 = -3 =11 8 als erste Sondierung.
The Challenge
• Gegeben ist:
– ein Array A bestehend aus n Zahlen
• Bestimme das zusammenhängende
Teilarray mit der grössten Summe.
• Und gebe diese Summe aus.
• Natürlich möglichst effizient :)
• Beispiel:
– Input:
• A := [29,-43,57,24,-55,56,95,-95,-25,86]
– Output:
• 177 = (57+24+(-55)+56+95)
Traversierung von Bäumen
- Preorder
1.
2.
3.
Wurzel
Linker Teilbaum
Rechter Teilbaum
- Inorder
1.
2.
3.
Linker Teilbaum
Wurzel
Rechter Teilbaum
- Postorder
1.
2.
3.
Linker Teilbaum
Rechter Teilbaum
Wurzel
Traversierung von Bäumen
• Preorder Beispiel:
Lösung:
17,8,2,14,9,16,26,19,22,34
17
8
26
2
14
9
19
16
34
22
Traversierung von Bäumen
• Inorder Beispiel:
Lösung:
2,8,9,14,16,17,19,22,26,34
17
8
26
2
14
9
19
16
34
22
Traversierung von Bäumen
• Postorder Beispiel:
Lösung:
2,9,16,14,8,22,19,34,26,17
17
8
26
2
14
9
19
16
34
22
Traversierung von Bäumen
• Breadth-First
– Zuerst in die Breite
– Siehe auch Breitensuche
• Depth-First
– Zuerst in die Tiefe
– Siehe auch Tiefensuche
Traversierung von Bäumen
• Breadth-First Beispiel:
Lösung:
17,8,26,2,14,19,34,9,16,22
17
8
26
2
14
9
19
16
34
22
Traversierung von Bäumen
• Depth-First Beispiel:
Lösung:
17,8,2,14,9,16,26,19,22,34
17
8
26
2
14
9
19
16
34
22
AV L – Baum
• Entwickelt um 1962 von
G.M. Adelson-Velsky (Г.М.
Адельсо
н-Ве
льский) und
E.M. Landis (Е.М. Ландис)
• Balancierter binärer Suchbaum
• Einfügen, Löschen und Suchen eines
Knoten in O(log n)
AV L – Baum
• Balancierter Binärbaum:
– Sei Tb = Teilbaum
– Für jeden Knoten muss gelten:
• Höhe(rechter Tb) – Höhe(linker Tb) ∈ {−1, 0, +1}
-1
h
0
h-1
h
+1
h
h-1
h
AV L – Baum
• Balancierter Binärbaum:
3-3=0
17
2 – 1 = +1
1 – 2 = -1
8
0
1 – 0 = +1
1–1=0
2
14
9
0–0=0
19
0
0
34
0
16
26
22
AV L – Baum
• KEIN balancierter Binärbaum:
3-3=0
17
2 – 1 = +1
0 – 2 = -2
8
0
1 – 0 = +1
1–1=0
2
14
19
0
0
9
0
16
22
26
AV L – Baum (Suchen)
• Die Suche ist analog wie beim normalen
binären Suchbaum:
Suche nach x im AV L-Baum T :
– Abbruchbedingung:
• Falls T keine Wurzel hat (d.h. T ist ein Blatt),
dann ist x nicht in T drin
– Sonst: [Wurzel von T] = x ?
• Falls ja, sind wir fertig (x wurde gefunden)
• Falls nein, dann
– Wenn [Wurzel von T] < x ,
dann suche rekursiv im linken Teilbaum weiter
– Sonst ist [Wurzel von T] > x ,
suche rekursiv im rechten Teilbaum weiter
AV L – Baum (Suchen)
• Beispiel: Suche nach x=22
17
8
26
2
14
9
19
16
34
22
AV L – Baum (Suchen)
• Beispiel: Suche nach x=4
17
8
26
2
14
9
19
16
34
22
AV L – Baum (Einfügen)
• Das Einfügen ist beim AV L – Baum
komplexer als beim binären Suchbaum
• Zur Erinnerung:
– Einfügen beim binären Suchbaum:
• Suche nach dem einzufügenden Knoten
• Falls nicht gefunden, dann füge dort (bei
dem Blatt) ein wo Suche endete
AV L – Baum (Einfügen)
• Einfügen von x=43
18
8
26
2
14
9
19
16
34
22
AV L – Baum (Einfügen)
• Einfügen von x=43
18
8
26
2
14
9
19
16
34
22
43
AV L – Baum (Einfügen)
• Einfügen von x=17
18
8
26
2
14
9
19
16
34
22
43
AV L – Baum (Einfügen)
• Einfügen von x=17
18
8
26
2
14
9
19
16
34
22
17
43
AV L – Baum (Einfügen)
• Baum ist unbalanciert !
18
8
26
2
14
9
19
16
34
22
17
43
AV L – Baum (Einfügen)
• Unternimmt man nichts, sieht er
möglicherweise bald so aus:
18
8
26
2
14
9
19
16
34
22
17
43
47
58
61
AV L – Baum (Einfügen)
• Was tun also, damit er wieder
balanciert ist?
• Ansatz vom AV L – Baum :
– Solange von unten nach oben rotieren,
bis wieder balanciert:
• Mittels Einfach- und Doppelrotation.
AV L – Baum (Einfügen)
• Einfache Rotation:
18
8
26
2
14
9
19
16
34
22
17
43
AV L – Baum (Einfügen)
• Einfache Rotation:
18
14
8
2
26
16
9
19
17
34
22
43
AV L – Baum (Einfügen)
• Doppel-Rotation:
18
8
26
2
1
14
6
11
9
19
16
34
AV L – Baum (Einfügen)
• Doppel-Rotation:
14
8
18
2
1
11
6
9
16
26
19
34
AV L – Baum (Löschen)
• Suchen des Knotens
• Falls gefunden, dann löschen und
mit dem symmetrischen Vor- oder
Nachfolger ersetzen.
• Von der Position aus wo dieser war
wieder rebalancieren mittels Einfach- und Doppelrotationen.
AV L – Baum (Löschen)
• Beispiel: x=14 löschen
14
8
18
2
1
11
6
9
16
26
19
34
AV L – Baum (Löschen)
• Mit symm. Nachfolger ersetzen
16
8
18
2
1
11
6
9
26
19
34
AV L – Baum (Löschen)
• Einfache Rotation durchführen
16
8
26
2
1
11
6
9
18
34
19
AV L – Baum
• Übung: Einfügen von Schlüssel 6.
8
3
10
2
1
5
4
9
7
11
AV L – Baum
• Lösung:
5
3
2
1
8
4
7
6
10
9
11
AV L – Baum
• Übung: Löschen von Schlüssel 9.
11
7
14
3
1
9
8
4
6
12
17
15
AV L – Baum
• Lösung:
11
4
14
3
1
7
6
12
8
17
15
Aufgabe 5.4 (Yahoogle)
• Verzeichnis, welches für jeden Mitarbeiter
den ausbezahlten Bonus sowie das Alter
speichert
• Folgende Operationen möglichst effizient
im worst-case implementieren:
– Einfügen eines Mitarbeiters mit Alter a und
Bonus b
– Löschen eines Mitarbeiters mit Alter a
– Löschen eines Mitarbeiters mit Bonus b
– Suchen nach einem Mitarbeiter mit Alter a
– Suchen nach einem Mitarbeiter mit Bonus b
• Nehme an jedes Alter und jeder Bonus
identifiziert einen Mitarbeiter eindeutig.
Ende der Stunde.
Questions?
Herunterladen