Tutoraufgabe 1 (2 3 4 Bäume):

Ähnliche Dokumente
Tutoraufgabe 1 (2 3 4 Bäume):

Tutoraufgabe 1 (Vollständige Induktion): Tutoraufgabe 2 (Rotationen): Datenstrukturen und Algorithmen SS15 Übungsblatt 5 (Abgabe 3.6.

Tutoraufgabe 1 (SCC):

Tutoraufgabe 1 (Starke Zusammenhangskomponenten):

Tutoraufgabe 1 (Verifikation):

Tutoraufgabe 1 (Listen):

Tutoraufgabe 1 (Hoare-Kalkül):

Tutoraufgabe 1 (Programmanalyse):

Tutoraufgabe 1 (Auswertungsstrategie):

Tutoraufgabe 1 (Casting): Programmierung WS17/18 Übungsblatt 2 (Abgabe ) Allgemeine Hinweise:

Tutoraufgabe 1 (Implementierung eines ADTs):

Tutoraufgabe 1 (Programmanalyse):

Tutoraufgabe 1 (Programmanalyse):

Tutoraufgabe 1 (Fibonacci-Zahlen):

Übung 3 Musterlösung

Tutoraufgabe 1 (Programmanalyse): Programmierung WS17/18 Übungsblatt 5 (Abgabe ) Allgemeine Hinweise:

Tutoraufgabe 1 (Seiteneekte):

Tutoraufgabe 1 (Seiteneekte):

Übung Programmierung WS 2007/08 - Blatt 6

Tutoraufgabe 1 (Überladen von Methoden):

Übung Informatik I - Programmierung - Blatt 8

Globalübungsaufgabe1 (Rucksackproblem):

f 1 (n) = log(n) + n 2 n 5 f 2 (n) = n 3 + n 2 f 3 (n) = log(n 2 ) f 4 (n) = n n f 5 (n) = (log(n)) 2

Tutoraufgabe 1 (Fraktale): Programmierung WS18/19 Übungsblatt 5 (Abgabe Freitag, den um 12:00) Allgemeine Hinweise:

Präsenzübung Datenstrukturen und Algorithmen SS 2014

Tutoraufgabe 1 (Klassenhierarchie):

Tutoraufgabe 1 (Code-Analyse):

Algorithmen und Datenstrukturen

Übung Informatik I - Programmierung - Blatt 8

Abgabe: (vor der Vorlesung) Aufgabe 7.1 (P) Binomial Heap

Anwendungsbeispiel MinHeap

Algorithmen & Datenstrukturen 2 Praktikum 1

Datenstrukturen Teil 2. Bäume. Definition. Definition. Definition. Bäume sind verallgemeinerte Listen. Sie sind weiter spezielle Graphen

Tutoraufgabe 1 (Implementierung eines ADTs):

Übung: Algorithmen und Datenstrukturen SS 2007

Tutoraufgabe 1 (Klassenhierarchien):

Humboldt-Universität zu Berlin Berlin, den Institut für Informatik

Informatik II, SS 2014

a) Fügen Sie die Zahlen 39, 38, 37 und 36 in folgenden (2, 3)-Baum ein:

Tutoraufgabe 1 (Rekursive Datenstrukturen): Programmierung WS17/18 Übungsblatt 6 (Abgabe ) Allgemeine Hinweise:

Sortieren II / HeapSort Heaps

13. Bäume: effektives Suchen und Sortieren

Informatik II Prüfungsvorbereitungskurs

13. Bäume: effektives Suchen und Sortieren

Übung Algorithmen und Datenstrukturen

Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 16. Juli Klausur

2 i. i=0. und beweisen Sie mittels eines geeigneten Verfahrens die Korrektheit der geschlossenen Form.

Klausur zur Vorlesung Algorithmen und Datenstrukturen

Aufgabe 2 (Unendliche Listen in Haskell):

Geordnete Binärbäume

Tutoraufgabe 1 (Überladen und Überschreiben):

Aufgabe 2 (Collections):

Bäume und der Sequence ADT

7. Dynamische Datenstrukturen Bäume. Informatik II für Verkehrsingenieure

Institut für Programmierung und Reaktive Systeme 5. Dezember Programmieren I. 5. Übungsblatt

Übung Informatik I - Programmierung - Blatt 6

Natürliche Bäume. (Algorithmen und Datenstrukturen I) Prof. Dr. Oliver Braun. Letzte Änderung: :16. Natürliche Bäume 1/16

Aufgabe 1 Pseudocode und Analyse /6 Sei A ein zweidimensionales n n Array mit 0 1 Einträgen A[i][j]. In jeder Zeile stehen alle Nullen vor allen Einse

1. Aufgabe (6 Punkte): Java-Programmierung (Arrays)

Probeklausur zur Vorlesung

WS 2003/2004, Zwischenklausur

Tutoraufgabe 1 (Verikation mit Arrays):

Aufbau eines "B-Baums" der Ordnung 3, Teil 1

Tutoraufgabe 1 (Entwerfen von Klassenhierarchien):

Institut für Programmierung und Reaktive Systeme 24. Juni Programmieren II. 14. Übungsblatt

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Informatik Abitur Bayern 2017 / II - Lösung

Tutoraufgabe 1 (Datenstrukturen in Haskell):

Klausur zur Vorlesung Algorithmen und Datenstrukturen

Tutoraufgabe 1 (Suchen in Graphen):

Transkript:

Prof. aa Dr. E. Ábrahám Datenstrukturen und Algorithmen SS Übungsblatt (Abgabe.0.0) F. Corzilius, S. Schupp, T. Ströder Allgemeine Hinweise: Die Hausaufgaben sollen in Gruppen von je bis Studierenden aus der gleichen Kleingruppenübung (Tutorium) bearbeitet werden. Namen und Matrikelnummern der Studierenden sind auf jedes Blatt der Abgabe zu schreiben. Heften bzw. tackern Sie die Blätter! Die Nummer der Übungsgruppe muss links oben auf das erste Blatt der Abgabe geschrieben werden. Notieren Sie die Gruppennummer gut sichtbar, damit wir besser sortieren können. Die Lösungen müssen bis Montag, den.0.0 um :00 Uhr in den entsprechenden Übungskasten eingeworfen werden. Sie finden die Kästen am Eingang Halifaxstr. des Informatikzentrums (Ahornstr. ). Alternativ können Sie die Lösungen auch in Ihrem Tutorium vor der Abgabefrist direkt bei Ihrer Tutorin/Ihrem Tutor abgeben. Wenn Sie in einer Aufgabe einen Algorithmus erstellen müssen, so soll dieser in Pseudo-Code (gerne an Java bzw. C++ orientiert) oder in Java bzw. C++ verfasst werden. Reichen Sie den Algorithmus nur in Maschinenschrift ein, entweder Ihrem Tutor vor dem Abgabedatum per Email oder ausgedruckt an die Lösung geheftet. Einfache Syntaxfehler (z. B. ein fehlendes Semikolon) geben keine Punktabzüge. Inwieweit im Pseudo-Code abstrahiert werden darf, wird in der Aufgabenstellung bekannt gegeben. Ansonsten gilt es, sich möglichst nahe an den Möglichkeiten, die Java bzw. C++ bieten, zu orientieren. Tutoraufgabe ( Bäume): a) Löschen Sie den Wert aus dem folgenden Baum und geben Sie den dabei entstehenden Baum,,, b) Löschen Sie den Wert aus dem folgenden Baum und geben Sie den dabei entstehenden Baum,, c) Löschen Sie den Wert aus dem folgenden Baum und geben Sie den dabei entstehenden Baum, d) Löschen Sie den Wert aus dem folgenden Baum und geben Sie den dabei entstehenden Baum, 0

Datenstrukturen und Algorithmen SS Übungsblatt (Abgabe.0.0) e) Löschen Sie den Wert aus dem folgenden Baum und geben Sie den dabei entstehenden Baum, 0, Aufgabe ( Bäume): ( + + = Punkte) a) Löschen Sie den Wert aus dem folgenden Baum und geben Sie den dabei entstehenden Baum, 0,, b) Löschen Sie den Wert aus dem folgenden Baum und geben Sie den dabei entstehenden Baum, 0,, c) Löschen Sie den Wert aus dem folgenden Baum und geben Sie den dabei entstehenden Baum,,,0, Tutoraufgabe (Rot Schwarz Bäume): a) Fügen Sie die Schlüssel,,,,, und in dieser Reihenfolge in einen initial leeren Rot-Schwarz Baum ein. Geben Sie den Baum direkt nach dem Einfügen sowie nach jeder Rotation an.

Datenstrukturen und Algorithmen SS Übungsblatt (Abgabe.0.0) b) Löschen Sie den Knoten, den die Suche nach dem Schlüssel ausgibt, aus dem folgenden Rot-Schwarz Aufgabe (Rot Schwarz Bäume): (, +, +, +, = Punkte) a) Fügen Sie den Schlüssel in den folgenden Rot-Schwarz Baum ein. Geben Sie den Baum direkt nach dem Einfügen sowie nach jeder Rotation an. b) Fügen Sie den Schlüssel in den folgenden Rot-Schwarz Baum ein. Geben Sie den Baum direkt nach dem Einfügen sowie nach jeder Rotation an. c) Löschen Sie den Knoten, den die Suche nach dem Schlüssel ausgibt, aus dem folgenden Rot-Schwarz d) Löschen Sie den Knoten, den die Suche nach dem Schlüssel ausgibt, aus dem folgenden Rot-Schwarz

Datenstrukturen und Algorithmen SS Übungsblatt (Abgabe.0.0) Aufgabe (Knobeleien): Gegeben sei die Datenstruktur Tree, welche den Datentyp Baum implementieren soll. Ein Objekt vom Typ Tree hat die folgenden Attribute: Tree[] children: Das Array, welches die Kinder des Knotens enthält. int[] keys: Das Array, welches die Schlüssel des Knotens enthält. int filled: Der aktuelle Füllgrad des Knotens. boolean leaf: Gibt an, ob der Knoten ein Blatt ist. Die Folgenden Funktionen sind definiert: Tree(): Konstruktor, welcher einen leeren Knoten erzeugt. (0 Punkte) Tree(Tree[] children, int[] keys): Konstruktor, welcher einen Knoten mit den Kindern in children (in genau der Reihenfolge) und den Schlüsseln keys (in genau der Reihenfolge) erzeugt. Vorbedingung: children.size() = keys.size() + Zusätzlich können Sie folgende Funktionen nutzen: Die Funktion void insertat(element[] array, Element key, int pos) fügt einen Schlüssel key vom Typ Element an der Position pos in das Array array ein. Dabei werden nachfolgende Elemente nach hinten verschoben. Die Funktion int findkeypos(int[] array, int key, int startpos, int endpos) findet in dem Array array die Einfügeposition (Rückgabewert) für den Schlüssel key zwischen den Array Indizes startpos und endpos. a) Implementieren Sie die Funktion boolean split(tree father, int fatherindex), welche einen Split eines Knotens wie aus der Vorlesung durchführt. Sie dürfen dabei davon ausgehen, dass der aktuelle Knoten den maximalen Füllgrad hat. Der Rückgabewert gibt dabei an, ob in der Wurzel (true) oder im Innern des Baumes (false) gesplittet wurde. Implementieren Sie die Funktion so, dass nach einem Split an der Wurzel die neue Wurzel der aktuelle Knoten ist, bei einem Split im innern des Baumes soll der aktuelle Knoten die Wurzel des neuen linken Teilbaums werden. b) Implementieren Sie die Funktion void insert(int key, Tree father, int fatherindex), welche das Einfügen des Schlüssels key in einen Baum Knoten mit dem Vaterknoten father durchführen soll. fatherindex ist dabei die Position des Verweises auf den aktuellen Knoten im children Array des Vaterknotens. Ein Einfügen in den gesamten Baum findet also durch den Aufruf insert(key, null, 0) statt. Sie sollen dabei die Funktion boolean split(tree father, int fatherindex) aus der vorherigen Aufgabe benutzen und wie in der Vorlesung sämtliche Knoten auf dem Weg zum Einfügepunkt splitten. Hinweise:

Datenstrukturen und Algorithmen SS Übungsblatt (Abgabe.0.0) Da bei einem Split innerhalb des Baumes nicht klar ist, welcher Knoten nach dem Split der aktuelle ist, nutzen Sie den Vaterknoten, um rekursiv weiter abzusteigen. Die Parameter father und fatherindex sind lediglich für die Methode boolean split(tree father, int fatherindex) und den Fall eines Splits im innern des Baumes interessant. Beispiel (act sei der aktuelle Knoten): f keys... children...act act keys... children... father = f, fatherindex =