TU Ilmenau, Fakultät IA Institut TI, FG Komplexitätstheorie und Effiziente Algorithmen Priv.-Doz. Dr.rer.nat.habil. K.-H. Niggl, Dipl.-Inf. U. Schellbach http://www.tu-ilmenau.de/fakia/audss06.html Algorithmen und Datenstrukturen SS 06 Übungsblatt 1 Abgabetermin: Dienstag, den 11.4.2006, in der Vorlesung Aufgabe 1 (Abschlußeigenschaften/Rechenregeln der O-Notation) Zeigen Sie: (a) g ∈ O(f ) =⇒ O(g) ⊆ O(f ) (b) O(f + g) = O(max{f, g}) (c) g1 ∈ O(f1 ), g2 ∈ O(f2 ) =⇒ g1 + g2 ∈ O(f1 + f2 ) (d) g1 ∈ O(f1 ), g2 ∈ O(f2 ) =⇒ g1 · g2 ∈ O(f1 · f2 ) Aufgabe 2 (Selection-Sort) Selection-Sort sortiert n Zahlen in einem Feld A[1..n], indem zuerst das kleinste Element bestimmt und mit A[1] vertauscht wird, dann das zweitkleinste Element bestimmt und mit A[2] vertauscht wird, und so weiter für die n−1 kleinsten Elemente der Eingabe. (a) Formulieren Sie Selection-Sort als Pseudocode. (b) Formulieren Sie eine Schleifeninvariante, aus der die Korrektheit von Selection-Sort folgt. Wieso genügt es, daß die Schleife nur für die ersten n − 1 Elemente durchlaufen wird? (c) Geben Sie die best-case und worst-case Laufzeit von Selection-Sort in ONotation an. Aufgabe 3 (Fibonacci-Zahlen) Die Fibonacci-Zahlen sind wie folgt rekursiv definiert: F0 = 0, F1 = 1 und Fi = Fi−1 + Fi−2 für i ≥ 2 Sie stehen in engem Bezug zum sogenannten goldenen Schnitt Φ = (1 + seinem sogenannten Konjugierten Φ̂ = 1 − Φ, d.h. Φ̂ + Φ = 1. Beweisen Sie durch geeignete Induktion die folgenden Aussagen: (a) Die i-te Fibonacci-Zahl besitzt die folgende Darstellung: Fi = Φi − Φ̂i √ 5 (b) Es existieren Konstanten c > 1, a > 0, b > 0, so daß für alle n ≥ 0 gilt: (i) Fn+1 ≥ a · cn (ii) Fn+1 ≤ b · cn Bemerkung: Das bedeutet insbesondere Fn+1 ∈ Θ(cn ). √ 5)/2 und 2 Algorithmen und Datenstrukturen SS 06 Übungsblatt 1 Aufgabe 4 (Korrektheit von Bubble-Sort) Betrachten Sie den Sortieralgorithmus Bubble-Sort, der mit der wiederholten Vertauschung von in falscher Reihenfolge stehenden benachbarten Elementen arbeitet. Bubble-Sort(A[1..n]) 1 2 3 4 for i ← 1 to n do for j ← n downto i + 1 do if A[j] < A[j − 1] then exchange A[j] ↔ A[j − 1] (a) Es bezeichne A0 die Ausgabe von Bubble-Sort. Für den Nachweis der Korrektheit von Bubble-Sort muß gezeigt werden: A0 [1] ≤ A0 [2] ≤ · · · ≤ A0 [n] (1) Was muß zum Nachweis der Korrektheit zusätzlich noch gezeigt werden? Die nachfolgenden beiden Aufgabenteile dienen zum Beweis von Ungleichung (1): (b) Formulieren Sie präzise eine Invariante der for-Schleife in den Zeilen 2-4. Beweisen Sie diese Invariante mittels geeigneter Induktion. (c) Formulieren Sie nun unter der Annahme, daß die Invariante aus Teil (b) gilt, eine Invariante für die for-Schleife in den Zeilen 1-4, welche den Beweis von Ungleichung (1) ermöglicht. (d) Wie groß ist die worst-case Laufzeit von Bubble-Sort? Vergleichen Sie diese Laufzeit mit der entsprechenden Laufzeit von Insertion-Sort.