• Keine Ergebnisse gefunden

Goethe-Universität Frankfurt am Main 15. Mai 2012 Institut für Informatik

N/A
N/A
Protected

Academic year: 2021

Aktie "Goethe-Universität Frankfurt am Main 15. Mai 2012 Institut für Informatik"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Goethe-Universität Frankfurt am Main 15. Mai 2012 Institut für Informatik

Theorie Komplexer Systeme Dr. Mariano Zelke

Datenstrukturen

Sommersemester 2012

Übungsblatt 3

Abgabe: bis 29. Mai 2012, 8.

15

Uhr (vor der Vorlesung oder in Raum RM 11-15/113)

Bitte achten Sie darauf, dass Sie auf der Abgabe Ihrer Lösung Ihren Namen, Ihre Matri- kelnummer und Ihre Übungsgruppe angeben. Fehlt eine dieser Angaben, müssen Sie mit Punktabzug rechnen. Mehrseitige Abgaben müssen zusammengeheftet werden.

Eine Aufgabe gilt nur dann als bearbeitet, wenn neben der Lösung auch die notwendigen Begrün- dungen angegeben sind – es sei denn, in der Aufgabenstellung steht, dass eine solche Begründung nicht erforderlich ist.

Aufgabe 1: (10 Punkte)

(a) Es sei eine einfach verkettete Liste a der Klasse liste aus der Vorlesung gegeben. Die Elemente von a seien entsprechend ihrer jeweiligen Werte von data der Größe nach auf- steigend in a angeordnet.

Beschreiben Sie einen möglichst effizienten Algorithmus in Pseudocode oder C++, der die Liste a invertiert, so dass eine Liste entsteht, deren Elemente absteigend sortiert sind.

Analysieren Sie die asymptotische Laufzeit Ihres Algorithmus.

(b) Ziel dieser Aufgabe ist die Simulation einer Queue durch eine einfach verkettete Liste.

Dazu sei die Klasse liste2 gegeben, die genauso wie die Klasse liste aus der Vorlesung definiert ist, außer, dass sie zusätzlich eine Funktion movetoend() besitzt, welche den current-Zeiger in Laufzeit O(1) auf das letzte Element der Liste setzt.

Beschreiben Sie, wie sich eine Queue für die Speicherung von ganzen Zahlen durch eine einfach verkettete Liste der Klasse liste2 simulieren lässt. Geben Sie dazu in Pseudocode oder C++ an, wie durch die Operationen der Klasse liste2 eine Implementierung der Queue-Operationen enqueue(x) und dequeue() in Laufzeit O(1) gelingt.

Aufgabe 2: (8 Punkte)

Entwerfen Sie eine Datenstruktur, die ganze Zahlen speichert und die Stack-Operationen pop()

und push(x) unterstützt sowie die Operation findmin(). Jede dieser Operationen soll eine Lauf-

zeit von O(1) haben; die Dauer einer jeden Operation darf also nicht von der Anzahl der schon

in der Datenstruktur gespeicherten Zahlen abhängen. Dabei liefert die Funktion findmin() die

kleinste der gespeicherten Zahlen, verändert aber deren Menge nicht.

(2)

Aufgabe 3: (11 Punkte) (a) Es sei der folgende geordnete Baum B in graphischer Darstellung gegeben:

1

2 3

4 5 6 7

8 9 10 11 12 13

Geben Sie die Reihenfolge an, in der ein Postorder-Durchlauf die Knoten von B besucht.

Geben Sie außerdem die Implementierung von B mittels Vater-Array, Adjazenzliste sowie Kind-Geschwister-Darstellung an. Eine Begründung ist jeweils nicht erforderlich.

(b) Sei T ein geordneter binärer Baum, für den die Besuchsreihenfolge der Knoten in Preorder und Inorder wie folgt bekannt ist:

- Preorder-Reihenfolge: 8, 9, 6, 2, 3, 4, 7, 1, 5 - Inorder-Reihenfolge: 6, 9, 8, 3, 7, 4, 1, 2, 5

Geben Sie T in graphischer Darstellung an, wobei klar erkennbar sein soll, ob es sich bei einem Kind um ein rechtes oder ein linkes Kind handelt. Eine Begründung ist nicht erforderlich.

Aufgabe 4: (13 Punkte)

Es sei ein Baum B mit n Knoten in Kind-Geschwister-Darstellung gegeben.

(a) Geben Sie je einen Algorithmus in C++ oder Pseudocode an, der in Laufzeit O(n) die Werte der Knoten von B in

(i) Postorder ausgibt. (ii) Inorder ausgibt.

Eine Begründung ist jeweils nicht erforderlich.

(b) Geben Sie eine Funktion AnzahlBlätter(Knoten p) in C++ oder Pseudocode an, die auf dem Baum B arbeitet und berechnet, wie viele Blätter im Teilbaum von B mit der Wurzel p existieren. Dabei bezeichnet p den Knoten, der der Funktion beim Start übergeben wird, der Aufruf AnzahlBlätter(wurzel) bestimmt also die Gesamtzahl aller Blätter in B.

Die Funktion soll in einer Laufzeit von O(Anzahl der Knoten in Teilbaum mit Wurzel p)

arbeiten und nicht rekursiv sein.

Referenzen

ÄHNLICHE DOKUMENTE

November 2012 Institut für Informatik.. Theorie komplexer

(b) Finden Sie einen Algorithmus, der bei Eingabe einer Dataloganfrage Q = (P, R) entscheidet, ob Q

Die folgenden Aufgaben behandeln grundlegende Schreibweisen sowie Zusammenhänge, deren Kenntnis wichtig zum Verständnis der Vorlesung ist. Die Aufgaben dieses Blattes werden in

Wenn ja, beschreiben Sie eine solche Strategie und geben Sie in asymptotischer Notation an, wie viele Versuche von Bob bei dieser Strategie nötig sind, um das Geheimnis zu erraten.

Da- bei soll jeder Film einem Knoten in V entsprechen und für a, b ∈ V soll eine gerichtete Kante (a, b) genau dann in E sein, wenn der durch a repräsentierte Film vor dem durch

Für diese Aufgabe ist kein Code gefordert, eine Beschreibung der wesentlichen Schritte des Algorithmus zusammen mit der Begründung der Korrektheit und einer Laufzeitanalyse reichen

Abgaben haben immer vor Beginn der Vorlesung (spätestens 8:14) oder früher direkt bei Herrn Harwath (Raum 112) oder Herrn Bremer (Raum 110) zu erfolgen. Nach Beginn der Vorlesung

Sie bekommen aber auch Punkte für Ihre Lösung, wenn Sie den Beweis nur für eine kleinere Zahl, die hinreichend nah an k(k+1) 2 liegt,