Sommersemester 2016 Modulprüfung ” Algorithmik“ 31.08.2016 11

Werbung
Sommersemester 2016
Modulprüfung Algorithmik“
”
31.08.2016 11:00 - 12:30
Name:
Matrikelnummer:
Studiengang, Abschluss:
Zugelassene Hilfsmittel: Keine.
Bearbeitungszeit: 90 Minuten
Hinweise:
• Bearbeiten Sie von den folgenden Aufgaben so viele wie möglich. Dabei können Sie insgesamt 60 Punkte erreichen. Bei 30 oder mehr Punkten gilt die Prüfung als bestanden.
• Beschriften Sie alle abzugebenden Blätter mit Ihrem Namen und Ihrer Matrikelnummer.
Bei fest zusammengehefteten Blättern genügt es, das oberste Blatt zu beschriften.
• Überprüfen Sie die Aufgabenblätter auf Vollständigkeit (ein Deckblatt, gefolgt von sieben
bedruckten Seiten mit Aufgaben, gefolgt von einem leeren Blatt).
Nur vom Korrektor auszufüllen:
Aufgabe
1
Punkte
Note:
Bemerkungen:
2
3
4
5
6
Summe
Aufgabe 1
(2+5+3 = 10 Punkte)
a) Geben eine geschlossene Formel für die Lösung der folgenden Rekursionsgleichung an.
T (0) = 0 und T (n) = T (n − 1) + 2n − 1 für n ≥ 1
T (n) =
b) Lösen Sie die folgenden Rekursionsgleichungen unter Verwendung des Mastertheorems.
√
f (n) = 4f (n/2) + 4n n + n2 ∈ Θ
g(n) = 16g(n/8) + 7n − log n
∈Θ
c) Tragen Sie die Landau-Symbole o, ω oder Θ so in die Kästchen ein, dass wahre Aussagen
entstehen.
4n ∈
(2n )
n log(n!) ∈
√
( n5 )
tow(n) ∈
(An (2))
Hierbei sei tow : N → N definiert durch tow(0) = 1 und tow(n) = 2tow(n−1) für alle n ≥ 1.
Die Ackermannfunktion An sei wie in der Vorlesung definiert durch
A0 (r) = r + 1 und
Ak+1 (r) = Ak (Ak (· · · Ak (r)))
{z
}
|
r mal
für alle k, r ∈ N.
Aufgabe 2
(3+4+3 = 10 Punkte)
Betrachten Sie den folgenden Algorithmus, der auf Eingabe zweier gleichlanger Wörter über
einem binären Alphabet bestimmt, ob diese an jeder Position übereinstimmen. Die Eingabelänge
einer Eingabe (a1 a2 · · · an , b1 b2 · · · bn ) sei n. Die Laufzeit des Algorihmus sei die Anzahl der
Eintritte in die Funktion wordcmp.
Algorithmus 1 Test auf Gleichheit von Wörtern
Eingabe: Zwei Wörter a1 a2 · · · an und b1 b2 · · · bn mit ai , bi ∈ {0, 1} für alle i ∈ {1, . . . , n}
1: function wordcmp(a1 a2 · · · an , b1 b2 · · · bn )
2:
if n = 0 then
3:
return true
4:
else if a1 6= b1 then
5:
return false
6:
end if
7:
return wordcmp(a2 a3 · · · an , b2 b3 · · · bn )
8: end function
a) Bestimmen Sie die Worst-Case-Laufzeit des Algorithmus in Abhängigkeit von n (exakt,
nicht in Landau-Notation). Geben Sie den vollständigen Rechenweg an.
b) Zeigen
Für alle q ∈ R mit 0 ≤ q < 1 gilt
PSie:
n
men i=0 iq i ist nach oben beschränkt).
P∞
i=0
iq i < ∞ (d.h. die Folge der Partialsum-
c) Bestimmen Sie die mittlere Laufzeit des Algorithmus in Θ-Notation. Die Buchstaben der
Eingaben seien hierbei zufällig gleichverteilt über {0, 1} und paarweise unabhängig. Geben
Sie den vollständigen Rechenweg an.
Aufgabe 3
(10 Punkte)
Gegeben sei der folgende kantengewichtete Graph mit Startknoten A:
B
6
A
E
8
4
7
9
D
5
G
6
1
9
3
C
6
F
Führt man auf dieser Instanz den Algorithmus von Prim aus, so wird zunächst die Kante mit
Gewicht 3 in den Spannbaum aufgenommen. Diese ist die eindeutige Kante mit minimalem
Gewicht, die einen neuen Knoten mit dem aktuellen Spannbaum verbindet. Auch in allen nachfolgenden Runden gibt es in keinem Schritt zwei verschiedene Kanten mit (demselben) minimalen
Gewicht, die jeweils einen neuen Knoten mit dem aktuellen Spannbaum verbinden.
Zeigen Sie jetzt allgemein (für einen beliebigen Graphen und einen beliebigen Startknoten):
Ist bei Prims Algorithmus die Wahl einer Kante, die einen neuen Knoten mit dem aktuellen
Spannbaum verbindet und dabei minimales Gewicht hat, in jedem Schritt eindeutig, so gibt es
in der Eingabe genau einen minimalen Spannbaum.
Aufgabe 4
(5+5 = 10 Punkte)
Betrachten Sie einen Fibonacci-Heap in der folgenden Ausgangssituation:
1
2
5
3
6
4
7
8
9
10
Die Knoten entsprechen den Elementen im Heap und Knotenbeschriftungen den zugehörigen
Schlüsselwerten. Eine Kante (v, w) bedeutet “v ist ein Kind von w”. Knoten ohne ausgehende
Kanten sind Wurzeln. Knoten mit Marken werden durch einen doppelten Kreis repräsentiert.
a) Führen Sie die Operation decrease key(7, 0) ausgehend von der oben dargestellten Situation aus. Der Schlüsselwert des mit 7 beschrifteten Knotens soll dabei auf den Wert 0
reduziert werden. Zeichnen Sie die entstehende Struktur nach der Anwendung der Operation unter Verwendung der oben beschriebenen Konventionen für die Darstellung.
b) Führen Sie die Operation delete min ausgehend von der oben dargestellten Situation
(nicht ausgehend vom Zwischenergebnis aus der vorigen Teilaufgabe) aus. Zeichnen Sie
die entstehende Struktur nach der Anwendung der Operation unter Verwendung der oben
beschriebenen Konventionen für die Darstellung.
Aufgabe 5
(10 Punkte)
In dieser Aufgabe soll das folgende Optimierungsproblem betrachtet werden:
Die Eingabe besteht aus einer Menge von offenen Intervallen I = { (`i , ri ) | 1 ≤ i ≤ n } mit
`i < ri für alle i ∈ {1, . . . , n} und aus Gewichten g1 , . . . , gn ∈ N.
Eine Menge S ⊆ {1, . . . n} heißt konfliktfrei, falls für alle i, j ∈ S mit i 6=
Pj entweder ri ≤ `j
oder rj ≤ `i gilt. Das Gewicht g(S) einer solchen Menge S ⊆ {1, . . . n} ist i∈S gi . Gesucht ist
das maximale Gewicht G aller konfliktfreien Mengen, d.h. der Wert
G = max{ g(S) | S ⊆ {1, . . . , n}, S ist konfliktfrei }.
Entwerfen Sie mithilfe der Technik des dynamischen Programmierens einen Polynomialzeitalgorithmus, der G berechnet. Volle Punktzahl erhalten Sie nur, wenn die Laufzeit Ihres Algorithmus
in O(n log n) liegt.
Hinweis: Es könnte hilfreich sein, die Intervalle zunächst nach den rechten Grenzen ri zu sortieren. Sie dürfen hierzu einen aus der Vorlesung bekannten Algorithmus verwenden; es ist nicht
notwendig, diesen nochmals explizit in Form von Pseudocode aufzuschreiben.
Aufgabe 6
(10 Punkte)
Sind die folgenden Aussagen wahr oder falsch? Jede korrekte Antwort gibt einen Punkt. Für
unbearbeitete, falsche oder nicht klar gekennzeichnete Zeilen gibt es keinen Punkt.
Seien S, T, U feste Mengen mit S ⊆ U und |T | = |S|2 . Sei H eine
universelle Familie von Hashfunktionen von U nach T . Dann ist mehr
als die Hälfte der Hashfunktionen aus H injektiv auf S.
Sei T ein beliebiger Baum mit einem ausgezeichneten Wurzelknoten.
Sei B die Menge der
von T und für i ∈ B sei ti die Tiefe von
P Blätter
−ti
Blatt i. Dann ist i∈B 2 ≤ 1.
Es existiert ein Linearzeit-Algorithmus, der auf Eingabe eines Feldes
mit n Elementen und einer Zahl k ∈ {1, . . . , n} die k kleinsten
Elemente des Feldes ausgibt.
wahr falsch
wahr falsch
wahr falsch
Es existiert ein vergleichsbasierter Sortieralgorithmus mit einer
sublinearen Best-Case-Laufzeit und einer quadratischen
Worst-Case-Laufzeit.
wahr falsch
Die mittleren Laufzeiten von HeapSort und QuickSort liegen in
Θ(n log n).
wahr falsch
Die Laufzeit des Dijkstra-Algorithmus liegt bei Verwendung eines
Min-Heaps in O(n2 log n), wobei n die Anzahl der Knoten ist.
wahr falsch
Der Warshall-Algorithmus berechnet die transitive Hülle eines
Graphen.
wahr falsch
Es ist kein subkubischer Algorithmus zur Multiplikation von
booleschen Matrizen bekannt.
wahr falsch
Für alle n ∈ N existiert eine Sequenz von Union-Find-Operationen (auf
einer Union-Find-Datenstruktur mit Pfadverkürzung), die einen Baum
der Höhe n mit n + 1 Knoten erzeugt.
wahr falsch
Durch Iteration des Algorithmus von Karger und Stein können alle
minimalen Schnitte eines Graphen bestimmt werden; die
Worst-Case-Laufzeit dieser Iteration liegt in O(n2 log3 n).
wahr falsch
Herunterladen