Sie sind auf Seite 1von 3

Christian-Albrechts-Universität zu Kiel

Institut für Informatik

Marten Maack, Malin Rau, Christoph Daniel Schulze, Sebastian Berndt, Nis Wechselberg, Alexandra Lass

6. Übung zur Vorlesung „Algorithmen und Datenstrukturen“


Serie 4
Abgabe am Dienstag, 08. Mai 2018 - 12:00

Aufgabe 1 - Quicksort 1 Punkte


Geben Sie für alle n ∈ N eine Konstruktionsvorschrift für ein Feld der Länge n an, für welches die
Ausführungszeit von Quicksort maximal wird und beweisen Sie ihre Behauptung.
Hinweis: Benutzen Sie ohne Beweis: Die Laufzeit ist maximal, wenn in jedem (rekursiven) Aufruf
der Betrag der Differenz der Größen der Teilfelder, die aus dem Pivotisierungsschritt hervorgehen,
maximal ist.

Quicksort(A,l,r){
int x,i,j,temp;
if (l < r) then
x = A[l]; i = l+1; j = r;
while (i <= j) do
while(i <= j) && (A[i] <= x) do
i = i+1;
od
while(i <= j) && (A[j] >= x) do
j = j-1;
od
if(i < j) then
temp=A[i]; A[i]= A[j]; A[j]= temp;
fi
od
i = i-1; A[l] = A[i]; A[i] = x;
Quicksort(A,l,i-1);
Quicksort(A,i+1,r);
fi
}

Aufgabe 2 - Rekurrenzgleichungen 2 Punkte


Gegeben seien die folgenden Rekurrenzgleichungen für a, b ∈ N:

1
1. T (0) = a, T (n) = T (n − 1) + b für alle n ∈ N\{0}
2. T (1) = 1, T (n) = T ( n2 ) + n für alle n ∈ N derart, dass es ein k ∈ N\{0} gibt mit n = 2k ,
T (n) = T (2k ) mit k = blog2 (n)c in den restlichen Fällen.
Zeigen Sie, dass in beiden Fällen T (n) ∈ O(n) gilt.

Aufgabe 3 - Ternäre Suche 3 Punkte


Die binäre Suche teilt einen Suchbereich sukzessive in zwei gleichgroße Teile auf. Dieses Verfahren
funktioniert auch, wenn der Suchbereich sukzessive in drei gleichgroße Teile aufgeteilt wird. Dieses
Verfahren heißt ternäre Suche. Ermitteln Sie die Anzahl der Rechenoperationen im folgenden
Algorithmus. Geben Sie anschließend die Gesamtlaufzeit des Algorithmus gemäß der O-Notation an.

search(A,x){
int n = A.length;
int a = 0, b=n;
while(a < b) do
int k1 = (b+2*a)/3;
int k2 = (2*b+a)/3;
if x = A[k1] then
return k1;
else if x = A[k2] then
return k2;
else if x < A[k1] then
b=k1;
else if x < A[k2] then
a=k1+1;
b=k2;
else
a = k2+1;
fi
od
return -1;
}

Hinweis: Stellen Sie eine Rekurrenzgleichung auf und verwenden Sie ohne Beweis, dass für a, b ∈ N>0
und T : N>0 → N>0 mit

a falls n < k
T (n) ≤
b + T (bn/kc) sonst

gilt, dass
T (n) ≤ a + bblogk (n)c
für alle n ∈ N>0 ist.

2
Aufgabe 4 - Dynamische Programmierung 4 Punkte
Gegeben sei eine (n × n)-Matrix A mit positiven ganzzahligen Einträgen (ai,j )1≤i,j≤n . Wir suchen
nun einen Weg von der linken oberen Ecke (1, 1) zur rechten unteren Ecke (n, n), die die Summe der
Einträge der besuchten Elemente minimiert. Hierbei darf man nur von oben nach unten und von
links nach rechts laufen.
Für die Matrix  
15 7 13
6 4 3
 

21 5 8
ist der Weg runter, rechts, rechts, runter der Weg mit minimalen Kosten 15 + 6 + 4 + 3 + 8 = 36.
Entwerfen Sie ein dynamisches Programm, welches die Kosten eines solchen minimalen Weges in Zeit
O(n2 ) findet. Geben Sie dazu eine Berechnungsvorschrift für das dynamische Programm an; erklären
Sie diese kurz; geben Sie an wie die Vorschrift verwendet werden kann um ein entsprechendes
Programm zu entwerfen (in Worten oder Pseudocode); und analysieren Sie die Laufzeit.