Sie sind auf Seite 1von 4

Prof. Peter Kling Theory of Version: 13.

Februar 2023
Efficient
Algorithms

Algorithmen und Datenstrukturen


Klausur, 1. Termin, WS 2022/23

Die Klausur besteht aus 7 Aufgaben. Es sind 100 Punkte erreichbar. Sie bestehen die
Klausur, wenn Sie mindestens 50 Punkte erzielen. Die Bearbeitungszeit beträgt 2 Stunden.
Schreiben Sie Ihre Lösungen sauber und leserlich in die ausgegebenen Klausurhefte.
Beginnen Sie jede Aufgabe auf einer eigenen Seite. Verwenden Sie einen gut lesbaren Stift
(kein Bleistift/Rotstift). Machen Sie deutlich, zu welcher Aufgabe eine Lösung gehört.
Bei Abgabe mehrerer Lösungen zu einer Aufgabe gilt diese als nicht gelöst.
Sie dürfen ein von Ihnen doppelseitig, handschriftlich und einfarbig beschriebenes DIN
A4-Blatt nutzen. Weitere Unterlagen und Hilfsmittel sind nicht erlaubt.

Aufgabe 1
/
(a) Betrachten Sie die folgenden Algorithmen in ihrer aus der Vorlesung bekannten 15 P.
Implementierung. Wählen Sie jeweils geeignete Parameter zur Beschreibung der
Eingabegröße und nutzen Sie diese um eine möglichst gute obere Schranke an die
asymptotische Laufzeitkomplexität (worst-case) anzugeben. (6 Punkte)
Beispiel. Prim: n Anzahl Knoten, m Anzahl Kanten → Laufzeit O(log2 (n)·(n+m)).

(i) QuickSort, (iii) Dijkstra (Single-source Shortest Path),

(ii) CountingSort, (iv) FloydWarshall (All-pairs Shortest Path).

(b) Wann ist ein Sortieralgorithmus stabil? Nennen Sie einen stabilen Sortieralgorithmus
aus der Vorlesung. (3 Punkte)

(c) Wie wurden die folgenden Begriffe in der Vorlesung definiert? (6 Punkte)

(i) polynomialzeit-berechenbar (ii) polynomialzeit-verifizierbar

Aufgabe 2
/
Das Array A = 2 3 4 9 6 5 soll mit Hilfe des in der Vorlesung vorgestellten 12 P.
HeapSort Algorithmus aufsteigend sortiert werden. Zur Erinnerung finden Sie Teile des
Pseudocodes in Algorithmen 1 und 2. Geben Sie den Inhalt des Arrays A direkt nach
Zeile 1 in Algorithmus 1 sowie nach jedem Durchlauf von Zeile 3 in Algorithmus 1 an.

1
Algorithmus 1: HeapSort(A) Algorithmus 2: BuildHeap(A)
1 BuildHeap(A) 1 n ← length(A)
2 for i ← length(A) downto 2 2 for i ← bn/2c downto 1
3 A[i] ← DeleteMax(A) 3 HeapifyDown(A, i)

Aufgabe 3
/
(a) Ordnen Sie die folgenden Funktionen aufsteigend gemäß ihres asymptotischen 15 P.
Wachstums (es ist keine Begründung erforderlich): (5 Punkte)
√ √
n5 , n, n1/3 , n!, 1/100, 2n , n, log3 (n), n/ log2 (n), 16log2 (n) .

(b) Berechnen Sie für die folgenden Funktionen scharfe Schranken in möglichst einfacher
Darstellung der O- und Ω-Notation. Ihr Rechenweg muss nachvollziehbar sein. Sie
dürfen auf die aus der Vorlesung bekannten Eigenschaften der O- und Ω-Notation
zurückgreifen. (5 Punkte)

(i) f (n) = 42 log2 (n) + 23 n + n1/16 und
(ii) g(n) = n3+cos(n·π/2) .

(c) Beweisen oder widerlegen Sie: Für zwei nicht-negative Funktionen f1 , f2 : N → R≥0
gilt immer f1 (n) = O(f2 (n)) oder f1 (n) = Ω(f2 (n)). (5 Punkte)

Aufgabe 4
/
(a) Geben Sie eine Funktion f an, so dass auf die Rekursion 12 P.

4 · T (n/2) + f (n) , für n > 1


(
T (n) = (1)
1 , sonst.

keiner der drei Fälle des Master-Theorems angewendet werden kann. Begründen
Sie Ihre Antwort! (6 Punkte)

(b) Lösen Sie die folgende Rekursion mit Hilfe des Mastertheorems: (6 Punkte)

3 · T (n/9) + n , für n > 1


(
T (n) = (2)
1 , sonst.

2
Aufgabe 5
/
Betrachten Sie Algorithmus 3. 20 P.
(a) Geben Sie den Rückgabewert des Aufrufs Algorithmus 3: WhoAmI(a, b)
WhoAmI(1, 6) sowie den Inhalt der Varia- 1 n←0
blen a, b, n und m am Ende des Algorith- 2 for i ← a to b:
mus an. (5 Punkte) 3 n←n+i
4 if a mod 2 = 1: a ← a + 1
(b) Was berechnet Algorithmus 3 für die Ein-
5 if b mod 2 = 1: b ← b − 1
gabe a, b ∈ N mit a < b? Begründen Sie
6 m ← 0; i ← a
Ihre Antwort. (5 Punkte)
7 while i ≤ b:
(c) Analysieren Sie die Laufzeit des Algorith- 8 m←m+i
mus in Abhängigkeit der Eingaben a, b ∈ N 9 i←i+2
mit a < b und begründen Sie Ihre Antwort. 10 return n − m
(5 Punkte)

(d) Formulieren Sie eine sinnvolle Invariante für den Wert der Variable m zu Beginn
eines Durchlaufs der While-Schleife mit dem Zählerwert i. (5 Punkte)
Bemerkung. Die Invariante muss geeignet sein, die Korrektheit von Algorithmus 3 zu
zeigen. Sie müssen die Korrektheit der Invariante/des Algorithmus nicht beweisen.

Aufgabe 6
/
Sei G = (V, E) ein kantengewichteter, ungerichteter Graph und sei A ⊆ E eine Teilmenge 10 P.
der Kanten eines minimalen Spannbaums (MST) von G. Weiter sei (C, V \ C) ein mit A
verträglicher Schnitt und e = { u, v } ∈ E eine leichte Kante die (C, V \ C) kreuzt.
Beweisen Sie: A ∪ { e } ist auch Teilmenge der Kanten eines MST von G.

Aufgabe 7
/
Sie haben ein sehr langes, sehr schmales Rasenstück der Länge ` ∈ N zu bewässern. Entlang 16 P.
des Rasenstücks sind n ∈ N Rasensprenger an den Positionen 0 ≤ p1 < p2 < · · · < pn ≤ `
platziert. Der Rasensprenger an Position pi hat Reichweite ri ≥ 0 in beide Richtungen
entlang der langen Kante, so dass er den Rasen von Position pi − ri bis Position pi + ri
(auf der gesamten Breite) bewässert. Wenn alle Rasensprenger eingeschaltet sind, wird
der gesamte Rasen (von Position 0 bis Position `) bewässert.
Ihre Aufgabe ist es, so wenig Rasensprenger wie möglich einzuschalten, damit der
gesamte Rasen bewässert wird. Die Positionen und Reichweiten der n Rasensprenger sind
als ganzzahlige Arrays P = hp1 , p2 , . . . , pn i und R = hr1 , r2 , . . . , rn i gegeben.

(a) Betrachten Sie die Eingabe für ein Rasenstück der Länge ` = 7 mit n = 3 Ra-
sensprengern an den Positionen P = h1, 3, 6i und den zugehörigen Reichweiten
R = h4, 2, 2i. Welche Rasensprenger müssen Sie anschalten um den gesamten Rasen
mit möglichst wenigen Rasensprengern zu bewässern? (4 Punkte)

3
(b) Betrachten Sie die folgende gierige algorithmische Idee: Schalte zunächst alle Rasen-
sprenger aus. Schalte dann der Reihe nach die Rasensprenger ein, die die insgesamt
bewässerte Rasenfläche am meisten vergrößern, bis die gesamte Rasenfläche bewäs-
sert ist. Zeigen Sie, dass diese Strategie nicht optimal ist. (5 Punkte)

(c) Entwerfen Sie einen Algorithmus, der mittels dynamischer Programmierung für
die Eingaben `, P und R die minimale Anzahl an notwendigen Rasensprengern in
Zeit O(n · `) zurückgibt (n = length(P )). Geben Sie dazu zunächst eine geeignete
mathematische Rekursionsgleichung an und entwickeln Sie darauf aufbauenden
einen iterativen Algorithmus in Pseudocode. (7 Punkte)
Bemerkung. Ein möglicher Ansatz für die Rekursion: Unterscheiden Sie die beiden
Fälle, ob die optimale Lösung den letzten Rasensprenger einschaltet oder nicht.

Das könnte Ihnen auch gefallen