• Keine Ergebnisse gefunden

9. Übungsblatt Aufgabe 1

N/A
N/A
Protected

Academic year: 2022

Aktie "9. Übungsblatt Aufgabe 1"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Algorithmen und Datenstrukturen Hochschule RheinMain

Sommersemester 2014 Prof. Dr. Steffen Reith

9. Übungsblatt

Aufgabe 1 (Bäume)

Zur vollständigen Bearbeitung dieser Aufgabe sind die folgenden Punkte zu be- arbeiten:

• Implementieren Sie einen dynamischen binären (Such)Baum, der beliebig viele Elemente speicher kann. Achten Sie darauf, dass der Nutzdatentyp in Ihrem Quellcode leicht geändert werden kann (Durch geschickte Benutzung des C-Präprozessors kann man sich in C sogar eine einfache Version von Generics/templates nachbauen!). Zu implementieren sind auf jeden Fall die Methoden search (iterativ) insert, PrintTreeInorder, getHeight und isEmpty.

Die Funktion / MethodePrintTreeInordergibt alle Elemente eines Baums gemäß Inorder-Traversierung aus. Testen Sie dies mit dem Nutzdatentypint geeignet.

• Erweitern Sie nun Ihren binären Suchbaum um die Methode mergeInorder, die alle Elemente aus einem zweiten Baum gemäß Inorder-Traversierung in den aktuellen Baum einfügt, d.h. die Methode mergeInorder besucht (Inorder!) alle Knoten des zweiten Baums und fügt sie in den aktuellen Baum ein.

• Schreiben Sie ein Testprogramm mit zweiint-Bäument1undt2, die mit je 100Zufallszahlen befüllt werden, wobei die Zufallszahlen fürt1 aus dem In- tervall[1, . . . ,1000]stammen und die fürt2aus dem Intervall[1001, . . . ,2000]

(wichtig!). Danach soll Ihr Testprogramm die Höhen von t1 und t2 ausge- ben. Nun verschmelzen Sie t1 mit t2 unter Benutzung von mergeInorder und geben die Höhe des verschmolzenen Baums aus.

Wie erklären Sie das Ergebnis der verhältnismäßig großen Höhe des verschmolzenen Baums?

Planen (Pseudocode notwendig!) und implementieren Sie eine mitmerge- Inordervergleichbare Methode, die einen Baum mit (deutlich) kleinerer Höhe liefert (Hinweis: Überlegen Sie sich eine geeignete Traversierungs- strategie für Ihre merge-Methode).

(2)

Aufgabe 2 (Bäume) Zur vollständigen Bearbeitung dieser Aufgabe sind die folgenden Punkte zu be- arbeiten:

• Bis jetzt besteht der interne Knoten-Datentyp Ihrer (Such)Baumimplemen- tierung nur aus einem Nutzdatenfeld, einer Referenz auf den linken Teilbaum und einer Referenz auf den rechten Teilbaum.

Erweitern Sie nun den Knoten-Datentyp um eine Komponentebalancevom Typ long. Die Balance eines Knotens v ist nun wie folgt definiert: Ist v ein Blatt des Baums, so hat er Balance 0. Ist der Knoten v kein Blatt, so berechnet sich die Balance von v wie folgt: balance = Höhe des linken Teilbaums vonv - Höhe des rechten Teilbaums v .

• Erweitern Sie Ihre (Such)Baumimplementierung um die (rekursive) Methode void calculateBalanceAll(). Die Methodevoid calculateBalanceAll() berechnet die Balance aller Knoten des Baums und setzt diebalanceKom- ponente der Knoten auf den entsprechenden Wert. Erweitern Sie Print- TreeInorder, sodass nun auch die Balance der Knoten ausgegeben wird.

(Hinweis: Die Methoden lassen sich durch Modifizierung der aus der Vor- lesung bekannten Traversierungsalgorithmen leicht implementieren.)

Aufgabe 3 (Bäume)

Die Höhe eines Baums ist definiert als die Anzahl der Knoten in einem längsten Pfad von Knoten zu einem Blatt. Damit hat ein Baum der nur aus der Wurzel besteht schon die Höhe 1. Beweisen Sie, dass ein vollständiger trinärer Baum (jeder Knoten der kein Blatt ist hat genau3Kinder) der Höhehgenau(3h1)/2 Knoten enthält.

Hinweis: Wissen über die Geometrische Reihe ist immer nützlich.

Aufgabe 4 (Bäume)

Beweisen Sie mit Hilfe der einer strukturellen Induktion die folgende Aussage für einen binären Baum:

„SeiT ein binärer Baum mitm Kanten undn Knoten, dann gilt fürT die Gleichungm =n−1.“

Hinweis: Die induktive Definition für (binäre) Bäume aus der Vorlesung „Diskrete Strukturen“ hilft Ihnen eineneinfachen Induktionsbeweis zu finden.

Die Abnahme startet in der KW 26 ab dem 26.6.2014 nach der Vorlesung.

Die Termine für die Wirtschaftsinformatik werden wie immer von Herrn Werntges bekannt gegeben.

(3)

Einige (optionale) Übungsaufgaben

• Richtig oder falsch?

Mergesort hat immer eine Laufzeit vonO(nlogn).

Insertion Sort hat immer eine Laufzeit von O(nlogn).

Es gibt Sortierverfahren mit einer Laufzeit vonO(logn).

• Geben Sie die Laufzeit von Insertion Sort an und begründen Sie Ihre Antwort fundiert.

• Gegeben seiT(n) = 3·T(n/3) +nund T(1) = 0. Bestimmen Sie eine Funktionf, so dass T(n) =f(n). Dabei darf T nicht in der Beschreibung vonf vorkommen.

• Kann man in einer linearen Liste effizient mit der binären Suche arbeiten? Be- gründen Sie Ihre Antwort!

Referenzen

ÄHNLICHE DOKUMENTE

Die im Postorder-Scan berechneten Werte werden benutzt, um für den Baum mit Wurzel v einen Linksumriss des rechten und einen Rechtsumriss des linken Teilbaumes zu berechnen:..

Welche Knoten haben einen leeren linken Unterbaum (und gehören somit zum Fall 2).. Welche Knoten haben einen leeren rechten Unterbaum (und gehören somit zum

Sie sind dazu eingeladen die nachfolgenden Aufgaben bereits vor der Übung durchzuschauen, dies ist jedoch kein Muss um an der Übung teilzunehmen?. Das Blatt muss nicht

Die Werte des Sortierfeldes werden direkt im Speicher ( auf dem Stack ) geändert. e) Skizzieren Sie den Stack an der mit Å***** gekennzeichneten Stelle. Gehen Sie dabei von

• Erweitern Sie nun Ihren generischen bin¨ aren Suchbaum um die Methode mergeInorder, die alle Elemente aus einem zweiten Baum gem¨ aß Inorder- Traversierung in den aktuellen Baum

d. Das innere Produkt l¨ asst sich auf Differenzialformen beliebigen Grades erweitern. , x k−1 ) , das heißt man setzt den Vektor v in das erste Argument ein. Wie l¨ asst sich also

(b) Zeigen Sie, dass APPROX-VERTEX-COVER(G) in polynomieller Zeit eine Vertex Cover V berechnet, welches h¨ ochstens doppelt so viele Knoten wie ein optimales VERTEX COVER von G

Relation, gemäß der ein Zeichen mehrere klar voneinander unterscheidbare Bedeutungen hat (zwischen denen aber eine semantische Brücke bestehen muss, sonst muss man