Praktische Informatik in der Wirtschaft Westfälische Wilhelms-Universität Münster Prof. Dr. Herbert Kuchen 19. Mai 2011 06. Übung zu Informatik II“ im SS 11 ” Mai 2011, 10 00 Uhr. Abgabe: 26. Aufgabe 14 (5 Punkte) In einem Binärbaum ist die Höhe eines Knotens definiert als sein Abstand zur untersten Ebene, Blätter haben also die Höhe 0. Beweisen Sie, dass in einem vollständigen Binärbaum der Höhe h mit n = 2h+1 − 1 Knoten die Summe der Höhen aller Knoten den Wert sh = n − (h + 1) hat! Aufgabe 15 (7 Punkte) Fügen Sie in einen anfangs leeren AVL-Baum die Schlüssel 2, 1, 6, 5, 4, 3, 7 ein und löschen Sie danach die Schlüssel 2, 4, 1! Skizzieren Sie den Baum nach jeder Einfügeund Löschoperation! Aufgabe 16 (14 + 4 = 18 Punkte) a) Implementieren Sie eine Klasse Menge zur Repräsentation von (mathematischen) Mengen! Elemente dürfen dabei nicht mehrfach in einer Menge vorkommen. Vervollständigen Sie dazu den folgenden Klassenrumpf: public class Menge<T extends Comparable<T>> { private int anzahlElemente; // Konstruktor transformiert ein Array in eine Menge. // Wird null übergeben, so wird die leere Menge erzeugt. public Menge(T[] a) { ... } public Menge<T> vereinigung(Menge<T> M) { ... } // this - M public Menge<T> differenz(Menge<T> M) { ... } public Menge<T> durchscnitt(Menge<T> M) { ... } public T[] toArray(Class<T> clazz) { T[] array = (T[])Array.newInstance(clazz, anzahlElemente); // hier array mit Elementen füllen! return array; } } 1 Verwenden Sie zum Speichern der Elemente nur die aus der Vorlesung bekannten Datenstrukturen. Es ist nicht erlaubt, eine der SetImplementierenden Klassen aus dem Java-API zu verwenden. Hinweise: • Der Durchschnitt (Schnittmenge) von zwei Mengen lässt sich auch mit der Vereinigung und der Differenz berechnen. • Die Methoden vereinigung, differenz und durchschnitt arbeiten nicht in-place, d.h. es muss ein neues Objekt vom Typ Menge zurückgegeben werden, außerdem • dürfen diese Methoden die Ursprungsmengen nicht modifizieren. • anzahlElemente soll die Anzahl der Elemente in der Menge speichern. • Die Methode toArray dient zu Testzwecken, implementieren Sie diese also auf jeden Fall! • Die Erzeugung eines generischen Arrays in der Methode toArray erzeugt eine Compiler-Warnung wegen dem cast nach T[]. Diese können Sie in diesem Fall ignorieren. b) Welche Laufzeit (in O-Notation) haben die von Ihnen implementierten Methoden vereinigung, differenz und durchschnitt? Begründen Sie ihre Antwort! Bitte reichen Sie das Ergebnis Ihrer Programmierarbeit über die Web-Plattform EASy ein! Anmerkung: Versehen Sie Ihre Abgaben bitte mit Namen, Matrikelnummern, E-MailAdressen und Studiengängen der beteiligten Bearbeiter und werfen Sie diese in schriftlicher Form in die Abgabefächer Ihrer jeweiligen Übungsgruppenleiter. Die Abgabefächer befinden sich im Mathe-Gebäude direkt gegenüber des Hörsaals M3. Pro Abgabe dürfen maximal 3 Bearbeiter an der Lösung der Aufgaben beteiligt sein. Bei Fragen zum Übungsbetrieb wenden Sie sich bitte an Ihren Übungsgruppenleiter oder an Steffen Ernsting. 2