Hauptklausur

Werbung
Name:
Klausur-ID:
Vorname:
Matrikelnummer:
Karlsruher Institut für Technologie
Institut für Theoretische Informatik
5. Oktober 2016
Prof. Dennis Hofheinz
Klausur Algorithmen I
Aufgabe 1.
Aufgabe 2.
Aufgabe 3.
Aufgabe 4.
Aufgabe 5.
Kleinaufgaben
Sortieren
Verlosungen
Pfade in Graphen
Minimale Spannbäume
11 Punkte
15 Punkte
11 Punkte
15 Punkte
8 Punkte
Bitte beachten Sie:
• Bringen Sie den Aufkleber mit Ihrem Namen, Ihrer Matrikelnummer und Ihrer Klausur-ID
oben links auf dem Deckblatt an.
• Merken Sie sich Ihre Klausur-ID und schreiben Sie auf alle Blätter der Klausur und Zusatzblätter Ihre Klausur-ID und Ihren Namen.
• Die Klausur enthält 17 Blätter. Die Bearbeitungszeit beträgt 120 Minuten.
• Die durch Übungsblätter gewonnenen Bonuspunkte werden erst nach Erreichen der Bestehensgrenze hinzugezählt. Die Anzahl der Bonuspunkte entscheidet nicht über das Bestehen
der Klausur.
• Als Hilfsmittel ist ein beidseitig handbeschriebenes DIN-A4 Blatt zugelassen.
• Bitte kennzeichnen Sie deutlich, welche Aufgabe gewertet werden soll. Bei mehreren angegebenen Möglichkeiten wird jeweils die schlechteste Alternative gewertet.
Aufgabe
1
2
3
4
5
Summe
max. Punkte
11
15
11
15
8
60
Punkte
Bonuspunkte:
Summe:
Note:
Name:
Klausur Algorithmen I, 5. Oktober 2016
Aufgabe 1. Kleinaufgaben
Klausur-ID:
Blatt 2 von 17
[11 Punkte]
Bearbeiten Sie die folgenden Aufgaben. Begründen Sie Ihre Antworten jeweils kurz. Reine
Ja/Nein-Antworten ohne Begründung geben keine Punkte.
a. Ein Algorithmus besitzt polynomielle Zeitkomplexität, wenn die Laufzeit im Worst Case durch
ein Polynom in der Eingabegröße beschränkt werden kann. Für die meisten Sortieralgorithmen
hat sich eine Zeitkomplexität von O(n log n) ergeben. Offensichtlich ist n log n kein Polynom.
Haben diese Sortieralgorithmen dennoch polynomielle Zeitkomplexität? Begründen Sie Ihre
Antwort kurz.
[1 Punkt]
b. Was ist der Unterschied zwischen Linear Programs (LP) und Integer Linear Programs (ILP)?
Welche von beiden sind im Allgemeinen einfacher zu lösen? Begründen Sie Ihre Antwort kurz.
[1 Punkt]
c. Beweisen oder widerlegen Sie: 2log10 (5n) ∈ O(n).
(weitere Teilaufgaben auf den nächsten Blättern)
[2 Punkte]
Name:
Klausur-ID:
Klausur Algorithmen I, 5. Oktober 2016
Blatt 3 von 17
Fortsetzung von Aufgabe 1
d. Sie möchten Zahlen aus Q+ , die durch Zähler und Nenner repräsentiert vorliegen, sortieren,
und dabei eine Implementierung Ihrer Kollegen möglichst unverändert und ohne weitere Vorberechnungen wiederverwenden. Einer Ihrer Kollegen hat bereits LSD-Radix-Sort implementiert,
ein anderer InsertionSort, und ein dritter QuickSelect. Welche Implementierung wählen Sie, und
warum?
[2 Punkte]
e. Beweisen oder widerlegen Sie: Sei für eine Konstante k > 1
(
1,
falls n = 1
T (n) =
(k − 1)·T (n/k) + k log2 n, sonst.
Dann gilt T (n) ∈ O(n).
(weitere Teilaufgaben auf den nächsten Blättern)
[2 Punkte]
Name:
Klausur-ID:
Klausur Algorithmen I, 5. Oktober 2016
Blatt 4 von 17
Fortsetzung von Aufgabe 1
f. Gegeben sei die Hashfunktion h(x) = 4x + 7 mod 10.
Im Folgenden betrachten wir Hashing mit linearer Suche und Hashing mit doppelt verketteten
Listen. Bei Hashing mit linearer Suche werden am Ende der Tabelle zwei Einträge m1 und m2
angehängt, die als zusätzliche Pufferplätze dienen. Beim Hashing mit verketteten Listen sollen
die Einträge jeweils am Ende der jeweiligen Listen angehängt werden. Die Kästchen, die die
Listeneinträge darstellen, sind nicht eingezeichnet und müssen von Ihnen ergänzt werden.
Fügen Sie die Werte 12, 5, 4, 14, 10, 9 mittels der Hashfunktion h in der angegebenen Reihenfolge
ein. Wenn Sie nicht die vorgedruckten Tabellen benutzen, machen Sie kenntlich, in welcher
Tabelle Sie welches Verfahren verwendet haben. Als Hilfe geben wir Ihnen hier die Hashwerte
der einzufügenden Elemente an:
h(12) = 5,
h(5) = 7,
h(4) = 3,
h(14) = 3,
h(10) = 7,
h(9) = 3.
[2 Punkte]
Hashing mit linearer Suche:
0
1
2
3
4
5
6
7
8
9
m1
m2
Hashing mit verketteten Listen:
0
1
2
3
4
5
6
7
8
9
g. Ausgehend von der im vorigen Aufgabenteil f. angefertigten Tabelle, löschen Sie aus der
Hashtabelle mit linearer Suche den Wert 14. Geben Sie die resultierende Tabelle erneut an.
[1 Punkt]
0
1
2
3
4
5
6
7
8
9
m1
m2
Name:
Klausur-ID:
Klausur Algorithmen I, 5. Oktober 2016
Blatt 5 von 17
Aufgabe 2. Sortieren
[15 Punkte]
Betrachten Sie folgenden Algorithmus, der ein Array A[1...A. length] als Eingabe erhält:
1: Procedure examplesort(A : Array of R)
2:
p=1
3:
while p ≤ A. length do
#:
// Geben Sie den Zustand in dieser Zeile aus.
4:
if p = 1 then
5:
p = p+1
6:
else if A[p] ≥ A[p − 1] then
7:
p = p+1
8:
else
9:
tausche A[p] und A[p − 1]
10:
p = p−1
a. Gegeben sei das Eingabearray A = [2, 1, 4, 5, 3]. Geben Sie A jeweils am Anfang jedes Schleifendurchlaufs wieder (siehe Kommentar im Pseudocode oben), bis der Algorithmus endet.
Machen Sie jeweils die Position p durch Umkreisen der entsprechenden Kästchennummer kenntlich (wie im Beispiel).
Hinweis: Die Anzahl der Kästchen entspricht nicht unbedingt der Anzahl der tatsächlich notwendigen Schleifendurchläufe, lassen Sie gegebenenfalls die überflüssigen Kästchen leer. Falls Sie
einen Fehler machen, streichen Sie die Kästchen deutlich durch und nehmen Sie den nächsten
Block von Kästchen. Tragen Sie in die Überschriften jeweils ein, welche Schleifendurchläufe
Sie in der Zeile bearbeitet haben. Falls Sie keinen Fehler machen also gerade 1. bis 3. Schleifendurchlauf, 4. bis 6. Schleifendurchlauf, 7. bis 9. Schleifendurchlauf und so weiter. [3 Punkte]
1. bis
. Schleifendurchlauf:
1
2
3
4
5
2
1
4
5
3
. bis
1
2
. bis
1
2
. bis
1
2
. bis
1
2
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
1
2
3
4
5
. Schleifendurchlauf:
3
4
5
. Schleifendurchlauf:
3
4
5
. Schleifendurchlauf:
3
4
5
. Schleifendurchlauf:
3
4
5
(weitere Teilaufgaben auf den nächsten Blättern)
Name:
Klausur Algorithmen I, 5. Oktober 2016
Klausur-ID:
Blatt 6 von 17
Fortsetzung von Aufgabe 2
1: Procedure examplesort(A : Array of R)
2:
p=1
3:
while p ≤ A. length do
#:
Invariante:
4:
if p = 1 oder A[p] ≥ A[p − 1] then
5:
p = p+1
6:
else
7:
tausche A[p] und A[p − 1]
8:
p = p−1
b. Geben Sie in Zeile # eine Schleifen-Invariante an, die die Korrektheit des Algorithmus
impliziert. Beweisen Sie die Invariante, d.h. zeigen Sie, dass die Invariante vor und am Anfang
jedes Schleifendurchlaufs gilt.
Wenn Sie mit den Werten von p und A während eines Schleifendurchlaufes argumentieren,
verwenden Sie bitte die Bezeichnungen palt und Aalt für die Werte vor der Veränderung im
Schleifendurchlauf, und pneu bzw. Aneu für die Werte nach der Veränderung.
[4 Punkte]
c. Was müssten Sie weiter zeigen, damit die Korrektheit des Algorithmus folgt?
Hinweis: Der eigentliche Beweis ist hier nicht gefordert.
(weitere Teilaufgaben auf den nächsten Blättern)
[1 Punkt]
Name:
Klausur-ID:
Klausur Algorithmen I, 5. Oktober 2016
Blatt 7 von 17
Fortsetzung von Aufgabe 2
d. Geben Sie eine Funktion f an, so dass die Laufzeit des Algorithmus examplesort auf einer
Eingabe der Länge n in Best Case in Θ( f ) ist. Begründen Sie Ihre Antwort kurz. Geben Sie
außerdem ein Array der Länge 5 an, so dass der Algorithmus mit dieser Eingabe die optimale
Laufzeit erreicht.
[2 Punkte]
e. Geben Sie eine Funktion f an, so dass die Laufzeit des Algorithmus examplesort auf einer
Eingabe der Länge n im Worst Case in Θ( f ) ist. Begründen Sie Ihre Antwort kurz. Geben Sie
außerdem ein Array der Länge 5 an, so dass der Algorithmus mit dieser Eingabe die schlechteste
Laufzeit erreicht.
[2 Punkte]
f. Für welche Art von Eingaben würden Sie Insertionsort zur Sortierung empfehlen und warum?
[1 Punkt]
g. Betrachten Sie die Algorithmen Insertionsort, Mergesort und Quicksort aus der Vorlesung.
Was sind jeweils die Laufzeiten im Best Case und im Worst Case (im O-Kalkül)? [2 Punkte]
Laufzeit:
Best Case
Insertionsort
Mergesort
Quicksort
Worst Case
Name:
Klausur-ID:
Klausur Algorithmen I, 5. Oktober 2016
Blatt 8 von 17
Aufgabe 3. Verlosungen
[11 Punkte]
Sie veranstalten eine Verlosung mit n Teilnehmern. Diese läuft wie folgt ab: Jeder Teilnehmer
(der durch seinen Namen1 identifiziert wird) tippt eine natürliche Zahl in [1, 1000] und teilt
Ihnen diese verdeckt mit. Nachdem dies alle Teilnehmer getan haben, generieren Sie eine
natürliche Zufallszahl z ebenfalls aus [1, 1000]. Insgesamt steht als Preisgeld der Betrag G ∈ N
zur Verfügung. Derjenige Teilnehmer, dessen Zahl am nächsten an z gelegen ist, bekommt 12 G
ausgezahlt. Der Teilnehmer mit der zweitnächsten Zahl bekommt 14 G ausgezahlt, der nächste
1
2
8 G, und so weiter.
Sie dürfen davon ausgehen, dass keine zwei Teilnehmer so tippen, dass sie denselben Abstand
vom von Ihnen gezogenen Wert haben. Außerdem haben keine zwei Teilnehmer denselben
Namen. Es gilt weiterhin G = 2k und k ≥ n.
Hinweis: Die im folgenden gestellten Probleme lassen sich auch asymptotisch schneller als
gefordert lösen. Schnellere Lösungen geben aber keine Bonuspunkte.
a. Sie haben die Tipps von allen Teilnehmern als Paare der Form (Name, Tipp) erhalten:
(Ford, 250), (Cormen, 700), (Karatsuba, 100), (Dijkstra, 500), (Prim, 800)
Sie ziehen z = 500, und es steht der Geldbetrag G = 1024 Euro zur Verfügung. Welche Auszahlung erhalten die Teilnehmer jeweils?
[1 Punkt]
Ford
Cormen
Karatsuba
1 Namen
Dijkstra
Prim
sind Strings, die nur aus Buchstaben eines endlichen Alphabets bestehen und maximal 100 Zeichen
lang sind.
2 Es ist richtig, dass so niemals der gesamte Betrag G ausgezahlt wird. Das sollte Sie nicht weiter stören.
(weitere Teilaufgaben auf den nächsten Blättern)
Name:
Klausur-ID:
Klausur Algorithmen I, 5. Oktober 2016
Blatt 9 von 17
Fortsetzung von Aufgabe 3
b. Entwerfen Sie einen Algorithmus, der nachdem Sie die Zufallszahl z generiert haben, im
Worst Case mit asymptotischer Zeitkomplexität O(n log n) die Auszahlung für jeden Teilnehmer
berechnet, wobei n die Anzahl der Teilnehmer ist. Ihr Algorithmus erhält als Eingabe eine Liste
von Paaren der Form
(Name, Tipp)
und soll eine Liste von Paaren der Form
(Name, Betrag)
ausgeben, wobei Betrag dem Auszahlungsbetrag an den entsprechenden Spieler entspricht. Die
Reihenfolge der ausgegebenen Paare ist unerheblich.
Hinweis: Sie dürfen Algorithmen, die aus der Vorlesung bekannt sind, als implementiert annehmen und für Ihre Lösung verwenden.
[3 Punkte]
c. Begründen Sie, weshalb Ihr Algorithmus aus b. die geforderte Zeitkomplexität erreicht.
[1 Punkt]
(weitere Teilaufgaben auf den nächsten Blättern)
Name:
Klausur-ID:
Klausur Algorithmen I, 5. Oktober 2016
Blatt 10 von 17
Fortsetzung von Aufgabe 3
d. Nun veranstalten Sie nicht eine solche Verlosung, sondern k Verlosungen parallel. Nicht jeder
Teilnehmer nimmt an jeder Verlosung teil, und die Verlosungen sind vollkommen voneinander
unabhängig, d.h. pro Verlosung gibt eine Teilmenge aller Teilnehmer jeweils eine Zahl ab, und
Sie ziehen auch eine Zufallszahl pro Verlosung. Ein Teilnehmer, der an einer Verlosung nicht
teilnimmt, erhält für diese auch keine Auszahlung. Für die i-te Verlosung liegen die Tipps nun
als Liste von Tripeln der Form
(i, Name, Tipp)
vor. Erweitern Sie Ihren Algorithmus so, dass er je die Gesamtauszahlung für jeden Teilnehmer in erwarteter Zeitkomplexität O(kn log n) berechnet.3 Ihr Algorithmus soll schließlich eine
Liste von Paaren der Form
(Name, Gesamtbetrag)
ausgeben, wobei der Gesamtbetrag hier der Summe der Beträge aller Auszahlungen an die
entsprechende Person entspricht. Die Reihenfolge der ausgegebenen Paare ist unerheblich.
Hinweis: Sie dürfen Algorithmen, die aus der Vorlesung bekannt sind, als implementiert annehmen und für Ihre Lösung verwenden.
[4 Punkte]
e. Begründen Sie, weshalb Ihr Algorithmus aus d. die geforderte Zeitkomplexität erreicht.
[2 Punkte]
3 Zur
Erinnerung: n ist die Anzahl der Teilnehmer, k die Anzahl der parallelen Verlosungen.
Name:
Klausur-ID:
Klausur Algorithmen I, 5. Oktober 2016
Blatt 11 von 17
Aufgabe 4. Pfade in Graphen
[15 Punkte]
Gegeben sei der folgende ungewichtete, gerichtete Graph G:
C
A
B
D
E
F
H
G
Weiter sei der folgende Graph G0 gegeben, in dem Vorwärts- (fwd), Rückwärts- (back), Kreuz
(cross) und Baumkanten (tree) eingezeichnet sind:
A
tree
C
cross
B
back
tree
D
fwd
tree
back
back
cross
E
tree
tree
F
G
tree
cross
tree
H
a. Ist der Graph G0 das mögliche Ergebnis einer Tiefensuche auf G? Falls ja, geben Sie den
jeweiligen Startknoten an, und eine mögliche Reihenfolge der Knoten, in der sie zum ersten Mal
vom Suchalgorithmus betrachtet wurden. Falls nein, begründen Sie Ihre Antwort. [2 Punkte]
(weitere Teilaufgaben auf den nächsten Blättern)
Name:
Klausur-ID:
Klausur Algorithmen I, 5. Oktober 2016
Blatt 12 von 17
Fortsetzung von Aufgabe 4
b. Ist der Graph G0 das mögliche Ergebnis einer Breitensuche auf G? Falls ja, geben Sie den
jeweiligen Startknoten an, und eine mögliche Reihenfolge der Knoten, in der sie zum ersten Mal
vom Suchalgorithmus betrachtet wurden. Falls nein, begründen Sie Ihre Antwort. [2 Punkte]
c. Geben Sie die Repräsentation von G als Adjazenzfeld an. Sie können dafür die Vorlage
verwenden.
Zur Erinnerung ist hier noch einmal der Graph abgedruckt:
[2 Punkte]
C
A
B
D
E
F
H
G
Adjazenzfeld:
A
B
C
D
E
F
G
H
1
2
3
4
5
6
7
8
9
10
11
12
13
14
d. Nennen Sie einen Vorteil und einen Nachteil von Adjazenzfeldern gegenüber Adjazenzlisten.
[1 Punkt]
Vorteil von Adjazenzfeldern:
Nachteil von Adjazenzfeldern:
(weitere Teilaufgaben auf den nächsten Blättern)
Name:
Klausur-ID:
Klausur Algorithmen I, 5. Oktober 2016
Blatt 13 von 17
Fortsetzung von Aufgabe 4
e. Es geht nun darum, in einem beliebigen ungewichteten, ungerichteten Graphen G = (V, E)
Pfade zu finden, die aber explizit nicht unbedingt kürzeste Pfade sein müssen. Zusätzlich zum
Graphen G sei in dieser Aufgabe mit l auch die Länge4 des längsten einfachen Pfades in G als
Eingabe gegeben. Ein einfacher Pfad ist ein Pfad, der jeden Knoten maximal einmal enthält.
Ihre Aufgabe ist es, einen Algorithmus zu entwickeln, der für Knotenpaare {u, v} irgendeinen
Pfad zwischen u und v findet. Ihr Algorithmus soll dabei in zwei Phasen vorgehen: In der Vorberechnungsphase darf Ihr Algorithmus (innerhalb der unten gegebenen Zeit- und Platzschranken)
Daten vorberechnen. In dieser Phase ist dem Algorithmus der Graph bekannt, nicht aber die
später folgenden Anfragen. In der auf die Vorberechnungsphase folgenden Anfragephase bekommt Ihr Algorithmus dann eine Reihe von Anfragen, d.h. von Knotenpaaren {u, v}, und muss
(wieder innerhalb der unten gegebenen Schranken) einen Pfad zwischen beiden Knoten finden.
Die Nebenbedingungen für die beiden Phasen lauten:
• In der Vorberechnungsphase darf Ihr Algorithmus maximal O(|V | + |E|) Zeit und maximal O(|V |) zusätzlichen Speicher verwenden. Erinnerung: In dieser Phase sind die Paare
{u, v}, die später angefragt werden, noch nicht bekannt!
• In der Anfragephase muss Ihr Algorithmus dann für jedes angefragte Paar {u, v} in Zeit
O(l) einen einfachen Pfad ausgeben, oder aber ausgeben, dass kein Pfad zwischen u und v
existiert.
Geben Sie einen solchen Algorithmus an.
Hinweis: Sie dürfen Algorithmen, die aus der Vorlesung bekannt sind, als implementiert annehmen und für Ihre Lösung verwenden.
[6 Punkte]
4 Das
heißt die Anzahl der Kanten auf dem Pfad.
(weitere Teilaufgaben auf den nächsten Blättern)
Name:
Klausur Algorithmen I, 5. Oktober 2016
Klausur-ID:
Blatt 14 von 17
Fortsetzung von Aufgabe 4
f. Begründen Sie, warum Ihr Algorithmus aus e. die geforderte Zeitkomplexität erreicht. [2 Punkte]
Name:
Klausur-ID:
Klausur Algorithmen I, 5. Oktober 2016
Blatt 15 von 17
Aufgabe 5. Minimale Spannbäume
[8 Punkte]
a. Berechnen Sie einen minimalen Spannbaum des angegebenen Graphen mit dem Algorithmus
von Jarník-Prim. Geben Sie jeweils die Kanten des minimalen Spannbaumes in der Reihenfolge
an, in der sie der Algorithmus auswählt. Für Knoten V,W geben Sie die verbindende Kante als
{V,W } oder (V,W ) an. Verwenden Sie den Knoten A als Startknoten.
[3 Punkte]
5
A
4
C
2
B
5
6
8
8
9
D
F
7
E
3
7
9
9
1
G
6
8
H
9
Kantenreihenfolge:
b. Nennen und erklären Sie die Eigenschaft, auf der die Korrektheit des Jarník-Prim Algorithmus
beruht.
[1 Punkt]
(weitere Teilaufgaben auf den nächsten Blättern)
Name:
Klausur-ID:
Klausur Algorithmen I, 5. Oktober 2016
Blatt 16 von 17
Fortsetzung von Aufgabe 5
c. Ergänzen Sie im folgenden Graphen ungerichtete Kanten mit positiven Kantengewichten, so
dass ein zusammenhängender Graph entsteht, der genau zwei verschiedene minimale Spannbäume enthält. Geben Sie links den Graphen und rechts jeweils die minimalen Spannbäume an.
Falls Sie einen Fehler machen, können Sie die unteren Vorlagen verwenden. Kennzeichnen Sie
deutlich, welche Lösung die zu wertende ist, indem Sie die andere durchstreichen. [2 Punkte]
Graph:
1. MST:
2. MST:
E
E
E
D
A
D
B
C
A
E
D
A
C
B
B
C
Für Korrekturen:
Graph:
D
A
B
C
1. MST:
2. MST:
E
E
D
A
C
B
D
A
C
B
d. Gegeben sei ein ungerichteter zusammenhängender zyklenfreier Graph G = (V, E) mit positiven Kantengewichten und n = |V | Knoten. Zyklenfrei bedeutet, dass der Graph keinen Zyklus,
also keinen Pfad der Länge > 1 mit gleichem Start- und Endknoten, enthält.
d.1 Wieviele Kanten |E| hat der Graph G in Abhängigkeit von n?
d.2 Ist der minimale Spannbaum von G eindeutig?
Begründen Sie Ihre Antworten jeweils kurz.
[2 Punkte]
Name:
Klausur Algorithmen I, 5. Oktober 2016
Konzeptpapier für Nebenrechnungen.
Klausur-ID:
Blatt 17 von 17
Herunterladen