Algorithmen und Datenstrukturen Universität Konstanz WS 2009/2010 Fachbereich Informatik & Informationswissenschaft Prof. Dr. Ulrik Brandes / Dr. Sabine Cornelsen / Melanie Badent und Roman Byshko 9. Übungsblatt - Klausurvorbereitung Ausgabe: 16. Dezember 2009 Abgabe: 7. Januar 2010, 10 Uhr Die Bearbeitung in Zweiergruppen ist ausdrücklich erwünscht. Aufgabe 1: Hashing 4 Punkte Gegeben sei die folgende Hashfunktion h : N → {0, . . . , 9}; h(n) := Quersumme(n) mod 10 , wobei die Quersumme einer Zahl n gegeben ist durch die Summe über alle Ziffern in der Dezimaldarstellung von n. (Zum Beispiel ist Quersumme(431) = 4 + 3 + 1 = 8.) Ordnen Sie die folgenden Zahlen, in der gegebenen Reihenfolge, unter Verwendung von h in die untenstehende Hashtabelle ein. Bei Kollisionen wird mittels quadratischer Sondierung eine neue Arraystelle gesucht (Open Hashing; keine Verkettung). 937, 0 1 2 543, 3 8365, 4 45, 5 8768, 6 26 7 8 9 (Quadratische Sondierung: falls beim Einfügen eines Schlüssels k eine Kollision auftritt, werden nacheinander die Stellen h(k) + i2 mod 10, für i = 1, 2, . . . ausprobiert.) [Bitte wenden] Aufgabe 2: Binärbäume 4 Punkte (a) (3 Punkte) Implementieren Sie das Interface u09.ex.ITreeHeight, mit dessen Hilfe man die Höhe eines Binärbaums rekursiv berechnen kann. Die Höhe ist definiert als größte Anzahl von Kanten auf einem Weg von der Wurzel zu einem Blatt. Benutzen Sie auch das Interface u06.ex.ITreeNode, welches Sie aber nicht zu implementieren brauchen. (b) (1 Punkt) Geben Sie als Kommentar in Ihrem Quellcode die asymptotische Laufzeit Ihres Algorithmus in Abhängigkeit der Anzahl der Knoten des Baumes an. Aufgabe 3: Asymptotische Notation 4 Punkte (a) Ordnen Sie die folgenden Funktionen nicht-absteigend nach asymptotischem Wachstum. Geben Sie auch an, welche Funktionen asymptotisch gleich schnell wachsen. √ n, n, n3/2 , n2 , n log n, n log(log n), n(log n)2 , n log(n2 ), 2/n, 2n , 2n/2 , 37, n2 log n, n3 In Teilaufgabe 3(a) müssen Sie keine Begründung für Ihre Aussagen liefern. (b) Zeigen Sie, dass für jede Konstante a > 1 gilt: an ∈ o(n!). Aufgabe 4: Suchen 7 Punkte Gegeben sei eine n × n-Matrix von Zahlen. Die Elemente jeder Zeile seien aufsteigend sortiert, die Elemente jeder Spalte absteigend. Es soll in dieser Matrix nach einer Zahl x gesucht werden. Hinweis: Falls Sie (b) lösen, brauchen Sie keine Lösung für (a) anzugeben. (a) Implementieren Sie die Methode boolean find1(int[][] matrix, int x) aus dem Interface u09.ex.IFinder, die mit der Laufzeit o(n2 ) nach einer Zahl x in der Matrix suchen kann. (b) Implementieren Sie die Methode boolean find2(int[][] matrix, int x) aus dem Interface u09.ex.IFinder, mit der man sogar in O(n) Laufzeit nach einer Zahl x in der Matrix suchen kann. Falls Sie nur eine der Methoden implementieren, sollte die andere immer false zurückgeben. [nächste Seite] Aufgabe 5: Heaps 1 Punkt Führen Sie die folgenden Operationen an einem anfangs leeren MaxHeap (entweder realisiert durch einen Baum, oder realisiert durch ein Array) aus und geben Sie den Zustand des gesamten Heaps nach jeder Operation an. insert(10) insert(5) insert(12) insert(7) insert(17) insert(15) extractMax() extractMax() insert(8) extractMax()