3
¨ Ubungsblatt 9 Datenstrukturen und Algorithmen (SS 2014) Abgabe: Mittwoch, 25.6.2014, 15:45 Uhr — Besprechung: ab Freitag, 27.6.2014 Bitte l¨ osen Sie das  ¨ Ubungsblatt in  Gruppen von 3 Studenten  und w¨ ahlen EINEN Studenten aus, welcher die L¨ osung 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 enth¨ alt. 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 Definitionen und gehen Sie von 0-basierten Indizes aus:  p 1  =  ‘‘hxeflhxthxe’’;  t 1  =  ‘‘hxelfhxeflhyhxeflhxthxevzxe’’ (a)  (4 Punkte)  Stellen Sie die Pr¨ afixtabelle 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 finden. Stel- len Sie dar, wie Sie vorgegangen sind und f¨ ugen Sie Erkl¨ arungen hinzu, wo diese zum Verst¨ andnis notwendig sind. Geben Sie jeweils die Anzahl der ben¨ otigten Vergleiche an. Aufgabe 2  Textalgorithmen: Boyer-Moore  [Punkte: 8] Verwenden Sie folgende Definitionen und gehen Sie von 0-basierten Indizes aus:  p 2  =  ‘‘zyxzxzzyxz’’;  t 2  =  ‘‘yzwxxzzyxzwwyzxzzwxzwzyxzxzzyxz’’ uhren Sie den Boyer-Moore-Algorithmus aus, um  p 2  in  t 2  zu finden. Stellen Sie dar, wie Sie vor- gegangen sind, und f¨ ugen Sie Erkl¨ arungen hinzu, wo diese zum Verst¨ andnis notwendig sind. Geben Sie jeweils die Anzahl der ben¨ otigten 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 suffix[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 m¨ ogliche Hashfunktionen f ¨ ur diverse Mengen gegeben. Geben Sie jeweils (inkl. kurzer Begr¨ undung) an, ob die Kriterien der Surjektivit¨ at und der Gleichverteiltheit erf ¨ ullt sind. (a)  (1 Punkt)  Menge: eine große repr¨ asentative Menge englischer W¨ orter Hashfunktion: ASCII-Wert (0–127) des ersten Buchstabens (b)  (1 Punkt)  Menge: die Menge aller englischen W¨ orter mit bis zu 12 Buchstaben Hashfunktion: Wortl¨ ange (1–12) 1 https://ilias3.uni-stuttgart.de/goto.php?target=fold_598967

DSA 1 09. Hausaufgabenblatt

Embed Size (px)

Citation preview

  • 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.