Algorithmik Sommersemester 2012 Prof. Dr. Steffen Lange 2. Übungsblatt 1. Aufgabe Es seien L1 eine bereits sortierte Liste mit 999000 Elementen und L2 eine Liste mit 1000 Elementen, die nicht sortiert ist. Das Ziel besteht darin, eine sortierte Liste L zu erzeugen, die alle Elemente aus L1 und L2 enthält. Teilaufgabe (a) Geben Sie eine möglichst genaue Abschätzung für die Anzahl der Vergleichsoperationen an, die im worst case benötigt werden, wenn die gesuchte Liste wie folgt erzeugt wird: Zunächst wird die Liste L1 um 1000 freie Plätze erweitert. Im Anschluß daran werden – wie bei InsertionSort – die 1000 Elemente der Liste L2 in die Liste L1 eingefügt. Teilaufgabe (b) Ist es mit Blick auf die Anzahl der im worst case benötigten Vergleichsoperationen sinnvoller, die Listen L1 und L2 zu verketten und anschließend die so gebildete Liste mit einem effizienteren Sortierverfahren als InsertionSort zu sortieren? 2. Aufgabe Modifizieren Sie den in der Vorlesung vorgestellten Divide & Conquer –Verfahren, mit dem das Element vom Rank k in einer Folge von n verschiedenen Zahlen bestimmt werden kann. Im Unterschied zur der in der Vorlesung vorgestellten Variante soll nun die gegebene Folge in Gruppen von drei Elementen(/* anstelle von fünf Elementen wie in der Vorlesung */) zerlegt werden, um den Median der Mediane zu bestimmen. (a) Illustrieren Sie die Arbeitsweise des Verfahrens, um das Element vom Rank 3 in der folgenden Folge zu bestimmen: 2, 4, 1, 5, 7, 3, 8, 9, 6, 12, 14, 11, 15, 17, 13, 18, 19, 16 (b) Geben Sie eine Rekursionsgleichung an, um die Anzahl der von diesem modifizierten Verfahren durchgeführten Vergleichsoperation abzuschätzen. Hinweis: Um die Lösung der Rekursionsgleichung kümmern wir uns in der Übung. 1 3. Aufgabe Es sei s ein Binärstring der Länge n. Der folgende Divide and Conquer –Algorithmus kann verwendet werden, um zu bestimmen, wie oft die Ziffer 1 im Binärstring s vorkommt. (i) Falls s der Binärstring 0 ist, gib eine 0 zurück. Falls s der Binärstring 1 ist, gib eine 1 zurück. (ii) Andernfalls zerlege s in zwei Binärstrings s1 und s2 , deren Länge sich maximal um eins unterscheidet. Wende diesen Divide & Conquer –Algorithmus auf die Binärstrings s1 und s2 an. Bestimme die Summe der als Ergebnis zurückgegebenen Zahlen x1 und x2 und gib die Summe x1 + x2 zurück. Geben Sie eine einfache Funktion f (.) an, die sowohl eine obere als auch eine untere Schranke für die Laufzeit des vorgestellten Divide & Conquer –Algorithmus ist. Hinweis: Gehen Sie bei Ihrer Laufzeitanalyse der Einfachheit halber davon aus, daß (i) in konstanter Zeit realisiert werden kann und daß in (ii) sowohl die beiden Binärstrings s1 und s2 als auch die Summe der zurückgegebenen Zahlen x1 und x2 in konstanter Zeit bestimmt werden können. 4. Aufgabe Es sei s ein Binärstring der Länge n. Der folgende Divide and Conquer –Algorithmus kann verwendet werden, um zu bestimmen, wie oft die Ziffer 1 im Binärstring s vorkommt. (i) Falls s der Binärstring 0 ist, gib eine 0 zurück. Falls s der Binärstring 1 ist, gib eine 1 zurück. Falls s der leere Binärstring ist, gib eine 0 zurück. (ii) Andernfalls zerlege s in drei Binärstrings s1 , s2 und s3 , deren Länge sich maximal um eins unterscheidet. Wende diesen Divide & Conquer –Algorithmus auf die Binärstrings s1 , s2 und s3 an. Bestimme die Summe der als Ergebnis zurückgegebenen Zahlen x1 , x2 und x3 und gib die Summe x1 + x2 + x3 zurück. Geben Sie eine einfache Funktion f (.) an, die sowohl eine obere als auch eine untere Schranke für die Laufzeit des vorgestellten Divide & Conquer –Algorithmus ist. Hinweis: Gehen Sie bei Ihrer Laufzeitanalyse der Einfachheit halber davon aus, daß (i) in konstanter Zeit realisiert werden kann und daß in (ii) sowohl die drei Binärstrings s1 , s2 und s3 als auch die Summe der zurückgegebenen Zahlen x1 , x2 und x3 in konstanter Zeit bestimmt werden können. 2 5. Aufgabe Es sei f (n) = 7n3 + 17n2 − 25 log(n). Es sei g1 (n) = nn , g2 (n) = n3 und g3 (n) = n2 . Für welche der Funktionen gi (n) gilt f (n) ∈ Ω(gi (n)), f (n) ∈ Θ(gi (n)) bzw. f (n) ∈ O(gi (n))? Zur Beantwortung vervollständigen Sie die folgende Tabelle, indem Sie in die Zellen ein “ja” bzw. ein “nein” eintragen. Es ist keine Begründung erforderlich! f (n) ∈ Ω(gi (n)) f (n) ∈ Θ(gi (n)) i=1 i=2 i=3 3 f (n) ∈ O(gi (n))