Algorithmen und Datenstrukturen, SS08 ¨Ubungsblatt

Werbung
K
TU Ilmenau, Fakultät IA
Institut TI, FG Komplexitätstheorie und Effiziente Algorithmen
Prof. Dr. (USA) M. Dietzfelbinger, Dr. M. Brinkmeier, Dr. E. Hübel
http://www.tu-ilmenau.de/fakia/afs ws07.html
Algorithmen und Datenstrukturen, SS08
Übungsblatt Blatt 02
für die 17. Woche 2008
Aufgabe 1 (Rechenregeln für die asymptotische Notation)
Zeigen Sie die folgenden Behauptungen:
(a) O(f + g) = O(max{f, g}).
Hierzu ist zu zeigen:
Für jedes h ∈ F + gilt: h ∈ O(f + g) ⇐⇒ h ∈ O(max{f, g}).
(b) g1 ∈ O(f1 ) und g2 ∈ O(f2 ) =⇒ g1 · g2 ∈ O(f1 · f2 ).
(c) |h(n)| = o(f (n)), f ∈ F + =⇒ f + h ∈ Θ(f ).
(d) g ∈ Θ(f ) ⇐⇒ O(f ) = O(g).
(Sorgfältig beide Richtungen zeigen.)
(e) Sei f (n) = log n und g(n) = log2 n. Zeigen Sie O(f ) = O(g).
(f ) Wenn f1 (n) = O(g1 (n)) und f2 (n) = o(g2 (n)), dann ist f1 (n)f2 (n) = o(g1 (n)g2 (n)).
(g) n! = O(nn ) und n! = Ω((n/2)n/2 )
Bonus: n! = O((n/2)n ).
√
Bemerkung: Es gilt n! = Θ( n(n/e)n ).
Ganz genau: lim
n→∞
√
n!
2πn(n/e)n
= 1 ( Stirling’sche Formel“)
”
Aufgabe 2 (Bubble-Sort)
Betrachten Sie Bubble-Sort mit Erkennen eines sortierten Arrays:
Eingabe (a1 , . . . , an ) in Array A[1..n].
Algorithmus Bubble-Sort(Pseudocode)
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
k ← n;
//*k ist der letzte Index der unsortierten Teilfolge *//
x ← 1;
//*Variable, die angibt, ob Tausch erfolgte *//
while k > 1 and x = 1 do
x ← 0;
for i from 1 to k − 1 do
if A[i] > A[i + 1] then vertausche A[i] mit A[i + 1];
x ← 1;
k ← k − 1;
return A[1..n].
(a) Beweisen Sie, dass der Algorithmus das Sortierproblem löst.
(Induktion über k = n, . . . , 2. Induktionsbehauptung: Nach Schleifendurchlauf (5)-(7) für
k stehen die größten n − k + 1 Elemente sortiert in A[k..n].)
(b) Bestimmen Sie worst-case- und best-case-Kosten des Algorithmus auf einer Eingabe
x = (a1 , . . . , an ) in Θ-Notation.
2
Algorithmen und Datenstrukturen, SS08
Übungsblatt Blatt 02
(c) Überlegen Sie, dass die Anzahl der Ausführungen der Tausche-Operation (Zeile (6)) genau
die Anzahl der Fehlstände in der Eingabe ist.
Bestimmen Sie in Θ-Notation die average-case-Kosten TBS,av für Bubble-Sort.
(d) Geben Sie einen Input an, der von Straight-Insertion-Sort in Zeit O(n), von Bubble-Sort
in Zeit Θ(n2 ) sortiert wird.
Aufgabe 3 (Mittlere Laufzeit)
Betrachten Sie das folgende Programm:
Eingabe: Ein Array A[1..n], n ≥ 1, von natürlichen Zahlen (a1 , . . . , an ).
Ausgabe: eine natürliche Zahl x.
Algorithmus(Pseudocode)
(1) x ← A[1];
(2) for i := 2 to n do
(3)
if A[i] > x then
(4)
x ← A[i];
(5) return x.
(a) Was tut dieses Programm?
(b) Für i = 1, 2, 3, 4 sei ci der Aufwand für eine einmalige Ausführung von Zeile i. Geben Sie
für einen Input (a1 , . . . , an ) den Gesamtaufwand des Programms in der Form l1 · c1 + l2 ·
c2 + l3 · c3 + l4 · c4 an, und bestimmen Sie die Zahlen l1 , l2 , l3 .
(c) A[1..n] sei mit einem festen Input (a1 , . . . , an ) versehen. Bestimmen Sie die Zahl l4 .
(Hinweis: Es gibt einen Zusammenhang mit den Zahlen k2 , . . . , kn in der Analyse von
Straight-Insertion-Sort aus der Vorlesung.)
(d) Die Einträge b1 < . . . < bn in Array A[1..n] seien verschieden. Wenn man A[i + 1], . . . , A[n]
beliebig mit Elementen von {b1 , . . . , bn } besetzt, welcher Anteil der verbleibenden Anordnung erfüllt dann ki = 0?
Wenn man die Anordnung aller Elemente zufällig wählt, mit welcher Wahrscheinlichkeit
ist dann ki = 0?
P
(e) Bestimmen Sie
Pr(ki = 0) [= E(l4 )].
2≤i≤n
Herunterladen