Übung: Algorithmen und Datenstrukturen SS 2007

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