Übungen zu Algorithmik I Wintersemester 2004/05 Prof. Dr. Herbert Stoyan, Dr.-Ing. Bernd Ludwig Aufgabenblatt 11 vom 10.01.2005 Aufgabe 1 Binärbäume 28 Punkte 1. Beantworten Sie die nachstehenden Fragen zu diesem Binärbaum! A B C D E F G H Abgabe: (a) Wie heißt die Wurzel? Aufgabe-11-1.pdf Abgabe: (b) Wie viele Knoten hat der Baum? Aufgabe-11-1.pdf Abgabe: (c) Wie viele Blätter hat der Baum? Aufgabe-11-1.pdf (d) Welche Höhe hat der Baum? Abgabe: Aufgabe-11-1.pdf (e) Welche Höhe hat der Baum mit Wurzel F? Abgabe: Aufgabe-11-1.pdf (f) Welche Kinder hat C? Abgabe: Aufgabe-11-1.pdf (g) Welche Vorgänger hat F? Abgabe: Aufgabe-11-1.pdf Aufgabe 2 Konstruktion von Binärbäumen Tafelübung 1. Konstruieren Sie einen Binärbaum der Höhe 3 mit 8 Knoten! 2. Können Sie auch einen Binärbaum der Höhe 2 mit 8 Knoten konstruieren? 3. Welche Höhe muss ein Binärbaum mindestens haben, wenn er n Knoten hat (1 ≤ n ≤ 20)? Erstellen Sie durch Ausprobieren eine Tabelle! 1 4. Leiten Sie aus der Tabelle eine Vermutung ab, wie man die Höhe eines Binärbaums mit n Elementen errechnet und beweisen Sie ihre Vermutung mit vollständiger Induktion! Aufgabe 3 Höhe, Blätter und Knoten von Binärbäumen 28 Punkte Wir bezeichnen mit L(T ) die Zahl der Blätter des Binärbaums T , mit N (T ) die Zahl seiner Knoten und mit H(T ) seine Höhe. Abgabe: 1. Beweisen Sie mit vollständiger Induktion: Aufgabe-11-3.pdf L(T ) ≤ N (T ) + 1 2 Abgabe: 2. Beweisen Sie mit vollständiger Induktion: Aufgabe-11-3.pdf N (T ) + 1 ≤ 2H(T ) 2 Abgabe: 3. Wieviele Knoten, Blätter und innere Knoten hat demzufolge ein vollständig besetzter Aufgabe-11-3.pdf Binärbaum? Aufgabe 4 Korrektheit von Programmen Tafelübung 1. Finden Sie eine Schleifeninvariante I für das nachstehende Programm! Geben Sie an, welche Vorbedingung vor dem ersten Eintritt in die Schleife, und welche Zusicherung nach Durchlauf der Schleife gilt! Werden tatsächlich zwei Zahlen a und b multipliziert? int mult( int a, int b ) { int x, y, z; x = a; y = b; z = 0; while( x > 0 ) { if( odd( x ) ) z = z+y; y = y*2; x = x/2; } return z; } 2. Beantworten Sie dieselben Fragen wie in der obigen Aufgabe f ür folgendes Programm! 2 int power( int a, int b ) { int x, y, z; x = a; y = b; z = 1; while( y > 0 ) { if( odd( y ) ) z = z*x; y = y/2; x = x*x; } return z; } Aufgabe 5 Korrektheit von Programmen 28 Punkte Abgabe: 1. Beantworten Sie dieselben Fragen wie in der obigen Aufgabe f ür folgendes Programm! Aufgabe-11-5.pdf int fib( int n ) { int a, b, i; a = 0; b = 1; i = 0; while( i < n ) { i = i+1; b = a+b; a = b-a; } return a; } Aufgabe 6 Prioritätswarteschlangen Tafelübung In dieser Aufgabe wird eine Prioritätswarteschlange mit Hilfe einer Halde realisiert. Indem der Knoten mit der höchsten Priorität aus der Halde entfernt wird, erfüllt man genau das Axiom A1 für Prioritätswarteschlangen aus der Vorlesung. 1. Führen Sie folgende Operationen mit der Prioritätswarteschlange Patients durch: (a) Patients.Initialize (b) Patients.enq((a,40)) 3 (c) Patients.enq((b,35)) (d) Patients.enq((c,40)) (e) Patients.enq((d,83)) (f) Patients.deq() (g) Patients.deq() 2. Wann wird das Element a entnommen, wann c? 4