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