Algorithmen & Datenstrukturen Übungen P. Fierz / HS 2012/2013 Kapitel 4 Suchalgorithmen Aufgabe 4.1 [Hashtabellen] In einer Hashtabelle der Länge 17 können Grossbuchstaben eingetragen werden. Die Hashfuntion sei Hash_1(k) = ord(k) mod 17 ord(A) = 1, ord(B) = 2, . . . , ord(Z) = 26 Nun werden nacheinander die Buchstaben A, Z, P, K, C, G, R, V, B, X eingetragen. 1. Wie sieht die Tabelle aus, wenn Kollisionen mit double Hashing behandelt werden und die zweite Hashfunktion Hash_2(k) = 1 ist? 2. Wie sieht die Tabelle aus, wenn Kollisionen mit double Hashing behandelt werden und die zweite Hashfunktion Hash_2(k) = 1 + (ord(k) mod 15) ist? Aufgabe 4.2 [Stringsuche] Gegeben: Gesucht: Zwei Strings src (source) und patt (pattern) Die erste Stelle im String src, wo der String patt als Substring vorkommt. Implementieren Sie einen Algorithmus, der mit Hilfe der Hashingtechniken dieses Problem löst. Benutzen Sie als Hashfunktion den polynomialen Hashcode. Aufgabe 4.3 [2-3-4-Baum] Gegeben sei ein leerer 2-3-4-Baum. 1. Wie sieht der Baum aus, wenn nacheinander die folgenden Schlüssel eingefügt werden? 1, 200, 47, 33, 303, 22, 7, 98, 66, 32, 11, 55, 105, 20, 137, 140 2. Wie sieht der Baum aus, wenn jetzt nacheinander die folgenden Schlüssel gelöscht werden? 200, 22, 66, 105, 140 4-1 Algorithmen & Datenstrukturen Übungen P. Fierz / HS 2012/2013 Aufgabe 4.4 [Rot-Schwarz-Baum] Gegeben sei ein leerer Rot-Schwarz-Baum. 1. Wie sieht der Baum aus, wenn nacheinander die folgenden Schlüssel eingefügt werden? 17, 2, 13, 33, 35, 22, 6, 5, 59, 12, 11, 57, 107, 21, 141, 153 2. Wie sieht der Baum aus, wenn jetzt nacheinander die folgenden Schlüssel gelöscht werden? 2, 6, 57, 21, 153 Aufgabe 4.5 [B-Tree] In einem leeren B-Tree der Ordnung 2 werden die Schlüssel 1, 2, 3, . . . , 33 nacheinander eingetragen. 1. Wie sieht der Baum nach dem Eintrag dieser Schlüssel aus? 2. Wie sieht der Baum aus, wenn anschliessend nacheinander die Schlüssel 2, 4, 8, 16 und 32 gelöscht werden? 3. Was kann man über die Anzahl Schlüssel in den einzelnen Knoten des Baumes aussagen, wenn die Schlüssel im Baum in streng aufsteigender Reihenfolge eingetragen werden und keine Schlüssel gelöscht werden? Aufgabe 4.6 [Tiefe eines B-Trees] Gegeben sei ein B-Tree der Ordnung n (d.h., in jedem Knoten können maximal 2n Schlüssel gespeichert werden). Wie gross ist die maximale Tiefe des Baumes, wenn dieser N Schlüssel enthält? Tip: k X i=0 ni = nk+1 − 1 n−1 Aufgabe 4.7 [Implementation Skipliste] Implementieren Sie die Skipliste. Dabei soll das Interface SortSuch implementiert werden. Sie finden das Interface auf meiner Internetseite. Bauen Sie in den Such- Einfügen- und Löschmethoden Zähler ein, die die Anzahl Operationen Zählen. Aufgabe 4.8 [Implementation Rot-Schwarz-Baum] Implementieren Sie den Rot-SchwarzBaum. Dazu können Sie die Implementation des binären Suchbaumes aus der Aufgabe 1.6 als Grundlage verwenden. Die Routinen zum Einfügen und Löschen von Elementen sollen in Zählern die folgenden Informationen festhalten: • Anzahl Elemente die eingefügt (bzw. gelöscht) wurden. • Anzahl Umfärbungen • Anzahl Restrukturierungen • Anzahl Anpassungen 4-2 Algorithmen & Datenstrukturen Übungen P. Fierz / HS 2012/2013 Die Routine zum Suchen eines Elementes soll in Zählern die folgenden Informationen festhalten: • Durchschnittliche Anzahl Vergleiche bei einer Erfolgreichen Suche. • Durchschnittliche Anzahl Vergleiche bei einer Erfolglosen Suche. Aufgabe 4.9 [Performance Test] Schreiben Sie ein Testprogramm, das die Performance von Skiplisten und von Rot-Schwarzbäumen vergleicht. Aufgabe 4.10 [Hash-Funktion] Implementieren Sie die universelle Famillie von Hashfunktionen mit dem Matrixverfahren. • Die Länge des Schlüssels muss frei wählbar sein. • Die Länge der Tabelle kann als Zweierpotenz (21 . . . 263 ) auch frei gewählt werden. • Zum Testen der Anzahl kollisionen steht das File WMeister.txt auf meiner Homepage zur Verfügung. Es enthält pro Zeile einen Schlüssel, wobei der Längste Schlüssel 30 Bytes ist. Die Anzahl Schlüssel ist ca. 30’000. Tip: Implementieren Sie die Matrix als Array von longs (long matrix[]). 4-3