Übung: Algorithmen und Datenstrukturen SS 2007

Werbung
Übung: Algorithmen und Datenstrukturen
SS 2007
Prof. Lengauer
Sven Apel, Michael Claÿen, Christoph Zengler, Christof König
Blatt 8
Votierung in der Woche vom 25.06.0729.06.07 Aufgabe 22
AVL-Bäume
(a) Geben Sie die im unten angegebenen AVL-Baum enthaltenen Fehler an.
13
8
15
4
10
1
5
20
7
21
Lösung: Es sind zwei Fehler vorhanden. Zum einen handelt es sich nicht
einmal um einen Suchbaum und zum anderen ist an einem Knoten die
Balance verletzt.
13
8
15
4
1
10
5
7
Balance verletzt
20
21
kein Suchbaum
(b) Führen Sie auf dem rechts angegebenen AVL-Baum diese Folge an Operationen durch: add(24), add(23), add(38). Geben Sie den AVL-Baum vor
und nach jeder Rotation an.
1
30
20
10
50
25
35
33
55
37
Lösung: Der Knoten 24 kann problemlos hinzugefügt werden, die Balance bleibt an allen Knoten erhalten.
30
20
10
50
25
35
24
33
55
37
Der Knoten 23 sorgt dafür, dass bei 24 und 25 jeweils eine negative Balance auftreten, also der linken Teilbaum ist jeweils tiefer als der rechte
Teilbaum. Um dies zu korrigieren wird eine Rechtsrotation an 25 durchgeführt. Man erhält:
30
20
10
50
24
23
35
25
33
55
37
Der letzte Knoten 38 führt dazu, dass beim Knoten 50 die Balance verletzt ist. Knoten 50 hat einen tieferen linken Sohn und Knoten 35 einen
tieferen rechten Sohn. Damit ist zunächst eine Linksrotation an 35 und
anschlieÿend eine Rechtsrotation an 50 notwending, um die Balance wieder herzustellen.
30
20
10
37
24
23
35
25
33
50
38
55
2
Aufgabe 23
2-3-Bäume
(a) Fügen Sie manuell in einen leeren 2-3-Baum die folgenden Zahlen ein:
8, 9, 10, 2, 1, 5, 3, 6, 4
Geben Sie den entstehenden Baum nach jeder Operation an. Geben Sie die
nötigen Zwischenschritte an, falls ein Knoten aufgespalten werden muss.
Lösung: Zunächst einmal ganz allgemein:
Daten stehen nur an den Blättern.
Alle Blätter sind gleich tief.
Innere Knoten haben einen Schlüssel und zwei Zeiger oder zwei Schlüssel und drei Zeiger.
Suchen in einem 2-3-Baum: Bei einem Schlüssel wie im binären Suchbaum
(Falls Suchwert = Schlüssel nach rechts gehen). Bei 2 Schlüsseln: 1. Zeiger:
Werte < 1. Schlüssel, 2. Zeiger: Werte = 1. Schlüssel, kleiner 2. Schlüssel
und 3. Zeiger: Werte = 2. Schlüssel.
Einfügen: Suche den passenden inneren Knoten, an dem Blätter hängen.
Füge dort den passenden neuen Schlüssel ein und hänge ein neues Blatt
dazu. Falls der Knoten jetzt 3 Schlüssel hat, spalte den Knoten in drei
Teile: der mittlere Schlüssel wandert im Baum nach oben (und erzeugt
dort evtl. wieder ein Spalten), die beiden anderen Schlüssel werden neue
innere Knoten (mit jeweils einem Schlüssel). Jeder dieser Knoten hat dann
2 Zeiger.
Innere Knoten werden als Kasten gezeichnet, Blätter dagegen ohne Rahmen. Problemfall: nur ein Knoten vorhanden. Dann kann es keinen inneren
Knoten geben, da ein solcher mindestens zwei Blätter hätte, aber nur ein
Datum vorhanden ist.
8
-- -- -| 8| 9|10|
-- -- -| | | |
2 8 9 10
-| 9|
-| |
8 9
-- -| 9|10|
-- -| | |
8 9 10
-| 9|
->
-/
\
--| 8|
|10|
--| |
| |
3
2
8
9
10
-| 9|
-/
\
-- --| 2| 8|
|10|
-- --| | |
| |
1 2 8
9 10
-| 9|
-/
\
-- -- --| 2| 5| 8|
|10|
-- -- --| | | |
| |
1 2 5 8
9 10
->
-- -| 5| 9|
-- -/
| \
-- ---| 2| 3| | 8| |10|
-- ---| | | | | | |
1 2 3 5 8 9 10
/
-- -- -| 2| 3| 4|
-- -- -| | | |
1 2 3 4
-- -| 5| 9|
-- -|
-- -| 6| 8|
-- -| | |
5 6 8
-- -| 5| 9|
-- -/ |
\
---| 2| | 8| |10|
---| | | | | |
1 2 5 8 9 10
-- -| 5| 9|
-- -/ |
\
/
|
\
-- --- -- -| 2| 3| | 6| 8| |10|
-- -- -- --| | | | | | | |
1 2 3 5 6 8 9 10
\
-|10|
-| |
9 10
-| 5|
4
->
-- -- -| 3| 5| 9|
-- -- -/
| |
\
-- --- -| 2| | 4| | 6| 8|
-- --- -| | | | | | |
1 2 3 4 5 6 8
-|10|
-| |
9 10
->
-/
\
--| 3|
| 9|
--/
|
|
\
--- -- --| 2| | 4| | 6| 8| |10|
--- -- --| | | | | | | | |
1 2 3 4 5 6 8 9 10
(b) Führen Sie folgende Operationen auf dem Baum aus, welcher in Teilaufgabe (a) erzeugt wurde.
1. Löschen Sie die 6.
Lösung: Löschen: Suche das Blatt. Lösche es und den Schlüssel
darüber. Hat dieser Knoten nun nur noch einen Sohn, prüfe, ob ein
Bruder einen Sohn abgeben kann (falls dieser 3 hat). Ansonsten verschmelze Knoten mit einem Bruder und dem Schlüssel des Vaters zwischen den Brüdern. Dadurch verliert der Vater wieder einen Schlüssel
(evtl. bis zur Wurzel => der Baum wird niedriger). Passe Schlüssel
bis zur Wurzel an.
Lösche die 6, der Vater hat immer noch zwei Söhne.
-| 5|
-/
\
--| 3|
| 9|
--/
|
|
---| 2| | 4| | 8|
---| | | | | |
1 2 3 4 5 8
\
-|10|
-| |
9 10
2. Löschen Sie die 5.
Lösung: Lösche die 5 und den Schlüssel 6 darüber, der Knoten hat
5
noch 2 Söhne. Ändere den Schlüssel 5 an der Wurzel auf 6 (dies ist
evtl. nicht notwendig, hängt von der konkreten Invariante ab.
-| 5|
-/
\
--| 3|
| 9|
--/
|
|
---| 2| | 4| | 8|
---| | | | | |
1 2 3 4 6 8
\
-|10|
-| |
9 10
3. Löschen Sie die 9.
Lösung: Lösche 9. Vater hat nur noch den Sohn 10. Linker Bruder hat drei Söhne (5,6,8). Die 8 wandert zum betrachteten Knoten.
Von der neuen Position der 8 nach oben müssen Schlüssel angepasst
werden (je nach Invariante, siehe oben.
-| 5|
-/
\
--| 3|
| 8|
--/
|
|
\
--- --| 2| | 4| | 6|
|10|
--- --| | | | | |
| |
1 2 3 4 5 6
8 10
4. Löschen Sie die 1.
Lösung:
--
6
| 5|
-/
\
--| 3|
| 9|
--/
|
|
\
--- -- --| 2| | 4| | 6| 8| |10|
--- -- --| | | | | | | |
2 3 4 5 6 8 9 10
Bruder kann keinen Sohn abgeben => verschmelze mit Bruder und
Schlüssel des gemeinsamem Vaters zwischen den Werten:
-| 5|
-/
\
--| ?|
| 9|
--/
|
\
-- --- --| 3| 4| | 6| 8| |10|
-- --- --| | |
| | | | |
2 3 4
5 6 8 9 10
Vater hat nun einen Knoten zuwenig, wieder verschmelzen:
-- -| 5| 9|
-- -/
|
-- -- -- -| 3| 4| | 6| 8|
-- -- -- -| | | | | |
2 3 4 5 6 8
\
-|10|
-| |
9 10
Geben Sie das Ergebnis jeder Löschoperation an.
7
Aufgabe 24
Minimaler Grad von B-Bäumen
(a) Weshalb lassen wir für den minimalen Grad eines B-Baums t = 1 nicht
zu?
(b) Für welche Werte des minimalen Grades t ist der folgende Baum ein zulässiger B-Baum?
(c) Zeichnen Sie alle zulässigen B-Bäume mit minimalen Grad 2, die die Menge
{1, 2, 3, 4, 5} darstellen!
Lösung:
(a) Laut Denition müsste in Falle t = 1 jeder Knoten auÿer der Wurzel mindestens keine und höchstens einen Schlüssel enthalten. Damit hätten wir erstens die
Möglichkeit leerer Knoten gegeben, was a) keinen Sinn macht und b) zu Problemen führt. Zweitens hätten wir im besten Fall einen Binärbaum deniert, den
wir auch einfacher hätten denieren können.
(b) Zulässige Werte von t sind 2 und 3. Im Fall t = 2 gilt, dass jeder Knoten
auÿer der Wurzel mindestens t − 1 = 1 Schlüssel enthalten muss und höchstens
2 t − 1 = 3 Schlüssel enthalten darf. Dies ist im Baum oensichtlich erfüllt.
Ebenso gilt dies für t = 3 mit mindestens 2 und höchstens 5 Schlüsseln pro
Knoten. Ab t = 4 ist die Bedingung von mindestens t + 1 Schlüsseln nicht mehr
von allen Knoten erfüllt.
(c)
8
Aufgabe 25
Maximale Anzahl von Schlüsseln im
B-Baum
Wie groÿ ist die maximale Anzahl von Schlüsseln, die in einem B-Baum der
Höhe h gespeichert werden kann. Geben Sie die Anzahl als Funktion des minimalen Grades t an. (Hier ist ein Beweis mittels Induktion gefordert.)
Lösung:
Behauptung: Maximale Anzahl der Schlüssel in einem B-Baum der Höhe h
und mit minimalen Grad t ist
maxKeyt (h) =
h
X
(2t − 1) · (2t)i
i=0
Beweis mit Induktion nach der Höhe des Baumes:
Induktionsanfang h = 0:
Ein Baum mit h = 0 besteht nur aus der Wurzel und hat damit maximal
2t − 1 Schlüssel nach Denition. Dies ergibt auch die Formel maxKeyt (0) =
(2t − 1) · 1 = 2t − 1
Induktionsschritt h → h + 1
P
mit der Induktionsannahme maxKeyt (h) = hi=0 (2t − 1) · (2t)i .
Ein Baum der Höhe h hat maximal (2t)h Blätter (Behauptung ohne Beweis).
Für einen Baum mit Höhe h + 1 gilt also dann, dass er die Anzahl der Schlüssel
des Baums mit Höhe h hat + maximal (2t)h+1 · (2t − 1) neue Schlüssel (jedes
neue Blatt hat maximale Anzahl Schlüssel). Also:
maxKeyt (h + 1) = maxKeyt (h) + (2t)h+1 · (2t − 1)
!
h
X
i
=
(2t − 1) · (2t) + (2t)h+1 · (2t − 1)
i=0
=
h+1
X
(2t − 1) · (2t)i
i=0
Dies war zu zeigen.
9
Herunterladen