9. ¨Ubungsblatt - Universität Konstanz

Werbung
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.
Herunterladen