AuD - Algorithmen und Datenstrukturen

Werbung
AuD - Algorithmen und Datenstrukturen
Übungsaufgaben zur Prüfungsvorbereitung
Wintersemester 2015/16
Frank Heitmann ([email protected])
Nachfolgend sind beispielhafte Aufgaben wie sie in der Klausur gestellt werden könnten. Die
Aufgabensammlung dient der Prüfungsvorbereitung, ist aber nicht zwingend vollständig! Es
lohnt sich daher sich z.B. zu überlegen, welche ähnlichen Aufgaben gestellt werden könnten,
noch einmal die Folien und die Aufgabenzettel zu studieren und weitere Aufgaben z.B. aus
dem Buch von Cormen et al. zu bearbeiten.
O-Notation und Laufzeitanalyse
1. Begründen Sie formal, warum folgende Größenabschätzungen gelten bzw. nicht gelten:
(a)
(b)
(c)
(d)
(e)
(f)
4n2 + 12n3 − 50n + 83 ∈ O(n2 )
n · log n ∈ Ω(n2 )
n2 + 5n − 13 ∈ Θ(n2 )
n2 · log n ∈ O(n4 )
n − 5 ∈ o(n)
n2 − 5n ∈ ω(n)
2. Ordnen Sie (ohne Begründung) die folgenden Funktionen nach ihrem Wachstumsgrad
in aufsteigender Reihenfolge, d.h. folgt eine Funktion g(n) einer Funktion f (n), so soll
f (n) ∈ O(g(n)) gelten.
√ 3
1
n, log n, 4, n2 , n 2 , n · log n, n , 2n , 1000
Mit log ist hier der Logarithmus zur Basis 2 gemeint.
3. Beweisen oder widerlegen Sie:
(a) Wenn f (n), g(n) ∈ O(h(n)), dann f (n) + g(n) ∈ O(h(n))
(b) Wenn f (n), g(n) ∈ O(h(n)), dann f (n)/g(n) ∈ O(h(n))
(c) f (n) ∈ O(g(n)) genau dann, wenn g(n) ∈ Ω(f (n))
4. Betrachten Sie folgende Code-Fragmente und geben Sie eine möglichst dichte asymptotische obere Schranke für ihre Laufzeit in Abhängigkeit von N an. Begründen Sie diese.
Alg1()
for i = 0 to N
for j = N downto 1
sum = sum + j
Alg2()
i=1
while i · i < N
sum = sum + 2
i = i+1
1
Alg3()
for i = 1 to N
j =N
while j > 1
sum = sum + j
j = j/2
5. Geben Sie für die folgenden drei Codefragmente eine möglichst genaue obere Schranke
für die Laufzeit an. Für das zweite und dritte Codefragment nehmen Sie an, dass Q eine
Queue ist, die mittels einer einfach verketteten Liste implementiert ist. Q hat zu Beginn
die Länge n. Beim zweiten Codefragment sei ferner A ein Array mit m Elementen.
Alg1()
for i = 1 to n
for j = 0 to 4
for k = j · (n/5) to (j + 1) · (n/5)
print k
Alg2()
for i = 1 to m
Q.enque(A[m])
Alg3()
for i = 1 to n
Q.dequeue()
Rekurrenzgleichungen und Laufzeitanalyse
1. Gegeben sei folgender Algorithmus, der ein Array A als Eingabe erwartet (dessen genaue
Funktionsweise nachfolgend aber nicht wichtig ist):
FUNC(A)
1 if A.länge < 4
2
return 5
3 else
4
x = A.länge/4
5
y = FUNC(A[1 . . x])
6
z = FUNC(A[3 · x + 1 . . A.länge])
7
r=0
8
for i = 1 to A.länge
9
for j = i + 1 to A.länge
10
r = r + A[i] · A[j]
11 return r
Leiten Sie eine Rekurrenzgleichung für die Laufzeit der Methode FUNC in Abhängigkeit
von der Arraygröße n von A ab. Begründen Sie Ihre Gleichung.
2. Sei
(
c,
für n = 1
T (n) :=
n
9 · T ( 3 ) + n, sonst
eine Rekurrenzgleichung (c ist dabei eine Konstante). Bestimmen Sie die Größenordnung
der Funktion T : N → N mittels des Mastertheorems.
2
3. Sei
(
0,
für n = 0
T (n) :=
4 · T (n − 1) + 3, sonst
eine Rekurrenzgleichung. Bestimmen Sie die Größenordnung der Funktion T : N → N
mittels der Substitutionsmethode. Führen Sie an geeigneter Stelle eine induktiven Beweis
zum Beleg ihrer Behauptung.
Intermezzo
Denken Sie sich zu allen bisherigen Aufgabentypen (O-Notation, Rekurrenzgleichungen, Laufzeitanalyse bei iterativen und bei rekursiven Code) je eine eigene Aufgabe aus und geben Sie
diese einem Kommilitonen zum Bearbeiten. Korrigieren Sie im Anschluss den Lösungsvorschlag.
Suchen & Sortieren
1. Geben Sie nacheinander die binären Suchbäume an, die man nach Einfügen der Elemente
10, 13, 11, 7, 12, 1, 9, 8, 14 in dieser Reihenfolge (beginnend mit 4) erhält, wenn man
mit einem leeren Baum startet. Geben Sie dann den Baum ein, den man erhält wenn
man die 10 löscht und zuletzt den Baum, den man erhält wenn man im Anschluss die 7
löscht. Welche Laufzeit hat die Lösch-Operation bei binären Suchbäumen?
2. Gegeben sei folgendes Array
A = [1, 3, 15, 13, 1, 4, 2, 8, 7, 19, 12, 5, 11, 9]
Geben Sie das Array als Baum an, wie bei einem Heap. Wenden Sie dann die Operation
BuildM axHeap auf A an und geben Sie den Baum nach jeder Ausführung der Methode
M axHeapif y an. Welche Laufzeit hat BuildM axHeap?
3. Ist jeder Heap auch ein binärer Suchbaum? Ist jeder binärer Suchbaum auch ein Heap?
Begründen Sie ihre Antwort!
4. Welcher der folgenden Aussagen stimmen Sie zu? Begründen Sie Ihre Antwort!
(a) Es existiert ein vergleichendes Sortierverfahren, dass in Θ(n) arbeitet!
(b) Es existiert ein Sortierverfahren, dass in Θ(n) arbeitet!
(c) QuickSort ist schneller als MergeSort!
5. Wann nennt man ein Sortierverfahren stabil ? Nennen Sie ein Ihnen bekanntes stabiles
Sortierverfahren aus der Vorlesung.
Graphen
1. Beschreiben Sie in groben Zügen das Vorgehen bei einer Breiten- und bei einer Tiefensuche (in einem Graphen). Welche Laufzeit haben diese Verfahren?
2. Gegeben Sei der folgende Graph. Wenden Sie das in der Vorlesung behandelte Verfahren
an, um eine topologische Sortierung zu gewinnen. Notieren Sie die nötigen Werte in oder
an den Knoten. Geben Sie dann auch die gewonnene topologische Sortierung an.
3
a
b
e
c
d
f
3. Beschreiben Sie kurz was strenge Zusammenhangskomponenten sind. Markieren Sie dann
in dem folgenden Graphen die strengen Zusammenhangskomponenten. Bestimmen Sie
im Anschluss mit dem Verfahren aus der Vorlesung die strengen Zusammenhangskomponenten.
a
b
e
c
f
d
g
4. Wozu dient der Algorithmus von Prim? Was ist die Kernidee? Welche Laufzeit hat er?
5. Welche Algorithmen kennen Sie, um kürzeste Pfade zu bestimmen? Was unterscheidet
diese Algorithmen voneinander, worin ähneln sie sich?
4
6. Ermitteln Sie mit dem Algorithmus von Kruskal in dem folgenden Graphen einen minimalen Spannbaum. Machen Sie dabei auch deutlich wann etwas passiert (wann z.B. welcher Teil des Graphen betrachtet wird).
7
A
8
5
3
B
2
C
E
4
3
7
D
G
6
6
I
F
K
2
5
H
1
5
J
5
7. Gegeben sei folgendes Flussnetzwerk G mit Fluss f , Quelle A, Senke F (der Knoten
links unten soll D statt B heißen):
4
A
2
4/4
1/1
B
1/2
B
6
3/3
C
3/6
2/5
E
F
1/1
Bestimmen Sie wie in einer Iteration des Edmonds-Karp-Algorithmus zunächst das Restnetzwerk Gf und zeichnen Sie dieses. Bestimmen Sie dann einen Erweiterungspfad wie
im Algorithmus von Edmonds-Karp, geben Sie diesen an und zeichnen Sie dann erneut
das Flussnetzwerk mit dem nun neuen Fluss.
Intermezzo
Denken Sie sich wieder zu den obigen Aufgabentypen (Suchbäume, Heaps, Topologisches Sortiern, Bestimmung strenger Zusammenhangskomponenten, Anwendung von Kruskals Algorithmus, Anwendung von Dijkstras Algorithmus, Flüsse) je eine eigene Aufgabe aus und geben
Sie diese einem Kommilitonen zum Bearbeiten. Korrigieren Sie im Anschluss den Lösungsvorschlag.
5
Komplexitätstheorie
1. Gegeben sei das folgende Probleme:
Definition “Hamilton-Kreis” HC:
Gegeben:
Gesucht:
Antwort:
Ungerichteter Graph G = (V, E)
Gibt es einen Kreis, in dem jeder Knoten genau einmal
auftritt? („Hamilton-Kreis“)
JA oder NEIN
Zeigen Sie, dass HC in N P liegt.
2. Gegeben sei das folgende Probleme:
Definition “Kreis-Problem” CP :
Gegeben:
Gesucht:
Antwort:
Ungerichteter, kantenbewerteter Graph G = (V, E), eine
Gewichtsfunktion g : E → N und eine Schranke k ∈ N
Gibt es einen einfachen Kreis (einen Kreis der keinen
Kreis als echten Teilgraphen enthält) p in G mit g(p) ≥ k?
JA oder NEIN
Zeigen Sie, dass CP in N P liegt.
3. Sei L ein Problem von dem Sie bereits wissen, dass es N P -schwierig ist. Was ist noch
zu tun, wenn man zeigen will, dass L auch N P -vollständig ist?
4. Beweisen Sie: Sind L1 , L2 ∈ P , so ist auch L1 ∪ L2 ∈ P .
5. Beweisen Sie: Sind L1 , L2 ∈ N P , so ist auch L1 ∩ L2 ∈ N P .
6. Folgt aus coN P 6= N P auch P 6= N P ? (Begründen Sie Ihre Antwort!)
7. Sei G = (V, E) ein ungerichteter Graph. Bei einer k-Färbung von G wird jedem Knoten
v ∈ V eine Farbe c ∈ [k] = {1, 2, . . . , k} zugewiesen. Die Färbung ist korrekt, wenn zwei
benachbarte Knoten nie die gleiche Farbe haben. Formal ist eine k-Färbung dann also
eine Abbildung f : V → [k] und eine korrekte k-Färbung f erfüllt f (x) 6= f (y) für jede
Kante {x, y} ∈ E. Wir definieren folgendes Problem:
k-col = {hGi | G besitzt eine korrekte k-Färbung}
Angenommen Sie wissen, dass 4-col N P -vollständig ist. Zeigen Sie, dass auch 8-col N P vollständig ist.
8. Betrachten Sie das folgende Problem:
Gegeben: Zwei Graphen G1 = (V1 , E1 ) und G2 = (V2 , E2 ).
Frage: Gibt es Teilmengen V ⊆ V1 und E ⊆ E1 derart, dass |V | = |V2 | und |E| = |E2 |
gilt und eine bijektive Abbildung f : V2 → V existiert mit {u, v} ∈ E2 genau dann,
wenn {f (u), f (v)} ∈ E?
(a) Zeigen Sie, dass das Problem in N P liegt, indem Sie einen N P -Algorithmus angeben, der das Problem löst.
6
(b) Beweisen Sie, dass das Problem N P -hart (und damit insgesamt N P -vollständig)
ist, indem Sie eine Reduktion von einem Ihnen bekannten N P -vollständigen Problem angeben.
9. Betrachten Sie noch einmal das obige Hamilton-Kreisproblem HC und das oben ebenfalls
gegebene Kreis-Problem CP . Es ist gegeben, dass HC N P -vollständig ist und dass
CP ∈ N P gilt. Zeigen Sie nun, dass auch CP N P -vollständig ist, indem Sie HC ≤p CP
zeigen, also HC in Polynomialzeit auf CP reduzieren.
Intermezzo
Suchen Sie sich einen Kommilitonen und erklären Sie ihm, was P ist, was N P ist und wann ein
Problem N P -vollständig ist. Stellen Sie ihm die Zusammenhänge zwischen diesen drei Klassen
dar und nennen Sie ihm mehrere Probleme, die in P liegen, mehrere, die in N P liegen, und
mehrere N P -vollständige Probleme.
Algorithmenentwurf
Gegeben ist ein Array A von n sortierten, natürlichen Zahlen und eine weitere natürliche Zahl
x. Entwerfen Sie einen Algorithmus, der true zurück liefert, wenn in A zwei Zahlen a und b
mit x = a + b existieren (und f alse sonst). Ihr Algorithmus soll das Problem in O(n) lösen.
(Beschreiben Sie zunächst Ihre Idee. Geben Sie dann den Algorithmus im Pseudocode an und
begründen Sie zuletzt die Korrektheit ihres Algorithmus und die richtige Laufzeit.)
7
Herunterladen