9. Übungsblatt - Klausurvorbereitung

Werbung
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()
Herunterladen