Algorithmik Sommersemester 2009 Prof. Dr. Steffen Lange 1. Übungsblatt 1. Aufgabe Es sei die folgende Folge a[1] = 1, a[2] = −1, a[3] = 4, a[4] = 1, a[5] = −3, a[6] = 5, a[7] = −2, a[8] = 1, a[9] = −1, a[10] = 1, a[11] = 2 von rationalen Zahlen gegeben. Teilaufgabe (a) Illustrieren Sie anhand dieses Beispiels die Arbeitsweise des in der Vorlesung vorgestellten Algorithmus 2 (Divide & Conquer ) zur Bestimmung der maximalen Teilsumme. Teilaufgabe (b) Illustrieren Sie anhand dieses Beispiels die Arbeitsweise des in der Vorlesung vorgestellten Algorithmus 3 (clever ) zur Bestimmung der maximalen Teilsumme. 2. Aufgabe Beim Composite-Problem geht es darum, zu einer gegebenen natürlichen Zahl x zu entscheiden, ob es natürliche Zahlen a, b ∈ {2, . . . , x − 1} mit a · b = x gibt. Die folgende Funktion composite(.) löst das Composite-Problem. bool composite(int x) { bool result = false; for( int a = 2; a < x; ++a ) for( int b = 2; b < x; ++b ) if( a*b == x ) result = true; return(result); } Geben Sie eine eine einfache Funktion an, die gleichzeitig obere und untere Schranke für die Laufzeit der Funktion composite(.) ist. Hinweis: Denken Sie daran, daß die Länge einer Eingabe x der Länge der Binärdarstellung von x entspricht. Gehen Sie bei Ihrer Analyse davon aus, daß alle Elementaroperationen (Wertzuweisung, Vergleich, . . . ) konstante Kosten haben. 1 3. Aufgabe Welche der folgenden Aussagen sind richtig, welche sind falsch? Begründen Sie Ihre Antwort, in dem Sie jeweils geeignete Konstanten c1 , c2 und n0 angeben oder zeigen, daß es solche Konstanten nicht geben kann. (i) f (n) ∈ O(g(n)) mit f (n) = 2 und g(n) = n für alle n ∈ IN (ii) f (n) ∈ O(2n−1 ) mit f (n) = 2n und g(n) = 2n−1 für alle n ∈ IN √ (iii) f (n) ∈ Ω(g(n)) mit f (n) = 22 · n2 und g(n) = n für alle n ∈ IN (iv) f (n) ∈ Θ(g(n)) mit f (n) = 8 · n3 + 4 · n2 und g(n) = n2 für alle n ∈ IN 4. Aufgabe Es seien Algorithmen A1 und A2 zur Lösung ein und desselben Problems gegeben. Ferner sei bekannt, daß sich die Laufzeit dieser Algorithmen wie folgt in Abhängigkeit von der Problemgröße n bestimmt: • time(A1 , n) = 13n3 − 7n2 + 18n • time(A2 , n) = 2n4 − 15n2 + 18n log(n) Welche dieser beiden Algorithmen ist der effizientere? Begründen Sie Ihre Aussage, in dem Sie geeignete einfache obere bzw. untere Schranken für die Laufzeit der beiden Algorithmen bestimmen. Viel Erfolg bei der Bearbeitung der Aufgaben! 2