DSA 1 09. Hausaufgabenblatt

Post on 14-Oct-2015

14 views 0 download

Transcript of DSA 1 09. Hausaufgabenblatt

  • 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 einTitelblatt, 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 verfugbar 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 Definitionen und gehen Sie von 0-basierten Indizes aus:p1 = hxeflhxthxe; t1 = hxelfhxeflhyhxeflhxthxevzxe

    (a) (4 Punkte) Stellen Sie die Prafixtabelle fur das Pattern p1 auf.

    (b) (4 Punkte) Fuhren Sie den Knuth-Morris-Pratt-Algorithmus durch, um p1 in t1 zu finden. Stel-len Sie dar, wie Sie vorgegangen sind und fugen Sie Erklarungen hinzu, wo diese zum Verstandnisnotwendig sind. Geben Sie jeweils die Anzahl der benotigten Vergleiche an.

    Aufgabe 2 Textalgorithmen: Boyer-Moore [Punkte: 8]Verwenden Sie folgende Definitionen und gehen Sie von 0-basierten Indizes aus:p2 = zyxzxzzyxz; t2 = yzwxxzzyxzwwyzxzzwxzwzyxzxzzyxz

    Fuhren Sie den Boyer-Moore-Algorithmus aus, um p2 in t2 zu finden. Stellen Sie dar, wie Sie vor-gegangen sind, und fugen Sie Erklarungen hinzu, wo diese zum Verstandnis notwendig sind. GebenSie jeweils die Anzahl der benotigten Vergleiche an. Greifen Sie auf die folgenden Tabellen fur p2zuruck:

    c w x y zlast[c] -1 8 7 9

    i 0 1 2 3 4 5 6 7 8 9 10p2[i] z y x z x z z y x zsuffix[i] 1 0 0 4 0 2 1 0 0 10 0shift[i] 6 6 6 6 6 6 9 4 3 1 0

    Aufgabe 3 Hashing [Punkte: 4]Im Folgenden sind mehrere mogliche Hashfunktionen fur diverse Mengen gegeben. Geben Sie jeweils(inkl. kurzer Begrundung) an, ob die Kriterien der Surjektivitat und der Gleichverteiltheit erfulltsind.

    (a) (1 Punkt) Menge: eine groe reprasentative Menge englischer WorterHashfunktion: ASCII-Wert (0127) des ersten Buchstabens

    (b) (1 Punkt) Menge: die Menge aller englischen Worter mit bis zu 12 BuchstabenHashfunktion: Wortlange (112)

    1https://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 > 0Hashfunktion: Die erste Ziffer der Zahl (19)

    (d) (1 Punkt) Menge: Java-Integer-Zahlen 0 < x < 100.000.000Hashfunktion: Die erste Ziffer 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, welches die u.g. grundlegen-den Funktionen auf einer Hashmap definiert. Zusatzlich existiert in diesem Projekt bereits die ab-strakte Basisklasse AbstractHashMap, welches das Interface bereits implementiert und einigemoglicherweise nutzliche Funktionen bereitstellt. Implementieren Sie in der ebenfalls bereits exis-tierenden Klasse ClosedHashMap 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 einSondierwert (skipping) ubergeben. Implementieren Sie die Klasse ClosedHashMap mit folgendenFunktionen:

    put(K key, V value) fugt einen Wert und einen Schlussel in die Hashmap ein. Falls bereits einWert mit demselben Schlussel vorhanden ist, geben Sie diesen alten Wert zuruck und ersetzenSie diesen durch den neuen. Sind bereits getRehashThreshold() viele Elemente in der Daten-struktur vorhanden, muss diese vergroert und ein Rehashing durchgefuhrt werden. Rufen Siehierzu die vorgegebene Funktion enlargeAndRehash() auf.

    contains(K key) uberpruft, ob der gegebene Schlussel in der Hashmap vorhanden ist. GebenSie true zuruck falls dies der Fall ist; andernfalls geben Sie false zuruck.

    retrieve(K key) gibt den Wert zum ubergebenen Schlussel zuruck. Falls dieser Schlussel nichtin der Hashmap existiert, geben Sie null zuruck.

    keyValuePairIterator() gibt einen Iterator uber die Schlussel-Werte Paare zuruck. Diesertraversiert 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 zuruck. Dieser traversiert das entries-Arrayin aufsteigender Reihenfolge (Start bei Index 0). Sie konnen den keyValuePairIterator in-tern hierfur verwenden. Die remove()-Funktion braucht nicht implementiert werden (wirft eineUnsupportedOperationException).

    Aufgabe 5 Textalgorithmen: Boyer-Moore [Bonuspunkte: 10]

    (a) (3 Bonuspunkte) Erstellen Sie die last-, suffix - und shift-Tabellen fur folgendes Pattern p3.Gehen Sie von 0-basierten Indizes aus.

    p3 = dcbbadddcadddccdbadd

    (b) (7 Bonuspunkte) Impl In dem im ILIAS bereitgestellten Projekt, befindet sich die Klasse

    BMTables. Darin befinden sich die zwei nicht implementierten Methoden initLast(Stringpattern) und bmShiftSuffix(String pattern, int[] shift, int[] suffix). Implemen-tieren Sie diese, sodass erstere die last-Tabelle erstellt und zuruck gibt, und letztere die ubergebe-nen shift- und suffix -Tabellen fullen.