Übung: Algorithmen und Datenstrukturen SS 2007 Prof. Lengauer Sven Apel, Michael Claÿen, Christoph Zengler, Christof König Blatt 6 Votierung in der Woche vom 11.06.0715.06.07 Aufgabe 16 Manuelle Sortierung Sortieren Sie das Array {101, 234, 88, 191, 120, 22, 41} mittels unten stehender Algorithmen von Hand. Verdeutlichen Sie grasch alle wichtigen Schritte sowie Zwischenergebnisse der jeweiligen Sortierverfahren. Geben Sie jeweils die Laufzeiten für den besten, durchschnittlichen und schlechtesten Fall in O-Notation an. (a) HeapSort 1 Lösung: { 101 , 234 , 88, 191, 120, 22, 41} Heapeigenschaft herstellen {234, 101 , 88, 191 , 120, 22, 41} Array ist nun ein Heap Wurzel enfernen und tauschen {234, 191, 88, 101, 120, 22, 41} { 234 , 191, 88, 101, 120, 22, 41 } { 41 , 191, 88, 101, 120, 22} Durchsickern { 191 , 120, 88, 101, 41, 22 } Wurzel enfernen und tauschen Durchsickern { 22 , 120, 88, 101, 41} { 120 , 101, 88, 22, 41 } Wurzel enfernen und tauschen { 41 , 101, 88, 22} Durchsickern { 101 , 41, 88, 22 } Wurzel enfernen und tauschen { 22 , 41, 88} Durchsickern { 88 , 41, 22 } Wurzel enfernen und tauschen { 22 , 41} Durchsickern { 41 , 22 } Wurzel enfernen und tauschen { 22 } Durchsickern Wurzel enfernen und tauschen Ergebnis: Inverse Folge der entfernten Wurzeln {} {22, 41, 88, 101, 120, 191, 234} best case: O(n log n); average in-situ; nicht stabil case: O(n log n); worst case: O(n log n); (b) BucketSort Lösung: {101, 234, 88, 191, 120, 22, 41} b88, 22, 41c0 b101, 191, 120c1 b234c2 . . . bc9 b22, 41, 88c0 b101, 120, 191c1 b234c2 . . . bc9 {22, 41, 88, 101, 120, 191, 234} best case: stabil O(n); Aufgabe 17 average case: O(n); Anhand erster Stelle einsortieren Inhalte der Buckets sortieren Ergebnis worst case: O(n2 ); nicht in-situ; Binärbaum gesucht Zeichnen Sie einen (nicht notwendigerweise vollständigen) Binärbaum T mit folgenden Eigenschaften (an die Tafel / auf ein Blatt Papier): 2 • Jeder innere Knoten von T speichert genau einen Buchstaben. • Ein Preorder-Durchlauf von T liefert die Buchstabenfolge: E X A M F U N • Ein Inorder-Durchlauf von T liefert die Buchstabenfolge: M A F X U E N Lösung: E / \ X N / \ A U / \ M F Aufgabe 18 Kennzahlen von Bäumen Auf den Webseiten1 zur Vorlesung steht eine Java-Implementierung eines binären Baumes zur Verfügung. Ändern Sie die Implementierung wie folgt ab: Entfernen Sie die optionalen Attribute size und depth der Klasse BinTree; Erweitern Sie die Klasse BinTree um die folgenden Methoden: (a) int depth() soll die Tiefe des Baums berechnen. Lösung: int depth() { if (isEmpty()) return -1; int leftDepth = leftTree().depth(); int rightDepth = rightTree().depth(); return 1 + (int) Math.max(leftDepth, rightDepth); } (b) int size() soll die Anzahl der Knoten im Baum berechnen. Lösung: int size() { if (isEmpty()) return 0; return 1 + leftTree().size() + rightTree().size(); } 1 http://www.infosun.m.uni-passau.de/cl/passau/algdat07/programme.html 3 (c) int numberOfLeaves() soll die Anzahl der Blätter im Baum berechnen. Lösung: int numberOfLeaves() { if (isEmpty()) return 0; int leaves = leftTree().numberOfLeaves() + rightTree().numberOfLeaves(); return (leaves == 0) ? 1 : leaves; } 4