Sie sind auf Seite 1von 2

Reliable Software Systems

Ubungsblatt 9
Datenstrukturen und Algorithmen (SS 2014)
Abgabe: Mittwoch, 25.6.2014, 15:45 Uhr Besprechung: ab Freitag, 27.6.2014
Bitte losen Sie das

Ubungsblatt in Gruppen von 3 Studenten und wahlen EINEN Studenten aus,
welcher die Losung im ILIAS als PDF als Gruppenabgabe (unter Angabe aller Gruppenmitglieder)
einstellt. Bitte erstellen Sie dazu ein Titelblatt, welches die Namen der Studenten, die Matrikelnummern,
und die E-Mail-Adressen enthalt.
Die Aufgaben mit Implementierung sind mit Impl gekennzeichnet. Das entsprechende Eclipse-Projekt
kann im ILIAS heruntergeladen werden. Bitte beachten Sie die Hinweise zu den Implementierungsaufga-
ben, die im ILIAS verf ugbar sind.
1
Dieses

Ubungsblatt beinhaltet 5 Aufgaben (davon eine Bonusaufgabe) mit einer Gesamtzahl von 30 +
10 Punkten (30 Punkte = 100%).
Aufgabe 1 Textalgorithmen: Knuth-Morris-Pratt [Punkte: 8]
Verwenden Sie folgende Denitionen und gehen Sie von 0-basierten Indizes aus:
p
1
= hxeflhxthxe; t
1
= hxelfhxeflhyhxeflhxthxevzxe
(a) (4 Punkte) Stellen Sie die Praxtabelle f ur das Pattern p
1
auf.
(b) (4 Punkte) F uhren Sie den Knuth-Morris-Pratt-Algorithmus durch, um p
1
in t
1
zu nden. Stel-
len Sie dar, wie Sie vorgegangen sind und f ugen Sie Erklarungen hinzu, wo diese zum Verstandnis
notwendig sind. Geben Sie jeweils die Anzahl der benotigten Vergleiche an.
Aufgabe 2 Textalgorithmen: Boyer-Moore [Punkte: 8]
Verwenden Sie folgende Denitionen und gehen Sie von 0-basierten Indizes aus:
p
2
= zyxzxzzyxz; t
2
= yzwxxzzyxzwwyzxzzwxzwzyxzxzzyxz
F uhren Sie den Boyer-Moore-Algorithmus aus, um p
2
in t
2
zu nden. Stellen Sie dar, wie Sie vor-
gegangen sind, und f ugen Sie Erklarungen hinzu, wo diese zum Verstandnis notwendig sind. Geben
Sie jeweils die Anzahl der benotigten Vergleiche an. Greifen Sie auf die folgenden Tabellen f ur p
2
zur uck:
c w x y z
last[c] -1 8 7 9
i 0 1 2 3 4 5 6 7 8 9 10
p
2
[i] z y x z x z z y x z
sux[i] 1 0 0 4 0 2 1 0 0 10 0
shift[i] 6 6 6 6 6 6 9 4 3 1 0
Aufgabe 3 Hashing [Punkte: 4]
Im Folgenden sind mehrere mogliche Hashfunktionen f ur diverse Mengen gegeben. Geben Sie jeweils
(inkl. kurzer Begr undung) an, ob die Kriterien der Surjektivitat und der Gleichverteiltheit erf ullt
sind.
(a) (1 Punkt) Menge: eine groe reprasentative Menge englischer Worter
Hashfunktion: ASCII-Wert (0127) des ersten Buchstabens
(b) (1 Punkt) Menge: die Menge aller englischen Worter mit bis zu 12 Buchstaben
Hashfunktion: Wortlange (112)
1
https://ilias3.uni-stuttgart.de/goto.php?target=fold_598967
Datenstrukturen und Algorithmen (SS 2014)

Ubungsblatt 9 Seite 2 von 2
(c) (1 Punkt) Menge: Java-Integer-Zahlen > 0
Hashfunktion: Die erste Zier der Zahl (19)
(d) (1 Punkt) Menge: Java-Integer-Zahlen 0 < x < 100.000.000
Hashfunktion: Die erste Zier der Zahl (19)
Aufgabe 4 Impl Geschlossene Hashmap [Punkte: 10]
In der Vorlesung wurde besprochen wie geschlossenes Hashing funktioniert. In dem im ILIAS be-
reitgestellten Projekt existiert bereits das Interface IHashMap<K, V>, welches die u.g. grundlegen-
den Funktionen auf einer Hashmap deniert. Zusatzlich existiert in diesem Projekt bereits die ab-
strakte Basisklasse AbstractHashMap<K, V>, welches das Interface bereits implementiert und einige
moglicherweise n utzliche Funktionen bereitstellt. Implementieren Sie in der ebenfalls bereits exis-
tierenden Klasse ClosedHashMap<K, V> die noch nicht implementierten Funktionen. Beachten Sie,
dass bereits eine Implementierung der Funktion remove() gegeben ist. Die ClosedHashMap verwen-
det das Divisionverfahren mit linearem Sondieren. Dem bereits existierenden Konstruktor wird ein
Sondierwert (skipping) ubergeben. Implementieren Sie die Klasse ClosedHashMap mit folgenden
Funktionen:
put(K key, V value) f ugt einen Wert und einen Schl ussel in die Hashmap ein. Falls bereits ein
Wert mit demselben Schl ussel vorhanden ist, geben Sie diesen alten Wert zur uck und ersetzen
Sie diesen durch den neuen. Sind bereits getRehashThreshold() viele Elemente in der Daten-
struktur vorhanden, muss diese vergroert und ein Rehashing durchgef uhrt werden. Rufen Sie
hierzu die vorgegebene Funktion enlargeAndRehash() auf.
contains(K key) uberpr uft, ob der gegebene Schl ussel in der Hashmap vorhanden ist. Geben
Sie true zur uck falls dies der Fall ist; andernfalls geben Sie false zur uck.
retrieve(K key) gibt den Wert zum ubergebenen Schl ussel zur uck. Falls dieser Schl ussel nicht
in der Hashmap existiert, geben Sie null zur uck.
keyValuePairIterator() gibt einen Iterator uber die Schl ussel-Werte Paare zur uck. Dieser
traversiert das entries-Array in aufsteigender Reihenfolge (Start bei Index 0). Die remove()-
Funktion braucht nicht implementiert werden (wirft eine UnsupportedOperationException).
iterator() gibt einen Iterator uber die Werte zur uck. Dieser traversiert das entries-Array
in aufsteigender Reihenfolge (Start bei Index 0). Sie konnen den keyValuePairIterator in-
tern hierf ur verwenden. Die remove()-Funktion braucht nicht implementiert werden (wirft eine
UnsupportedOperationException).
Aufgabe 5 Textalgorithmen: Boyer-Moore [Bonuspunkte: 10]
(a) (3 Bonuspunkte) Erstellen Sie die last-, sux- und shift-Tabellen f ur folgendes Pattern p
3
.
Gehen Sie von 0-basierten Indizes aus.
p
3
= dcbbadddcadddccdbadd
(b) (7 Bonuspunkte) Impl In dem im ILIAS bereitgestellten Projekt, bendet sich die Klasse
BMTables. Darin benden sich die zwei nicht implementierten Methoden initLast(String
pattern) und bmShiftSuffix(String pattern, int[] shift, int[] suffix). Implemen-
tieren Sie diese, sodass erstere die last-Tabelle erstellt und zur uck gibt, und letztere die ubergebe-
nen shift- und sux-Tabellen f ullen.