← hier tackern Aufgabe: Punkte: Korrektor(in): 1 2 3 4 5 P Übung zur Vorlesung: Algorithmen und Datenstrukturen Blatt 9, Abgabe: bis 16.12.2016 um 8:30 Uhr in den Briefkästen auf 25.13.O2. Benutzerkennung: Name: Gruppe: Aufgabe 1 (5 Punkte): Gegeben folgender binärer Suchbaum: 1. Geben Sie die Schlüssel in Hauptreihenfolge (en. pre-order) an: 2. Geben Sie die Schlüssel in Nebenreihenfolge (en. post-order) an: 3. Geben Sie die Schlüssel in symmetrischer Reihenfolge (en. in-order) an: 4. Geben Sie den symmetrischen Nachfolger des Knotens mit Schlüssel 10 an: 5. Geben Sie den symmetrischen Vorgänger des Knotens mit Schlüssel 10 an: Aufgabe 2 (25 Punkte): Gegeben sei ein geordneter, binärer Suchbaum T mit Wurzel w, insgesamt n Knoten und Höhe h, in dem ganzzahlige Schlüssel gespeichert sind. Dabei bezeichne v.key den an Knoten v gespeicherten Schlüssel, v.left und v.right den linken bzw. den rechten Sohn von Knoten v. Geben Sie für die folgenden Aufgabenstellungen je eine Implementierung in Pseudocode an, die die geforderte Laufzeit hat. Beschreiben sie zusätzlich jeweils kurz die Idee / Arbeitsweise Ihrer Algorithmen. 1. Berechnung aller Schlüsselanzahlen in O(n): An jedem Knoten v soll in einer Variablen v.size die Anzahl der Schlüssel in dem Teilbaum mit Wurzel v gespeichert werden. 2. Für eine gegebene Zahl k soll in Zeit O(h) berechnet werden, wieviele Schlüssel in T kleiner als k sind. Sie können dazu annehmen, dass der Algorithmus aus 1. bereits durchgeführt wurde. 3. Für zwei gegebene Zahlen a und b, a < b, soll in Zeit O(h) berechnet werden, wieviele Schlüssel aus dem offenen Intervall ]a, b[ in T enthalten sind. Sie können dazu annehmen, dass der Algorithmus aus 1. bereits durchgeführt wurde. Tipp: Wenn Sie noch nicht viel Programmiererfahrung haben, dann ist diese Aufgabe gut geeignet, um sie zusätzlich in einer Programmiersprache Ihrer Wahl tatsächlich zu implementieren - denn Programmieren lernt man nur dadurch, dass man es selber macht! Aufgabe 3 (20 Punkte): In einen binären Suchbaum sollen die Schlüssel 1, 2, . . . , n eingefügt werden. Geben Sie je eine Einfügereihenfolge an, so dass die Höhe des entstehenden Baums 1. in Θ(n) 2. in Θ(log(n)) liegt. Zur Vereinfachung der Notation können Sie annehmen, dass n eine 2er Potenz ist, also n = 2m für ein m ∈ N. Skizzieren Sie ebenfalls die entstehenden Bäumen. Aufgabe 4 (25 Punkte): 1. Geben Sie den AVL-Baum an, der durch Einfügen der Schlüssel 5, 4, 3, 1, 2 in den anfangs leeren Baum entsteht. Geben Sie den (neu) ausbalancierten Baum nach jedem Einfügen an. 2. Gegeben folgender AVL Baum: (a) Geben Sie für jeden inneren Knoten den Balancewert an. (b) Fügen Sie erst den Schlüssel 15 und dann Schlüssel 8 in den Baum ein. Geben Sie den (neu) ausbalancierten Baum nach jedem Einfügen an. (c) Wie viele Rotationen haben Sie benötigt um den Schlüssel 15 einzufügen und den Baum anschließend wieder zu balancieren? 3. Entfernen Sie aus folgendem AVL-Baum nacheinander die Schlüssel 4, 12, 16 und 11. Falls Sie die Wahl haben, mit welchem Schlüssel sie einen anderen Schlüssel ersetzen, wählen Sie den größeren dieser Schlüssel. 4. Hatten Sie beim Entfernen eines der Schlüssels eine Wahl, mit welchem Schlüssel Sie diesen vertauschen? Wenn ja, bei welchem, und welcher Schlüssel wäre die Alternative gewesen? Aufgabe 5 (25 Punkte): 1. Skizzieren Sie den Splay-Baum, der durch Einfügen der Schlüssel 1, 2, 3, ..., n in einen leeren Splay-Baum entsteht. Geben Sie als Zwischenschritte die Bäume jeweils nach dem Einfügen der Schlüssel 1, 2 und 3 an. Den folgenden Baum nennen wir T . 2. Suchen Sie Schlüssel 7 in T . Geben Sie den Baum an, welcher sich ergibt. 3. Fügen Sie nacheinander die Schlüssel 8, 2 und 6 in T ein. Geben Sie den Baum nach jedem Einfügen sowie eine Liste der durchgeführten zig, zig-zig und zig-zag Operationen an. 4. Entfernen Sie die Schlüssel 13 und 5 aus T . Geben Sie den Baum nach jedem Entfernen sowie alle durchgeführten Splay-Operationen (Splay(T, X)) an. Hinweis: Die Teilaufgaben 2. bis 4. beziehen sich alle auf den oben gegebenen Baum T. Die Änderungen, die durch die Teilaufgaben 2.- 4. gemacht werden, sollen bei den folgenden Aufgaben (3./4.) nicht berücksichtigt werden. Auf diese Art vermeiden wir, dass wir die Teilaufgaben aufgrund vorangegangener falscher Ergebnisse nicht mehr werten können.