Klausur zur Programmierung II, SS 2004 Aufgabe 1 2 3 4 5 6 7 8 9 ...
Klausur zur Programmierung II, SS 2004 Aufgabe 1 2 3 4 5 6 7 8 9 ...
Klausur zur Programmierung II, SS 2004 Aufgabe 1 2 3 4 5 6 7 8 9 ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Universität des Saarlandes<br />
FR 6.2 Informatik<br />
Prof. Dr. Hans-Peter Lenhof<br />
Dipl. Inform. Jan Küntzer<br />
Dipl. Inform. Alexander Rurainski<br />
I<br />
<strong>Klausur</strong> <strong>zur</strong> <strong>Programmierung</strong> <strong>II</strong>, <strong>SS</strong> <strong>2004</strong><br />
Hinweise <strong>zur</strong> <strong>Klausur</strong><br />
• Sie haben zum Bearbeiten der <strong>Aufgabe</strong>n zwei Stunden Zeit. Die Punktzahlen der<br />
einzelnen <strong>Aufgabe</strong>n entsprechen der Zeit (in Minuten), die Sie für die Bearbeitung<br />
der <strong>Aufgabe</strong> maximal aufwenden sollten, wenn Sie alle <strong>Aufgabe</strong>n bearbeiten wollen.<br />
• Es können maximal 120 Punkte erreicht werden. Ab 60 Punkten gilt die <strong>Klausur</strong><br />
als bestanden.<br />
• Bitte schreiben Sie auf dieses Deckblatt Ihren Namen, Vornamen, Geburtsdatum<br />
und Matrikelnummer. Unterschreiben Sie diese Angaben und geben Sie dieses Blatt<br />
mit Ihren Lösungen ab. Versehen Sie jeden abgegebenen Papierbogen mit Ihrem<br />
Namen und geben Sie bitte auch Ihr Schmierpapier mit ab.<br />
• Legen Sie Ihren Personalausweis und Studierendenausweis <strong>zur</strong> Kontrolle auf den<br />
Tisch.<br />
• Kreuzen Sie in der Tabelle auf diesem Blatt die von Ihnen bearbeiteten <strong>Aufgabe</strong>n<br />
an.<br />
• Überprüfen Sie, ob Sie einen vollständigen <strong>Klausur</strong>bogen erhalten haben.<br />
Sie müssten 13 Blätter mit 9 <strong>Aufgabe</strong>n bekommen haben.<br />
Name: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .<br />
Vorname: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .<br />
Geburtsdatum: . . . . . . . . . . . . . . . . . . . . . . . . . .<br />
Matrikelnummer: . . . . . . . . . . . . . . . . . . . . . . . .<br />
Unterschrift: . . . . . . . . . . . . . . . . . . . . . . . . . . . . .<br />
<strong>Aufgabe</strong> 1 2 3 4 5 6 7 8 9<br />
bearbeitet<br />
Punkte<br />
∑<br />
Viel Erfolg!
<strong>Aufgabe</strong> 1: Wissenstest (Insgesamt 21 Punkte)<br />
Hinweis: Bei dieser <strong>Aufgabe</strong> müssen Sie Ihre Antworten ausnahmsweise nicht begründen!<br />
(a) Definieren Sie ω(n) (2 Punkte)<br />
(b) Was versteht man beim Hashing unter Quadratic Probing? (3 Punkte)<br />
(c) Was versteht man unter einem AVL-Baum? (3 Punkte)<br />
(d) Welche Eigenschaften definieren einen Rot-Schwarz-Baum? (5 Punkte)<br />
(e) Was versteht man unter einem ungerichteten Euler-Graphen? (3 Punkte)<br />
(f) Beschreiben Sie den Algorithmus <strong>zur</strong> Berechnung der starken Zusammenhangskomponenten,<br />
den Sie in der Vorlesung kennengelernt haben (Sie brauchen hier keinen<br />
Code anzugeben!).(5 Punkte)
<strong>Aufgabe</strong> 2: Programmieraufgabe (20 Punkte)<br />
Erstellen sie eine C++-Templateklasse BinBaum, die einen binären Suchbaum mit<br />
eindeutigen Elementen implementiert, d.h., jedes Element kommt maximal einmal im<br />
Baum vor. Sie dürfen hierfür keine STL-Container verwenden.<br />
(a) Geben Sie dazu (nur) die Klassendeklaration (keine Implementierung) vollständig<br />
an. Die Klasse enthält: Konstruktor, Copykonstruktor, Destruktor, Zuweisungsoperator,<br />
Klassen- oder Strukturdeklaration des Knotentyps, Bestimmung der Elementanzahl,<br />
Suchen eines Elements, Löschen eines Elements und Einfügen eines Elements.<br />
(b) Geben Sie zusätzlich die Implementierung letzterer Methode bool einfuegen(const<br />
T& i) an, welche das Element i in den Baum einfügt, wenn es noch nicht enthalten<br />
ist und true <strong>zur</strong>ückliefert. Ist i im Baum schon enthalten, wird false <strong>zur</strong>ückgeliefert<br />
und nichts getan.
<strong>Aufgabe</strong> 3: Klassendeklaration (15 Punkte)<br />
Erstellen sie eine C++-Templateklasse Bruch für rationale Zahlen (Brüche). Zähler<br />
und Nenner haben intern den Typ T. Geben Sie sowohl die Klassendeklaration als auch<br />
die Implementierung vollständig an. Die Klasse enthält folgende Funktionen/Operatoren:<br />
• operator+ Addition zweier Brüche<br />
• operator/ Division zweier Brüche<br />
• operator= Zuweisungsoperator<br />
Sie dürfen hierfür keine STL-Container verwenden. Die Brüche müssen nicht gekürzt sein<br />
und Sie dürfen davon ausgehen, dass die verwendeten Zahlen den Wertebereich von T bei<br />
keiner Operation verlassen. Geben sie auch einen Konstruktor an, der explizit das Setzen<br />
des Zählers und des Nenners erlaubt.
<strong>Aufgabe</strong> 4: O-Notation (8 Punkte)<br />
Finden Sie eine Anordnung der folgenden Funktionen, so dass gilt ∀i : f i ∈ O(f i+1 ):<br />
i) n<br />
ii) ( √ 2) log 2 (n)<br />
iii) ( 3 2 )n<br />
iv) log 2 (log 2 (n))
<strong>Aufgabe</strong> 5: Rekurrenzgleichungen, Substitutionsmethode (8 Punkte)<br />
Lösen Sie die folgende Rekurrenzgleichung mit Hilfe der Substitutionsmethode, d.h., geben<br />
Sie ein f(n) an mit: T (n) ∈ Θ(f(n)). Beweisen Sie: T (n) ∈ O(f(n)). Zeigen Sie die<br />
Korrektheit Ihrer Lösung durch vollständige Induktion.<br />
T (n) = 4T ( n 5 ) + cn2
<strong>Aufgabe</strong> 6: Master-Theorem (10 Punkte)<br />
Zeigen Sie für jede der folgenden Rekurrenzen, ob das Master-Theorem <strong>zur</strong> Lösung angewandt<br />
werden kann. Bestimmen Sie in den Fällen, in denen sich das Theorem anwenden<br />
lässt, die Lösung der Rekurrenz.<br />
• T (n) = 59T ( n 4 ) + 10n3<br />
• T (n) = 36T ( n 6 ) + n ln(n) + n
<strong>Aufgabe</strong> 7: Las-Vegas-Algorithmus (10 Punkte)<br />
Ein Algorithmus A liefert mit der Wahrscheinlichkeit 1 ein Ergebnis. Liefert er kein Ergebnis<br />
(Wahrscheinlichkeit 1 ), so wird er neu gestartet. Berechnen Sie die erwartete Anzahl<br />
2<br />
2<br />
(Erwartungswert) an Durchläufen von Algorithmus A.<br />
Hinweis: Sie können dabei verwenden, dass gilt:<br />
P ({X = k}) = P ({X ≥ k}) − P ({X ≥ k + 1})
<strong>Aufgabe</strong> 8: Biconnected Component (15 Punkte)<br />
Sei G = (V, E) ein ungerichteter zusammenhängender Graph. Einen Knoten a ∈ V bezeichnet<br />
man als Gelenkpunkt von G, wenn G\{a} nicht zusammenhängend ist. G bezeichnet<br />
man als 2-zusammenhängend, wenn es keinen Gelenkpunkt in G gibt. Eine 2-<br />
Zusammenhangskomponente eines ungerichteten Graphen ist ein maximaler 2-zusammenhängender<br />
Teilgraph.<br />
i) Definiere eine Relation ∼ auf E wie folgt:<br />
e 1 ∼ e 2 ⇔ e 1 = e 2 oder es existiert ein Kreis 1 , der e 1 und e 2 enthält.<br />
Zeigen Sie, dass ∼ eine Äquivalenzrelation, also reflexiv, symmetrisch und transitiv<br />
ist.<br />
ii) Zeigen Sie, dass gilt:<br />
e 1 ∼ e 2 ⇔ e 1 und e 2 gehören <strong>zur</strong> selben 2-Zusammenhangskomponente.<br />
1 Ein Kreis enthält jeden Knoten höchstens einmal.
<strong>Aufgabe</strong> 9: Star Search (13 Punkte)<br />
Gegeben eine Menge A von n Personen. In dieser Menge befindet sich eventuell einen<br />
Star. Ein Star zeichnet sich dadurch aus, dass alle anderen in der Menge ihn kennen, er<br />
aber keinen aus der Menge kennt.<br />
Finden Sie heraus, ob es in der Menge A einen Star gibt oder nicht. Hierzu dürfen Sie<br />
Fragen der folgenden Form stellen: ”<br />
Person X, kennen Sie Person Y?“. Nur Fragen dieser<br />
Form sind erlaubt. Jede Frage wird wahrheitsgemäß beantwortet.<br />
Geben Sie eine Methode an, die nur Θ(n) Fragen benötigt, um zu testen, ob es einen Star<br />
gibt und um diesen gegebenenfalls zu identifizieren. Begründen Sie Ihre Antwort.<br />
Hinweis: Die Brute-force Methode stellt jeder Person (n − 1) Frage, womit Sie im worstcase<br />
n(n − 1) Fragen stellen müssten.
Für Ihre Zwischenrechnungen
Für Ihre Zwischenrechnungen
Für Ihre Zwischenrechnungen