Tutoraufgabe 1 (2 3 4 Bäume):

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

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

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Geordnete Binärbäume

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

Informatik II, SS 2014

13. Bäume: effektives Suchen und Sortieren

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Informatik II, SS 2014

Teil 1: Suchen. Ausgeglichene Bäume B-Bäume Digitale Suchbäume. M.O.Franz, Oktober 2007 Algorithmen und Datenstrukturen - Binärbäume 1-1

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

Programmiertechnik II

Algorithmen und Datenstrukturen Suchbaum

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / Vorlesung 10, Donnerstag 8.

Informatik II Vorlesung am D-BAUG der ETH Zürich

Suchen und Sortieren

Algorithmen und Datenstrukturen

Vorlesung Datenstrukturen

Übung zur Vorlesung Algorithmische Geometrie

13. Binäre Suchbäume

Einführung in die Programmierung

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Motivation. Vorlesung 10: Binäre Suchbäume

368 4 Algorithmen und Datenstrukturen

Tutoraufgabe 1 (Sortieren): Lösung: Datenstrukturen und Algorithmen SS14 Lösung - Übung 4

Mehrwegbäume Motivation

Informatik Abitur Bayern 2017 / II - Lösung

Kapitel 12: Induktive

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

Informatik II, SS 2014

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

Informationssysteme SS 2013 Lösungsvorschläge zu Übungsblatt 2. Übungsblatt 2. Für die Übungen in der Woche vom 29. April bis 03.

Binärbäume: Beispiel

Algorithmen und Datenstrukturen Musterlösung 5

11. Elementare Datenstrukturen

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Wiederholung. Bäume sind zyklenfrei. Rekursive Definition: Baum = Wurzelknoten + disjunkte Menge von Kindbäumen.

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Tutoraufgabe 1 (Starke Zusammenhangskomponenten):

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

Informatik II Prüfungsvorbereitungskurs

Übung 4: Die generische Klasse AvlBaum in Java 1

Übung: Algorithmen und Datenstrukturen SS 2007

Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur

Informatik II, SS 2016

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v)

Repetitive Strukturen

Einführung in die Programmierung für NF MI. Übung 04

14. Rot-Schwarz-Bäume

Tutoraufgabe 1 (Listen):

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Heaps. Vorlesung 8: Heapsort (K6) Joost-Pieter Katoen. 7. Mai 2015

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 14

Algorithmen und Datenstrukturen

Einführung in die Informatik 2

Übungen zu Programmierung I - Blatt 8

Praxis der Programmierung

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen 2. Dynamische Datenstrukturen

Tutoraufgabe 1 (Suchen in Graphen):

Aufgaben NF 11; Seite 1

Technische Universität München. Vorlesungsgrobstruktur: wo stehen wir, wie geht s weiter

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 14. Bäume. Bäume 1

Fortgeschrittene Programmiertechnik Klausur WS 2014/15 Angewandte Informatik Bachelor

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit

4.3 Bäume. Definition des Baumes. Bäume sind eine sehr wichtige Datenstruktur der Informatik.

Teil 1: Suchen. Problemstellung Elementare Suchverfahren Hashverfahren Binäre Suchbäume Ausgeglichene Bäume. B-Bäume Digitale Suchbäume Heaps

Vorlesung Datenstrukturen

3.3. Rekursive Datentypen

Datenstruktur Baum und Rekursion Software Entwicklung 1

ContainerDatenstrukturen. Große Übung 4

Wünschenswerte Eigenschaft von Suchbäumen mit n Knoten: Suchen, Einfügen, Löschen auch im schlechtesten Fall O(log n)

// Objekt-Methoden: public void insert(int x) { next = new List(x,next); } public void delete() { if (next!= null) next = next.next; } public String

16. Dezember 2004 Dr. M. Schneider, P. Ziewer

lim log 2n n = > 0 Da es einen Limes gibt, gibt es auch einen Limes inferior, der gleich diesem Limes ist.

Kurs 1663 Datenstrukturen" Musterlösungen zur Klausur vom Seite 1. Musterlösungen zur Hauptklausur Kurs 1663 Datenstrukturen 15.

Algorithmen und Datenstrukturen I AVL-Bäume

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

In diesem Kapitel behandeln wir erste Algorithmen mit dynamischen Strukturen, wie Bäume und Graphen. 1. Bäume Grundlagen...

Verkettete Datenstrukturen: Listen

Bäume. Text. Prof. Dr. Margarita Esponda SS 2012 O4 O5 O6 O ALP2-Vorlesung, M. Esponda

AVL-Bäume Analyse. Theorem Ein AVL-Baum der Höhe h besitzt zwischen F h und 2 h 1 viele Knoten. Definition Wir definieren die nte Fibonaccizahl:

Algorithmen und Datenstrukturen

EINI LogWing/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 17/18

Informatik II, SS 2014

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

9.4 Binäre Suchbäume. Xiaoyi Jiang Informatik II Datenstrukturen und Algorithmen

Kapitel 9 Suchalgorithmen

Wintersemester 2004/ Dezember 2004

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 13. Bäume. Bäume

Rotation. y T 3. Abbildung 3.10: Rotation nach rechts (analog links) Doppelrotation y

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Abgabe: (vor 12 Uhr)

Algorithmen und Datenstrukturen I Bruder-Bäume

Dynamische Mengen. Realisierungen durch Bäume

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

MB2-ALG, SS15 Seite 1 Hauptklausur, geschrieben am

Heute. Nachbetrachtung Wissensüberprüfung. Sortieren Interface Comparable TreeSet Sortieren von Arrays: Arrays.sort() 3.12.

Algorithmen und Datenstrukturen

Tutoraufgabe 1 (Sortieralgorithmus):

3 Dynamische Datenstrukturen

Transkript:

Prof. aa Dr. E. Ábrahám Datenstrukturen und Algorithmen SS Lösung - Übung F. Corzilius, S. Schupp, T. Ströder Tutoraufgabe ( Bäume): a) Löschen Sie den Wert aus dem folgenden Baum und geben Sie den dabei entstehenden Baum an:,,, b) Löschen Sie den Wert aus dem folgenden Baum und geben Sie den dabei entstehenden Baum an:,, c) Löschen Sie den Wert aus dem folgenden Baum und geben Sie den dabei entstehenden Baum an:, d) Löschen Sie den Wert aus dem folgenden Baum und geben Sie den dabei entstehenden Baum an:, 0

Datenstrukturen und Algorithmen SS Lösung - Übung e) Löschen Sie den Wert aus dem folgenden Baum und geben Sie den dabei entstehenden Baum an:, 0, Lösung: a) Schritt : Lösche,, b) Schritt : Lösche, c) Schritt : Lösche, d) Schritt : Lösche, 0 e) Schritt : Lösche,,0,

Aufgabe ( Bäume): Datenstrukturen und Algorithmen SS Lösung - Übung ( + + = Punkte) a) Löschen Sie den Wert aus dem folgenden Baum und geben Sie den dabei entstehenden Baum an:, 0,, b) Löschen Sie den Wert aus dem folgenden Baum und geben Sie den dabei entstehenden Baum an:, 0,, c) Löschen Sie den Wert aus dem folgenden Baum und geben Sie den dabei entstehenden Baum an:,,,0, Lösung: a) Schritt : Lösche, 0, b) Schritt : Lösche,, 0,

Datenstrukturen und Algorithmen SS Lösung - Übung c) Schritt : Lösche,,,,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. b) Löschen Sie den Knoten, den die Suche nach dem Schlüssel ausgibt, aus dem folgenden Rot-Schwarz Baum. Geben Sie den Baum direkt nach dem Löschen sowie nach jeder Rotation an. Lösung: a) füge ein füge ein füge ein Fall : rotiere nach links Fall : umfärben füge ein Fall : umfärben

Datenstrukturen und Algorithmen SS Lösung - Übung Wurzel schwarz färben füge ein Fall : rotiere nach links Fall : umfärben füge ein Fall : umfärben füge ein b) Wir löschen den Knoten mit dem nächst größeren Wert und fügen diesen Wert dann in den zu löschenden Knoten ein.

Datenstrukturen und Algorithmen SS Lösung - Übung Fall : umfärben Fall : rotiere nach rechts ersetze durch rechtes Kind füge in den zu löschenden Knoten ein 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 Baum. Geben Sie den Baum direkt nach dem Löschen sowie nach jeder Rotation an.

Datenstrukturen und Algorithmen SS Lösung - Übung d) Löschen Sie den Knoten, den die Suche nach dem Schlüssel ausgibt, aus dem folgenden Rot-Schwarz Baum. Geben Sie den Baum direkt nach dem Löschen sowie nach jeder Rotation an. Lösung: a) füge ein Fall : rotiere nach links Fall : umfärben b)

Datenstrukturen und Algorithmen SS Lösung - Übung füge ein Fall : rotiere nach rechts Fall : rotiere nach links Fall : umfärben c) Fall : umfärben Fall : rotiere nach rechts Fall : umfärben Fall : rotiere nach links

Datenstrukturen und Algorithmen SS Lösung - Übung Fall : umfärben Fall : rotiere nach rechts ersetze durch rechtes Kind d) Wir löschen den Knoten mit dem nächst größeren Wert und fügen diesen Wert dann in den zu löschenden Knoten ein. ersetze durch rechtes Kind füge in den zu löschenden Knoten ein 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() +

Datenstrukturen und Algorithmen SS Lösung - Übung 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: 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 = Lösung: a) boolean split(tree father, int fatherindex) { Tree right = new Tree(); right.keys[0] = this.keys[]; 0

Datenstrukturen und Algorithmen SS Lösung - Übung right.children[0] = this.children[]; right.children[] = this.children[]; right.filled = ; if (father == null) { // Split an der Wurzel Tree left = new Tree(); left.keys[0] = this.keys[0]; left.children[0] = this.children[0]; left.children[] = this.children[]; left.filled = ; if (this.leaf) { left.leaf = true; right.leaf = true; this.leaf = false; this.keys[0] = this.keys[]; this.children[0] = left; this.children[] = right; this.filled = ; return true; else { // Split im Innern if (this.leaf) { right.leaf = true; this.filled = ; insertat(father.keys, this.keys[], fatherindex); insertat(father.children, right, fatherindex + ); father.filled++; return false; b) void insert(int key, Tree father, int fatherindex) { // Beim Absteigen Knoten splitten if (this.filled == ) { boolean rootsplit = this.split(father, fatherindex); if(rootsplit) { // an der Wurzel gesplittet this.insert(key, null, 0); else { // im innern gesplittet int index = findkeypos(father.keys, key, 0, father.filled - ); father.children[index].insert(key, father, index); int index = findkeypos(this.keys, key, 0, this.filled - ); if (this.leaf) { insertat(this.keys, key, index); this.filled++; else { this.children[index].insert(key, this, index);