Aufgaben zur Veranstaltung Algorithmen und Datenstrukturen, SS 2014 H. Pflug, A. Espe, J. Dietel FH Aachen, Campus Jülich; RZ, RWTH Aachen Übungsblatt 6 22.04.2014 Wiederholungsaufgaben Folgende Aufgaben sollen per Hand gelöst werden: Aufgabe 1: Folgende Zahlen sollen in der gegebenen Reihenfolge jeweils in einen leeren binären Suchbaum eingefügt werden. 1. 36,72,14,18,9,51,99,60 2. 11,22,33,44,55,66,77 a) Wie groß ist jeweils die durchschnittliche Weglänge (Suchaufwand)? ∑ b) Welcher Suchbaum ist günstiger und warum? c) Löschen Sie aus Suchbaum 1 nacheinander die 14 und die 72. Aufgabe 2: Schreiben Sie an jeden Knoten der Suchbäume den AVL-Index. Welche dieser Suchbäume erfüllt die AVL-Bedingung? a) b) c) 3 2 8 8 8 9 3 2 5 4 9 3 9 2 5 4 11 11 Aufgabenblatt Algorithmen SS 14; H. Pflug, A. Espe, J. Dietel Aufgabe 3: Erstellen Sie einen B-Baum der Ordnung 2, indem Sie nacheinander folgende Werte in einen leeren B-Baum einfügen. 11,67,79,23,9,43,12,1,68,78 Zeichnen Sie alle entstehenden Zwischenschritte, sofern sich die Struktur zum vorhergehenden B-Baum ändert. Löschen Sie aus dem folgenden Baum die Werte 23,43,78 in der angegebenen Reihenfolge. Beim Löschen in einem inneren Knoten soll dieser Wert durch den größten Wert im kleineren Teilbaum ersetzt werden. Aufgabe 4: 1. Fügen Sie die folgenden Zahlen in einen Heap ein. Das größte Element hat die höchste Priorität. 55,67,33,79,63,57,68 2. Entnehmen Sie nacheinander alle Elemente des Heaps. Aufgabe 5: Fügen Sie folgende Werte in eine Hashtabelle ein. 20,38,2,5,43,27,39,1,16 a) Benutzen Sie bei Kollisionen lineares Sondieren. Die Tabellengröße soll 11 sein. Die Hashfunktion ist h(x)=x%11. b) Benutzen Sie bei Kollisionen doppeltes Hashing. Die Tabellengröße soll 11 sein. Die erste Hashfunktion ist h1(x)=x%11. Die zweite Hashfunktion ist h2(x)=(x/10)+1. c) Warum ist in Teil b) bei der zweiten Hashfunktion der Teil „+1“ wichtig? 2 Aufgabenblatt Algorithmen SS 14; H. Pflug, A. Espe, J. Dietel Aufgabe 6: Die umgedrehte polnische Notation (UPN) ist eine Notation für mathematische Operationen. Dabei werden zunächst die Operanden niedergeschrieben und anschließend der Operator. Zum Beispiel steht der UPN Ausdruck „ 3 5 + “ für „3+5“ in „normaler“ Notation. „2 3 4 + *“ steht für „2*(3+4)“ Ausdrücke in UPN-Notation kann man besonders gut mit Hilfe eines Stacks bearbeiten. Die Regeln dazu sind: Der Ausdruck wird von links nach rechts abgearbeitet. Zahlen werden auf den Stack gelegt. Taucht ein Operator (für eine Grundrechenart) auf, werden die letzten beiden Werte vom Stack geholt, das Ergebnis damit berechnet und wieder auf den Stack gelegt. Beispiel 1: Der Ausdruck „2 3 4 + *“ wird wie folgt verarbeitet: Stack 2 2 3 2 3 4 2 7 14 Ausdruck 2 3 4 + * Beispiel 2: Der Ausdruck „6 3 /“ bedeutet „6/3“. Das Aussehen des Stacks ist: Stack 6 6 3 2 Ausdruck 6 3 / Aufgabe: Notieren Sie das Aussehen des Stacks für den Ausdruck „2 6 + 3 4 6 * 8 / * 5 - /“ Stack Ausdruck 2 6 + 3 4 6 * 3 8 / * 5 - / Aufgabenblatt Algorithmen SS 14; H. Pflug, A. Espe, J. Dietel Aufgabe 7: Entwerfen Sie eine Lösung zur folgenden alten Klausuraufgabe. Überlegen Sie zunächst, welche Attribute Ihre Klasse haben soll. Skizzieren Sie anschließend den Algorithmus für die put- und get-Methode. Notieren Sie zuletzt den Java-Code. Es gibt mehrere unterschiedlich komplexe Lösungen. Bedenken Sie auch Ihren Zeitverbrauch in der Klausur. Sie dürfen Fragen zur Java-API stellen. Klausuraufgabe Schreiben Sie eine Klasse StringFeld, die ein Feld von Strings repräsentiert. Die Besonderheit ist, dass die Indizes double-Zahlen sind. Sie müssen nicht fortlaufend sein, sondern können beliebige Werte annehmen. Die folgenden Funktionen müssen vorhanden sein: public void put(double index, String s) Speichert den String s an der Indexnummer index. Überschreibt den Eintrag, falls dort schon einer vorhanden ist. public void get(double index) Gibt den String aus, der an der Position index gespeichert ist. Besonderheit: Ist an der Stelle index kein String gespeichert, wird der String zurückgegeben, der am nächsthöheren Index steht. Gibt es keinen höheren Index, wird eine ArrayIndexOutOfBoundsException ausgelöst. Die Exception-Klasse muss nicht selbst geschrieben werden. Sie dürfen zur Lösung alle Klassen aus java.util benutzen. 4