Version 1 - RWTH Aachen

Werbung
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
Herunterladen