Aufgabenblatt 7

Werbung
Informatik III
Universität Augsburg
Wintersemester 2016/17
Prof. Dr. W. Vogler
Moritz Laudahn, M.Sc.
Aufgabenblatt 7
Aufgabe 1
Beweisen Sie: Ein binärer Baum mit l Blättern besitzt mindestens l − 1 weitere Knoten.
(10P)
Aufgabe 2
a) Vervollständigen Sie das Programm mergerun aus dem Skript derart, dass directmergesort korrekt sortiert. (6P)
b) Geben Sie an, ob das Programm directmergesort stabil sortiert. (2P)
c) Beweisen Sie Ihre Aussage aus der vorherigen Aufgabe für Eingabearrays der Größe 2x
mit x ∈ IN . (10P)
In dieser Aufgabe gehen wir von Eingabe- und Hilfs-Arrays statt Dateien aus. Sei der
l-te k-Block in einem Feld a definiert als der Block an Zahlen von einschließlich Position
(l − 1)k + 1 bis einschließlich Position lk in a.
Falls nicht stabil: Suchen Sie nach einem Gegenbeispiel für eine Eingabe von directmergesort der Größe 16. Nicht alle Zahlen der Eingabe dürfen gleich sein. Beachten
Sie, wie in k-Blöcke zerlegt wird. Verwenden Sie die Indices der Zahlen Ihrer Eingabeinstanz und simulieren Sie den Algorithmus. Benutzen Sie Ihre Erkenntnisse
der Simulation, um Ihre Eingabeinstanz anzupassen.
Falls stabil: Beweisen Sie folgende Schleifeninvariante der while-Schleife in directmergesort: Für alle l gilt: Der l-te k-Block ist die stabile Sortierung der Elemente im
l-ten k-Block in der anfänglichen Datei. Zu zeigen ist u.a., dass der (2l − 1)-te bzw.
der 2l − te k-Block in a durch einem Schleifendurchlauf stabil zum l-ten 2k-Block
in a gemischt werden. Erklären Sie außerdem, warum aus der Schleifeninvariante
die Stabilität folgt.
Aufgabe 3
Implementieren Sie für die Klasse Tree23 eine Routine insert23, die einen Schlüssel x in
den Tree23 einfügt. Erweitern Sie hierzu das folgende Programm mithilfe von insert23sub
um höchstens 200 Zeichen. (10P)
(1)
(?)
(?)
void insert23(int x){
...
}
1
Aufgabe 4
a) Erweitern Sie die folgende Routine um höchstens 250 Zeichen derart, dass ein Aufruf
von TesteSuchbaum(r,low,high) rekursiv überprüft, ob ein gegebener binärer Baum T
bestehend aus lauter BinNode-Knoten mit Wurzel r
(i) ein Suchbaum ist und
(ii) die value-Werte an den Knoten zwischen low exklusive und high inklusive liegen. Hinweis: Beachten Sie bei Ihrer Implementierung, dass es Knoten mit gleichen valueWerten gibt. (10P)
boolean TesteSuchbaum(BinNode b, int low, int high){
...
}
b) Beweisen Sie die totale Korrektheit Ihrer Routine. (12P)
Informationen:
• Abgabe: Bis spätestens Donnerstag, den 08.12.2016, um 12:00 im entsprechend beschrifteten Briefkasten.
2
Herunterladen