¨Ubungen zur Vorlesung Datenstrukturen und Algorithmen SS 2007

Werbung
Christian Sohler
u.v.a.
Paderborn, den 11. April 2007
Abgabe 23. April 2007
Übungen zur Vorlesung
Datenstrukturen und Algorithmen
SS 2007
Blatt 1
AUFGABE 1:
Wir betrachten zwei Algorithmen A und B, die dasselbe Problem lösen. Algorithmus A
benötigt bei einer Eingabe der Größe n genau 2n2 Basisoperationen. Algorithmus B benötigt
bei Eingabegröße n genau 50n log n Basisoperationen. Weiter betrachten wir zwei unterschiedlich schnelle Computer C1 und C2 . Dabei ist C1 ein neuer Supercomputer, der in der Lage
ist, jede Sekunde 1016 Basisoperationen durchzuführen, während Computer C2 ein einfacher
Pentium mit nur 6 · 109 Basisoperationen pro Sekunde ist.
a) Wie lange braucht man mit Algorithmus A auf Supercomputer C1 , bzw. mit Algorithmus B auf dem PC C2 , um ein Problem der Größe 1013 zu lösen?
b) Für welche Problemgrößen ist Algorithmus A schneller und für welche ist Algorithmus
B schneller, wenn beide Algorithmen auf dem gleichen Computer laufen?
AUFGABE 2:
Seien a = (a1 , a2 , · · · , an ) und b = (b1 , b2 , · · · , bn ) zwei binäre Zahlen bestehend aus jeweils
n Bits. Wir betrachten das Problem, die Summe der beiden Zahlen zu berechnen. Dazu
sei a in einem Array A[1, · · · , n] (A[i] enthält ai ) und b in einem Array B[1, · · · , n] (B[i]
enthält bi ) abgespeichert. Die Summe der beiden Zahlen soll in binärer Form in einem Array
C[1, · · · , n + 1] abgespeichert werden.
a) Beschreiben Sie einen Algorithmus im Pseudocode, der dieses Problem löst.
b) Zeigen Sie, dass der Algorithmus korrekt ist. Finden Sie dazu eine geeignete Schleifeninvariante.
c) Welche Worst-Case Laufzeit hat der Algorithmus?
AUFGABE 3:
Gegeben seien
a0 , a1 , · · · , an−1 und eine reelle Zahl x. Berechnet werden soll
Pn−1n Koeffizienten
i
der Wert i=0 ai x .
a) Beschreiben Sie einen einfachen Algorithmus im Pseudocode, der dieses Problem in
einer Laufzeit von Θ(n2 ) löst.
b) Beschreiben Sie einen Algorithmus im Pseudocode mit Laufzeit Θ(n), der die folgende
Methode (genannt Horner-Schema) zur Umschreibung eines Polynoms benutzt:
n−1
X
ai xi = (· · · (an−1 x + an−2 )x + · · · + a1 )x + a0 .
i=0
AUFGABE 4:
Wir betrachten den Bubble-Sort Algorithmus. Seien a1 , a2 , · · · , an n Zahlen, die in einem
Array A[1, · · · , n] gespeichert sind (A[i] enthält ai ). Ein elementarer Schritt im Bubble-Sort
Algorithmus ist der sogenannte Compare-Exchange Schritt (C/E). Für 1 ≤ i < j ≤ n hat
C/E(i, j) die Wirkung: Falls A[i] > A[j], dann vertausche A[i] und A[j].“
”
Wir nennen das Auftreten von A[i] > A[j] mit 1 ≤ i < j ≤ n eine Inversion. Um ein sortiertes Array A[1, · · · , n] zu erhalten, müssen alle Inversionen beseitigt werden. Dazu führt
der Bubble-Sort Algorithmus C/E(i, i+1) Schritte, also Compare-Exchange Operationen auf
benachbarten Array-Positionen, aus und zwar in der Reihenfolge:
Runde 1:
Runde 2:
Runde 3:
(1, 2),
(1, 2),
(1, 2),
(2, 3),
(2, 3),
(2, 3),
Runde n − 2:
Runde n − 1:
(1, 2),
(1, 2)
(2, 3),
···
···
···
..
.
(n − 3, n − 2),
(n − 3, n − 2),
(n − 3, n − 2)
(n − 2, n − 1),
(n − 2, n − 1)
(n − 1, n)
Es wird nun folgende Modifikation des Bubble-Sort Algorithmus vorgenommen: Falls in Runde i die letzte vorgenommene Vertauschung (n − j, n − j + 1) war mit j > i, dann werden die
Runden i + 1, · · · , j übersprungen, und erst mit Runde j + 1 weitergemacht.
a) Geben Sie den Bubble-Sort Algorithmus ohne Modifikation im Pseudocode an und
bestimmen Sie dessen Laufzeit.
b) Geben Sie den modifizierten Bubble-Sort Algorithmus im Pseudocode an.
c) Wie sieht eine Eingabe aus, so dass die Laufzeit des Bubble-Sort Algorithmus ohne
Modifikation am kürzesten ist? (Eine solche Eingabe wird als Best-Case Eingabe bezeichnet.) Wie sieht eine Best-Case Eingabe des modifizierten Algorithmus aus?
d) Analysieren Sie die Laufzeit des Algorithmus ohne Modifikation und des modifizierten
Algorithmus im Best-Case.
e) Wie sieht eine Worst-Case Eingabe des Algorithmus ohne Modifikation aus? Wie sieht
eine Worst-Case Eingabe des modifizierten Algorithmus aus?
f) Analysieren Sie die Laufzeit des Algorithmus ohne Modifikation und des modifizierten
Algorithmus im Worst-Case.
g) Beweisen Sie die Korrektheit des modifizierten Algorithmus. (Hinweis: Zeigen Sie unter
anderem, dass es keine Inversion bei zwei Elementen gibt, die rechts von n − j + 1
stehen, wenn die letzte Vertauschung in Runde i die Elemente (n − j, n − j + 1) mit
j > i behandelt hat.)
Herunterladen