Wintersemester 2011/12 Modulprüfung „Algorithmik“ 20.02.2012 8.00 Uhr Name: Matrikelnummer: Studiengang, Abschluss: Zugelassene Hilfsmittel: Keine. Bearbeitungszeit: 90 Minuten Hinweise: • Bearbeiten Sie von den folgenden Aufgaben so viele wie möglich. Dabei können Sie insgesamt 60 Punkte plus 3 Bonuspunkte erreichen. Bei 30 oder mehr Punkten ist die Prüfung bestanden. • Beschriften Sie alle abzugebenden Blätter mit Ihrem Namen und Ihrer Matrikelnummer. Bei fest zusammengehefteten Blättern genügt das oberste. Nur vom Korrektor auszufüllen: Aufgabe 1 Punkte Note: Bemerkungen: 2 3 4 5 6 7 Summe Aufgabe 1 (6 Punkte) Ordnen Sie die folgenden Funktionen ihrem asymptotischen Wachstum nach aufsteigend an (α(n) bezeichnet hierbei die inverse Ackermannfunktion, log(n) den Logarithmus zur Basis 2). d(n) = n(log n)(log log n) − n log(n2 ) n e(n) = 34 a(n) = nα(n) b(n) = n1.58 c(n) = n log(3n) − n log n Aufgabe 2 (8 Punkte) a) Lösen Sie die folgenden Rekursionsgleichungen unter Verwendung des Mastertheorems. f (n) = 4f (n/3) + n + 42 ∈Θ g(n) = 4g(n/2) + 2n2 + n log n ∈Θ b) Geben Sie die exakte Lösung der folgenden Rekursionsgleichung an: T (0) = T (1) = T (2) = 1 T (n) = 2 · T (n − 3) für n ≥ 3 T (n) = c) Beweisen Sie Ihre Lösung aus Teil b) mit Induktion. Aufgabe 3 (10 Punkte) Gegeben sei ein sortiertes Feld A[1, . . . , n] mit paarweise verschiedenen ganzen Zahlen. Geben Sie einen Algorithmus an, der ausgibt, ob es einen Index i gibt mit A[i] = i. Zeigen Sie die Korrektheit und analysieren Sie die Laufzeit Ihres Algorithmus’. Um die volle Punktzahl zu erreichen, muss ihr Algorithmus eine Laufzeit in O(log n) haben. Aufgabe 4 (8 Punkte) Geben Sie bestmögliche obere Schranken für die asymptotische Laufzeit (in O-Notation, in Abhängigkeit von n) der folgenden Routinen an. Nehmen Sie hierbei an, dass alle arithmetischen Operationen einen Zeitschritt brauchen. f1(n) { sum=0 for i=0 to 65535 sum=sum+1 return sum } f2(n) { if (n>=2) return f2(n-1)+1 else return 1 } f3(n) { sum=0 for i=1 to n for j=i to n sum=sum+1 return sum } f4(n) { sum=0 for i=1 to n sum=sum+1 if (n>1) sum=sum+f4(n/2)+f4(n/2) return sum } Bonusfragen: (3 Punkte) Hinweis: Beantworten Sie diese Fragen erst, wenn Sie sonst mit der Klausur fertig sind. fX(n) { sum=0 for i=1 to n-1 sum=sum+fX(i) return sum } fY(n) { if (n>=4) return 2*fY(sqrt(n)) else return 1 } fZ(n) { if (n>=2) return fZ(n-1)+fZ(n-2)+13 else return 1 } Aufgabe 5 (12 Punkte) Es seien die Matrizen M (1) , M (2) , M (3) und M (4) gegeben. Dabei ist M (i) eine (ni−1 ×ni )-Matrix, wobei die ni durch folgende Tabelle gegeben sind: n0 3 n1 3 n2 2 n3 5 n4 1 Berechnen Sie die minimale Anzahl an skalaren Multiplikationen, die zur Berechnung des Produkts M (1) · M (2) · M (3) · M (4) benötigt werden, d. h. den Wert der Funktion cost(M (1) · · · M (4) ). Gehen Sie nach dem Algorithmus aus der Vorlesung vor; füllen Sie dabei die nachfolgende Tabelle aus und beschreiben Sie, wie diese schrittweise entsteht und was das Ergebnis ist. cost 1 2 3 1 x 2 x x x x 3 4 cost(M (1) · · · M (4) ) = x 4 Aufgabe 6 (7 Punkte) Es sei ein ungerichteter Graph G = (V, E) gegeben. Betrachten Sie den folgenden einfachen Algorithmus, der Union-Find-Operationen mit Pfadverkürzung benutzt. Die Union-Find-Operationen sind so implementiert, wie sie in der Vorlesung behandelt wurden. function xyz(G = (V, E) : Graph) : integer x : integer begin x := |V | initialisiere alle v ∈ V als einelementige Mengen forall {u, v} ∈ E do if (Find(u)6= Find(v)) then Union(u,v) x := x − 1 endif endfor return x endfunction a) Was berechnet diese Funktion? b) Geben Sie die Worst-Case-Laufzeit in Abhängigkeit von |E| und |V | an. c) Wie oft wird bei der Anwendung des Algorithmus’ auf den folgenden Graphen die UnionRoutine aufgerufen? (Geben Sie nur die Zahl an.) Anzahl der Union-Aufrufe: Aufgabe 7 (9 Punkte) Alle folgenden Aussagen lassen sich eindeutig mit „wahr“ bzw. „falsch“ beantworten. Ihre Lösung wird wie folgt bewertet: • Für jede korrekte Antwort erhalten Sie 0,75 Punkte. • Für jede nicht korrekte Antwort erhalten Sie 0,75 Punkte Abzug. • Unbeantwortete Aussagen/Fragen ergeben weder Plus– noch Minuspunkte. • Die Gesamtpunktzahl dieser Aufgabe kann nicht negativ und nicht mehr als 9 werden (d.h. es kann sinnvoll sein, zwei Fragen unbeantwortet zu lassen, um die volle Punktzahl zu erreichen). Lubys Algorithmus berechnet eine unabhängige Menge, die maximal bezüglich Inklusion ist. Die schnelle Fouriertransformation folgt dem Entwurfsprinzip „Divide and Conquer“. Ganze Zahlen können mit NC0 -Schaltkreisen addiert werden. Quick-Heapsort hat eine Worst-Case-Laufzeit von Ω(n2 ). Division ganzer Zahlen ist in P, aber nicht in NC. Ultimatives Heapsort benötigt n log2 n + O(n) Vergleiche, um ein gegebenes Feld der Länge n zu sortieren. Dijkstras Algorithmus folgt dem Entwurfsprinzip „Divide and Conquer“. Ein Fibonacci-Heap mit n Knoten hat maximale Höhe O(log n). Optimale Suchbäume lassen sich in quadratischer Zeit berechnen. Der Median einer Menge ganzer Zahlen kann gleich ihrem Maximum sein. Bubblesort benötigt auf allen Eingaben mehr Vergleiche als Heapsort. Der Algorithmus von Schönhage und Strassen zur schnellen Multiplikation ganzer Zahlen verwendet die schnelle Fouriertransformation. Quickselect benötigt im Mittel mehr als 15n Vergleiche. Verwendet man Fibonacci-Heaps zur Implementierung von Heapsort, so erreicht man eine Worst-Case-Laufzeit von O(n log log n). wahr wahr wahr wahr wahr wahr wahr wahr wahr wahr wahr wahr wahr wahr falsch falsch falsch falsch falsch falsch falsch falsch falsch falsch falsch falsch falsch falsch