Algorithmen und Datenstrukturen Universität Konstanz Lehrstuhl für Multimedia Signalverarbeitung WS 06/07 Prof. Dr. D. Saupe/ Hendrik Ziezold 9. Übungsblatt Ausgabe: 19.12.2006 Abgabe: 09.01.2007, 12 Uhr Die in den folgenden Aufgaben zu zeichnenden Bäume müssen nicht mit LATEX erstellt werden. Sie können mit einem anderen Programm erstellt und als Bilder in das LATEX-Dokument eingebunden werden. Aufgabe 1: 6 Punkte (a) Ein binärer Suchbaum wird in der Reihenfolge Preorder durchlaufen. Sie erhalten als Knotenliste (17, 11, 7, 14, 12, 22). Können Sie daraus den Suchbaum eindeutig rekonstruieren? Wenn ja, geben Sie den Suchbaum an. (b) Ein binärer Suchbaum wird in der Reihenfolge Postorder durchlaufen. Sie erhalten als Knotenliste (7, 12, 14, 22, 17, 11). Können Sie daraus den Suchbaum eindeutig rekonstruieren? Wenn ja, geben Sie den Suchbaum an. (c) Ein binärer Suchbaum wird in der Reihenfolge Inorder durchlaufen. Sie erhalten als Knotenliste (7, 11, 12, 14, 17, 22). Können Sie daraus den Suchbaum eindeutig rekonstruieren? Wenn ja, geben Sie den Suchbaum an. (d) Geben Sie, falls möglich, je einen allgemeinen Konstruktionsalgorithmus an (als Pseudocode), mit dem man aus einer Knotenliste in der Reihenfolge Pre-, Post- bzw. Inorder den binären Suchbaum eindeutig rekonstruieren kann. (e) Falls die eindeutige Rekonstruktion für eine der Reihenfolgen Pre-, Post- bzw. Inorder nicht möglich ist, geben Sie ein Beispiel an, das Ihre Aussage belegt. Hinweis: Bei der Reihenfolge Preorder wird zuerst die Wurzel, dann der linke und dann der rechte Teilbaum besucht, bei Postorder erst der linke, dann der rechte Teilbaum und dann die Wurzel und bei Inorder erst der linke Teilbaum, dann die Wurzel und dann der rechte Teilbaum. Aufgabe 2: 4 Punkte Geben Sie zwei Permutationen der acht Zahlen 1, 3, 8, 12, 13, 15, 22, 34 an, für die Heapsort die meisten bzw. die wenigsten Vertauschungen von zwei Elementen im Array durchführt. Demonstrieren Sie für beide Permutationen den Sortiervorgang und geben Sie die Anzahl der benötigten Vertauschungen an. Aufgabe 3: 5 Punkte Wir betrachten binäre Suchbäume mit Knoten aus der Menge Kn = {1, . . . , n}. (a) Geben Sie alle binären Suchbäume mit Knotenmenge K4 an. (b) T (n) sei die Anzahl der binären Suchbäume mit Knotenmenge Kn . Ermitteln Sie T (1), T (2), T (3) und T (4). (c) Geben Sie eine Rekursionsgleichung für T (n) an. Aufgabe 4: Zusatzaufgabe 8 Punkte Wir wollen das Laufzeitverhalten eines aus Quicksort und Bubblesort bestehenden hybriden Sortierverfahrens untersuchen und den optimalen Umschaltpunkt zwischen Quicksort und Bubblesort ermitteln. • Schreiben Sie eine C- oder C++-Funktion void hybridSort(int *array,int size,int cutoff), die das Array *array mit Länge size aufsteigend sortiert. Das Sortieren soll zunächst mit Quicksort erfolgen, wobei das Pivotelement als Median aus erstem, mittlerem und letztem Element des aktuellen Teilarrays gewählt werden soll. Die Quicksort-Rekursion soll abgebrochen werden, wenn das aktuelle Teilarray nur noch eine Länge von nicht mehr als cutoff Elementen hat. Das so vorsortierte Array soll anschließend durch Bubblesort vollständig sortiert werden. • Schreiben Sie ein C- oder C++-Programm, mit dessen Hilfe Sie den optimalen Wert des Parameters cutoff, der die zum Sortieren benötigte Zeit minimiert, ermitteln können. Eine mögliche Vorgehensweise wäre die Messung der für das Sortieren eines Arrays von Zufallszahlen mit verschiedenen Werten von cutoff benötigten Zeit. Für die Zeitmessung bietet sich die in der Includedatei time.h definierte Funktion clock() an, die die seit dem Programmstart vergangene Laufzeit des Programms in der Einheit CLOCKS 1PER SEC Sekunden liefert. Beachten Sie, dass die von der Funktion clock() gelieferten Zeiten auf Linux-Systemen eine Auflösung von 10 ms haben (d.h. Zeiten kürzer als 10 ms können nicht gemessen werden). Sie sollten also die Zeit über eine genügend große Anzahl von Sortiervorgängen messen, um zuverlässige Werte zu bekommen. Jede Funktion oder Methode ist mindestens mit einer Beschreibung aller Funktionsoder Methodenparameter und, falls vorhanden, des Rückgabewerts zu kommentieren. • Geben Sie den optimalen Wert von cutoff für Ihre Funktion hybridSort aus Aufgabe a) an. Wir wünschen Ihnen schöne Feiertage und einen guten Start ins Jahr 2007! Bitte beachten Sie die Abgaberichtlinien: Die Übungsblätter können einzeln oder in Gruppen von 2 (max. 3) Leuten bearbeitet und abgegeben werden. In den Dateien mit den Lösungen sollen die Namen und Matrikelnummern sowie die Übungsgruppe angegeben werden. Legen Sie für dieses Übungsblatt ein Verzeichnis Blatt9 <loginname1>[ <loginname2>] [ <loginname3>] an, und legen Sie die Dateien mit den Lösungen in dieses Verzeichnis. Erstellen Sie ein ZIP-Archiv von diesem Verzeichnis und schicken Sie es mit dem Betreff Blatt9 <loginname1>[ <loginname2>] [ <loginname3>] an ziezold @ inf.uni-konstanz.de.