¨Ubungsblatt 3

Werbung
Technische Universität Wien
Institut für Computergraphik und Algorithmen
Arbeitsbereich für Algorithmen und Datenstrukturen
186.813 Algorithmen und Datenstrukturen 1 VU 6.0
Übungsblatt 3
für die Übung am Montag den 28. bzw. Dienstag den 29. April 2014.
Kreuzen Sie bis spätestens Sonntag, 27.04.2014, 23:59 Uhr über TUWEL an, welche
Beispiele Sie bearbeitet und gelöst haben. Gehen Sie dabei folgendermaßen vor:
• TUWEL (https://tuwel.tuwien.ac.at)
Kurs 186.813 Algorithmen und Datenstrukturen 1 (VU 6.0)
• Thema 3. Übungsblatt
Link 3. UE - Details & Bewertung
• Button Meine Lösung bearbeiten
Bearbeitete Beispiele anhaken und Änderungen speichern.
Bitte beachten Sie:
• Sie können vor der Deadline beliebig oft ihre Auswahl an Beispielen verändern,
aber nach der Deadline gibt es keine Veränderung ihrer angekreuzten Beispiele!
• Wenn Sie zur Präsentation Ihrer Lösung eines von Ihnen angekreuzten Beispiels
ausgewählt werden und dieses aber nicht bearbeitet haben, verlieren Sie alle Punkte
dieser Übungseinheit!
Aufgabe 21 Fügen Sie folgende Werte in der angegebenen Reihenfolge in einen anfangs
leeren binären Suchbaum ein:
h1, 2, 8, 9, 13, 18, 23i.
Führen Sie nun die Suche nach dem Schlüssel 23 durch. Welches Problem tritt hier auf?
Aufgabe 22 Gegeben sei ein binärer Suchbaum mit Werten zwischen 1 und 1001. In
diesem Baum wird die Zahl 364 gesucht.
(a) Überprüfen Sie für die Folgen (1) bis (4), ob die Elemente in der angegebenen Reihenfolge Werte von Knoten repräsentieren können, die bei der Suche im binären
Suchbaum traversiert wurden.
(1)
(2)
(3)
(4)
h944, 218, 336, 713, 290, 398, 349, 364i
h1001, 200, 936, 241, 937, 274, 364i
h1000, 201, 899, 249, 890, 274, 362, 364i
h3, 399, 389, 212, 277, 386, 380, 279, 364i
(b) Schreiben Sie eine Funktion als Pseudocode, die dieses Problem im Allgemeinen
löst, d.h. für beliebige Folgen, Obergrenzen, Untergrenzen und gesuchte Zahlen. Sie
können von paarweise unterschiedlichen Werten und korrekten Eingaben ausgehen.
Aufgabe 23 Gegeben ist ein Zeiger L auf den Anfang einer einfach verketteten, aufsteigend sortierten Liste der Länge n. Entwerfen Sie einen Algorithmus in Pseudocode,
der aus dieser Liste einen möglichst balancierten binären Suchbaum T erstellt. Ein Zeiger
auf die (uninitialisierte) Wurzel von T ist Teil der Eingabe.
Um einen Knoten x des Baumes zu erstellen, soll die Funktion
x = erstelleBaumknoten(< listenelement >) benutzt werden. Weiters besitzt jeder
Knoten x des Baumes folgende Attribute:
x .key: Schlüssel
x .left: Verweis auf linkes Kind
x .right: Verweis auf rechtes Kind
Aufgabe 24
(a) Zeichnen Sie den AVL-Baum, der durch Einfügen der Schlüssel
h12, 24, 33, 7, 3, 9, 30i
in der angegebenen Reihenfolge in einen anfangs leeren AVL-Baum entsteht. Nach
jeder Einfügeoperation soll das Ergebnis ein gültiger AVL-Baum sein.
2
(b) Geben Sie den AVL-Baum an, der durch Löschen des Schlüssels 12 aus dem Baum
von Punkt (a) entsteht.
Aufgabe 25 Gegeben sei folgender Baum direkt nach dem Einfügen eines neuen Elements in einen AVL-Baum:
10
8
16
6
14
2
22
18
Ist die AVL-Eigenschaft in diesem Baum verletzt? Falls ja, nennen Sie den Knoten der
zuletzt eingefügt wurde, führen Sie die notwendigen Maßnahmen durch, um die AVLBedingung wieder herzustellen, und zeichnen Sie den Baum in seinem korrigierten Zustand.
Führen Sie danach folgende Operationen in diesem AVL-Baum in der angegebenen Reihenfolge durch und zeichnen Sie den Baum nach jeder Operation. Achten Sie darauf, dass
die AVL-Eigenschaft immer erhalten bleibt.
• Fügen Sie 3 in den AVL-Baum ein.
• Fügen Sie 5 in den AVL-Baum ein.
• Löschen Sie 6 aus dem AVL-Baum (verwenden Sie falls notwendig den Successor).
Aufgabe 26 Gegeben sei ein binärer Suchbaum. Jeder Knoten K des Baumes besteht
aus dem Schlüssel K .key (Integer) und den Verweisen K .left und K .right auf den linken
bzw. rechten Unterbaum. Sei B ein Verweis auf den Wurzelknoten des Baumes.
Schreiben Sie einen möglichst effizienten iterativen Algorithmus PrüfeHöhenbalancierung
mit geeigneten Parametern, der für den Baum B feststellt, ob dieser höhenbalanciert ist
(siehe Skriptum Seite 80) und als Ergebnis wahr oder falsch liefert.
Tipp: Eine Möglichkeit wäre, einen Stack zu verwenden.
3
Aufgabe 27 Wie ist beim Einfügen eines Schlüssels in einen B-Baum der Ordnung 8
vorzugehen, wenn der Knoten, der den neuen Schlüssel aufnehmen soll, bereits 7 Schlüssel
enthält? Erklären Sie den Vorgang und zeichnen Sie eine entsprechende Skizze.
Aufgabe 28 Gegeben ist die Zahlenfolge
h40, 6, 20, 10, 12, 15, 30, 18, 25, 35i.
Fügen Sie alle Schlüssel der Folge nacheinander in einen anfangs leeren B-Baum der
Ordnung 4 ein. Zeichnen Sie den Baum nach jeder Einfügeoperation (die leeren Blätter
können bei der Zeichnung entfallen).
• Löschen Sie anschließend den Knoten 35 aus dem B-Baum.
• Löschen Sie weiters den Knoten 40 aus dem B-Baum.
Zeichnen Sie den resultierenden B-Baum nach jeder Löschoperation.
Aufgabe 29 Eine Hashtabelle soll bis zu 7500 Einträge aufnehmen. Die Schlüssel
sind ganze Zahlen im Bereich [−5000, 5000]. Der Hashwert wird mit der Divisions-RestMethode ermittelt und die Kollisionsbehandlung erfolgt mittels Double Hashing.
(a) Geben Sie für jede der folgenden Zahlen an, ob sie eine gute Wahl für die Tabellengröße m wäre und begründen Sie Ihre Entscheidung:
8192, 7499, 35537, 7507, 8999
(b) Definieren Sie für eine geeignete Wahl der Tabellengröße aus (a) entsprechende Funktionen h1 (k) und h2 (k).
(c) Auf was muss bei der Wahl der Funktionen h1 (k) und h2 (k) besonders geachtet
werden?
Aufgabe 30 Gegeben ist eine Hashtabelle mit Tabellengröße m = 13 und der Hashfunktion h1 (k) = k mod 13. In die Tabelle wurden die Werte h3, 5, 7, 16i bereits eingefügt.
Gehen Sie davon aus, dass zur Kollisionsbehandlung
(a) Lineares Sondieren mit der Schrittweite c = 3,
(b) Quadratisches Sondieren mit den Konstanten c1 = 4 und c2 = 1, bzw.
(c) Double Hashing mit der zusätzlichen Hashfunktion h2 (k) = k mod 7 + 1
4
verwendet wurde und fügen Sie jeweils mit derselben Methode die Werte h29, 21, 84i in
dieser Reihenfolge ein.
0
Lineares Sondieren
Quadratisches Sondieren
Double Hashing
1
2
3
3
3
3
5
4
5
5
5
5
6
16
16
7
7
7
7
8
16
9 10
11
12
Herunterladen