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