22.11.2014 Aufrufe

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 ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!