TU Ilmenau, Fakultät für Informatik und Automatisierung FG Komplexitätstheorie und Effiziente Algorithmen Univ.-Prof. Dr. M. Dietzfelbinger, Dr. C. Mattern, M.Sc. Stefan Walzer http://www.tu-ilmenau.de/iti/lehre/lehre-ss-2016/aud/ Algorithmen und Datenstrukturen SS 2016 – Übung 9 Besprechung: 22. Kalenderwoche (6. Juni - 10. Juni 2016) Aufgabe 1 (Laufzeitabschätzung von D-a-C-Algorithmen) Für ein Problem P sind drei Algorithmen bekannt, die einen Input der Länge n wie folgt lösen: • Algorithmus A spaltet das Problem in fünf Teilprobleme der Größe n/2, löst diese rekursiv, und kombiniert die Lösungen der Teilprobleme zu einer Lösung des Gesamtproblems in Zeit O(n). • Algorithmus B spaltet das Problem in zwei Teilprobleme der Größe n − 1, löst diese rekursiv, und kombiniert die Lösungen der Teilprobleme zu einer Lösung des Gesamtproblems in Zeit O(n). • Algorithmus C spaltet das Problem in neun Teilprobleme der Größe n/3, löst diese rekursiv, und kombiniert die Lösungen der Teilprobleme zu einer Lösung des Gesamtproblems in Zeit O(n2 ). Schätzen Sie die Laufzeit jedes Algorithmus entweder mit dem Master-Theorem (wenn anwendbar) oder durch direktes Ausrechnen ab. Welcher Algorithmus ist asymptotisch am schnellsten? Aufgabe 2 (Suche eines Gipfels) Wir nennen ein Array A[1..n] aus n verschiedenen natürlichen Zahlen unimodal, wenn ein Index i ∈ {1, . . . , n} existiert, so dass A[1..i] aufsteigend und A[i..n] absteigend sortiert ist. Das Element A[i] nennen wir den Gipfel von A. Geben Sie einen Divide-and-Conquer-Algorithmus an, der folgendes Problem in Zeit O(log n) löst: Gipfelbestimmung Input: Ein unimodales Array A[1..n]. Output: Der Gipfel von A. Aufgabe 3 (Bestimmung der maximalen Differenz) Geben Sie einen Divide-and-Conquer-Algorithmus mit Laufzeit O(n log n) für folgendes Problem an: Maximale Differenz Input: Ein Array A[1..n] mit n natürlichen Zahlen. Output: Zwei Indizes i, j, mit 1 ≤ i ≤ j ≤ n, so dass A[ j] − A[i] = max{A[l] − A[k] | 1 ≤ k ≤ l ≤ n}. Für Interessierte: Geben Sie einen Algorithmus mit Laufzeit O(n) an. 2 Algorithmen und Datenstrukturen SS 2016 – Übung 9 Aufgabe 4 (Majority Element) Ein Element x hat die Mehrheit in einem Array A[1 . . . n], wenn es in mehr als der Hälfte der Einträge von A vorkommt. Geben sie einen rekursiven Algorithmus an, der folgendes Problem in Zeit O(n) löst. Majority Element Input: Ein Array A[1..n]. Output: Dasjenige x, das die Mehrheit in A hat, falls ein solches Element existiert. None sonst.