Algorithmik Sommersemester 2015 Prof. Dr. Steffen Lange 3. Übungsblatt 1. Aufgabe Es sei k ≥ 0 und L eine Liste mit n = 2k Zahlen. Um das Produkt der Zahlen in der Liste L zu bestimmen, stehen die folgenden zwei Algorithmen zur Verfügung. Algorithmus A: wie folgt: Dieser Algorithmus bestimmt seinen Rückgabewert A(L) (a1) Falls L genau eine Zahl enthält, so wird diese Zahl zurückgegeben. (a2) Falls L mehr als eine Zahl enthält, so wird L in zwei gleich große Listen L1 und L2 zerlegt. Anschließend werden rekursiv die Rückgabewerte A(L1 ) und A(L2 ) bestimmt. Danach wird das Produkt der Zahlen A(L1 ) und A(L2 ) berechnet und zurückgegeben. Algorithmus B: wie folgt: Dieser Algorithmus berechnet seinen Rückgabewert B(L) (b1) Falls L genau eine Zahl enthält, so wird diese Zahl zurückgegeben. (b2) Falls L genau zwei Zahlen enthält, so wird das Produkt dieser beiden Zahlen zurückgegeben. (b3) Falls L mehr als zwei Zahlen enthält, so wird L in z Listen L1 , . . . , Lz mit jeweils zwei Zahlen zerlegt. Anschließend werden rekursiv die Rückgabewerte B(L1 ), . . . , B(Lz ) bestimmt. Danach wird das Produkt der Zahlen B(L1 ), . . . , B(Lz ) berechnet und zurückgegeben. Beantworten Sie die folgenden Fragen so ausführlich, dass erkennbar ist, wie Sie zu Ihren Antworten gekommen sind. (i) Geben Sie eine einfache Funktion g1 (n) an, die gleichzeitig eine untere und obere asymptotische Schranke für die Anzahl der Multiplikationen ist, die der Algorithmus A benötigt, um für eine gegebene Liste L mit n Zahlen den Rückgabwert A(L) zu bestimmen. 1 (ii) Geben Sie eine einfache Funktion g2 (n) an, die gleichzeitig eine untere und obere asymptotische Schranke für die Anzahl der Multiplikationen ist, die der Algorithmus B benötigt, um für eine gegebene Liste L mit n Zahlen den Rückgabwert B(L) zu bestimmen. 2. Aufgabe Es sei a = a[1], . . . , a[n] ein Array mit n Elementen, in denen eine Permutation der Zahlen 1 bis n gespeichert ist. Es sei b = b[0], . . . , b[n] ein Array mit n + 1 Elementen, die alle die Zahl 0 speichern. Es sei das folgende Programm gegeben: int max = 0 for ( int i = 1; i <= n; ++i ) { if ( b[max] < a[i] ) { ++max; b[max] = a[i]; } else { while ( b[max] > a[i] ) { b[max] = 0; --max; cout << 1 << endl; } ++max; b[max] = a[i]; } } Teilaufgabe (a) Illustrieren Sie die Arbeitsweise des obigen Programms, wenn a die fünf Elemente 5, 2, 4, 1 und 3 in der angegebenen Reihenfolge speichert. Teilaufgabe (b) Es sei f (n) = n2 . • Begründen Sie, dass f (n) eine (asymptotische) obere Schranke für die Anzahl der Einsen ist, die das obige Programm auf den Bildschirm ausgibt. • Ist die Funktion f (n) auch eine (asymptotische) untere Schranke für die Anzahl der Einsen ist, die das obige Programm auf den Bildschirm ausgibt? Begründen Sie Ihre Antwort. 2 3. Aufgabe Es sei a ein Array der Größe n, indem rationale Zahlen gespeichert sind. Hinweis: Bei der Bearbeitung der Teilaufgaben a) und b), können Sie benutzen, dass bekannt ist, dass mindestens n − 1 Vergleiche benötigt werden, um das Maximum der in A gespeicherten Zahlen zu bestimmen. Diese Aussage haben wir in der Vorlesung bereits bewiesen. Sie gilt auh, wenn in A nur postive bzw. negative Zahlen gespeichert sind. Teilaufgabe (a) Begünden Sie, weshalb mindestens n − 1 Vergleiche benötigt werden, um das Minimum der im Array a gespeicherten Zahlen zu bestimmen. Teilaufgabe (a) Begründen Sie, weshalb mindestens n − 1 Vergleiche benötigt werden, um die maximale Teilsumme der im Array a gespeicherten Zahlen zu bestimmen. 4. Aufgabe Illustrieren Sie die Arbeitsweise der in der Vorlesung vorgestellten randomisierte Verfahren zum Bestimmen des Elements vom Rang k in einer Folge F von n verschiedenen Zahlen für die folgenden Folge F und k = 3: F = 2, 4, 1, 5, 7, 3, 8, 9, 6, 12, 14, 11, 15, 13, 10. 5. Aufgabe Teilaufgabe (a) Begründen Sie, weshalb drei Vergleiche genügen, um in einer Liste mit drei paarweise verschiedenen Elementen den Median, d.h. das Element vom Rank k = 2 zu bestimmen. Teilaufgabe (b) Begründen Sie, weshalb sieben Vergleiche genügen, um in einer Liste mit fünf paarweise verschiedenen Elementen den Median, d.h. das Element vom Rank k = 3 zu bestimmen. Hinweis: Überlegen Sie sich, wie viele Vergleiche genügen, um eine Liste mit vier paarweise verschiedenen Elementen zu sortieren. 3 6. Aufgabe Hinweis: Diese Aufgabe diskutieren wir in der Übung am 20.05.2015. Diejenigen die zur am Übung am 27.05.2015 kommen, lösen die Aufgabe bitte selbständig. Modifizieren Sie das in der Vorlesung vorgestellte deterministische Verfahren zum Bestimmen des Elements vom Rang k in einer Folge von n verschiedenen Zahlen. Im Unterschied zur vorgestellten Variante soll nun die gegebene Folge in Blöcke von drei Elementen (/* anstelle von fünf Elementen */) 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 Vergleichsoperation abzuschätzen, die dieses modifizierte Verfahren benötigt. Viel Erfolg beim Bearbeiten der Aufgaben! 4