Christian Sohler Paderborn, den 13. April 2007 u.v.a.
Ubungen zur Vorlesung ¨
Datenstrukturen und Algorithmen SS 2007
Pr¨asenz¨ubung 3
AUFGABE 7:
Geben Sie den in der Vorlesung behandelten Merge Algorithmus im Pseudocode an. Benutzen Sie dabei die Operationen newArray und deleteArray, um ein neues Array anzulegen oder ein bestehendes Array zu l¨oschen. Ein AufrufnewArray(1,· · · , l) reserviert Speicherplatz f¨ur ein Array der L¨angel. Beachten Sie, dass ein solcher Aufruf eine Laufzeit von Θ(l) ben¨otigt.
Der Aufruf delete(A) gibt den Speicherplatz des Arrays A wieder frei. Ein solcher Aufruf ben¨otigt konstante Zeit. Analysieren Sie die Laufzeit des Merge Algorithmus.
AUFGABE 8:
Seien a1, a2,· · · , an Zahlen, die in einem Array A[1,· · · , n] gespeichert sind. Die folgenden beiden Algorithmen berechnen das kleinste Element in A. Dabei erfolgt der erste Aufruf des Algorithmus Minimum-Divide-&-Conquer mit den Arraygrenzen l = 1 und r = n. Zur Vereinfachung nehmen wir an, dassneine Zweierpotenz ist. Zeigen Sie f¨ur beide Algorithmen die Korrektheit. Analysieren und vergleichen Sie die Laufzeiten der beiden Algorithmen.
Minimum-Divide-&-Conquer(Array A, l, r)
1: if l=r then
2: min←A[l]
3: else
4: minl ←Minimum-Divide-&-Conquer(A, l,r+l2 )
5: minr ← Minimum-Divide-&-Conquer(A,r+l2 + 1, r)
6: if minl ≤minr then
7: min ←minl
8: else
9: min ←minr
10: return min
Minimum-Incremental(Array A)
1: min←A[1]
2: for i←2 to length[A]do
3: if min> A[i] then
4: min ←A[i]
5: return min