g lag h sc r o svUniversität Karlsruhe, Institut für Theoretische Informatik Lö n su Prof. Dr. P. Sanders 26.5.2010 Übungsklausur Algorithmen I Hiermit bestätige ich, dass ich die Klausur selbständig bearbeitet habe: Aufgabe 1. [2 Punkte] Variante 1 Gegeben sei folgende Darstellung eines binären Heaps als Array mit den Indizes 1, . . . , 5: 1 2 3 3 8 5 4 5 12 11 Geben sie den Inhalt des Arrays an, nachdem deleteMin ausgeführt worden ist: 1 2 3 4 Lösung 1 2 3 4 5 8 11 12 Lösungsende Variante 2 Gegeben sei folgende Darstellung eines binären Heaps als Array mit den Indizes 1, . . . , 5: 1 7 2 3 21 42 4 5 31 43 Geben sie den Inhalt des Arrays an, nachdem deleteMin ausgeführt worden ist: 1 2 3 4 3 4 Lösung 1 2 21 31 42 43 Lösungsende g hla c rs vo s g Variante 3 un s ö L Gegeben sei folgende Darstellung eines binären Heaps als Array mit den Indizes 1, . . . , 5: 1 2 9 3 11 10 4 5 18 20 Geben sie den Inhalt des Arrays an, nachdem deleteMin ausgeführt worden ist: 1 2 3 4 3 4 Lösung 1 2 10 11 20 18 Lösungsende Aufgabe 2. [1 Punkt] Nennen Sie ein Beispiel für die vereinfachende Wirkung von Wächterelementen (= Sentinels). Lösung • Sortieren durch Einsetzen. • Suchen in (verketteten) Listen. Lösungsende Aufgabe 3. [2 Punkte] Variante 1 Nennen Sie zwei Operationen, die doppelt verkettete Listen in konstanter worst-case-Zeit unterstützen, einfach verkettete Listen jedoch nicht. Lösung insert, remove, popBack Lösungsende Variante 2 a) Nennen Sie eine Operation, die einfach verkettete Listen in konstanter worst-case-Zeit unterstützen. b) Nennen Sie einen Vorteil von einfach verketteten Listen gegenüber doppelt verketteten Listen. Lösung a) first, last, removeAfter, insertAfter, pushFront, popFront, pushBack b) Weniger Speicherverbrauch (da weniger Handles), oft schneller (weniger Handles müssen geupdated werden) Lösungsende g hla c rs vo s g Aufgabe 4. [2 Punkte] un s ö L Variante 1 Nennen Sie einen Vorteil und einen Nachteil von Hashing mit verketteten Listen gegenüber offenem Hashing mit linearer Suche. Lösung • Vorteile: insert in O(1), für dichte Hashtabellen besser, referentielle Integrität, Leistungsgarantien mit universellem Hashing • Nachteile: nicht so platz-effizient, nicht so cache-effizient, nicht so einfach Lösungsende Variante 2 Nennen Sie einen Vorteil und einen Nachteil von offenem Hashing mit linearer Suche gegenüber Hashing mit verketteten Listen. Lösung • Vorteile: platz-effizient, cache-effizient, einfach • Nachteile: insert nicht in O(1), für dichte Hashtabellen schlechter, keine Referentielle Integrität, keine Leistungsgarantieen mit universellem Hashing Lösungsende Aufgabe 5. [3 Punkte] Variante 1 Der Ministerpräsident von Baden-Württemberg möchte die besten 2% der Abiturienten seines Landes zu einem Gartenfest einladen. Gegeben sei dazu eine Datei F von n Tripeln der Form (Name, LaufendeNr, Durchschnittsnote). a) Geben Sie einen Algorithmus an, der in erwartet O(n) Zeit die besten 2% aller Abiturienten liefert. Bemerkung. Sie können Algorithmen aus der Vorlesung als Unterprogramm verwenden. Für (erwartet) O(n log n) Zeit bekommen Sie immerhin noch die Hälfte der Punkte. b) Argumentieren Sie, warum Ihr Algorithmus das gewünschte Laufzeitverhalten hat. Lösung a) Man betrachte auf F die Relation „≤“, definiert durch (N1 , L1 , D1 ) ≤ (N2 , L2 , D2 ) :⇐⇒ D1 ≤ D2 . Man wende nun den Algorithmus Quickselect aus der Vorlesung gemäß der gerade definierten Relation „≤“ an, um so das d2n/100e-te Element bzgl. „≤“ zu wählen. Heiße dieses p. Man verwende nun die von Quicksort bekannte Art zu partionieren, um F derart in zwei Teile zu teilen, dass der linke Teil alle Elemente e ∈ F mit e ≤ p enthält und der rechte Teil alle anderen. Der linke Teil enthält die gesuchten besten 2%. b) Quickselect: erwartet O(n) Zeit. Partitionieren: O(n) Zeit. Lösungsende g hla c rs vo s g Variante 2 un s ö L Eine erfolgreiche Fastfood-Kette bewertet ihre Mitarbeiter mit einem internen Punktesystem. Nun möchte der Chef die am besten bewerteten 3% aller Mitarbeiter zu einem Gala-Abend einladen. Dazu hat er eine Datei F von n Tripeln der Form (MitarbeiterID, Name, Bewertung). a) Geben Sie einen Algorithmus an, der in erwartet O(n) Zeit die am besten bewerteten 3% aller Mitarbeiter berechnet. Bemerkung. Sie können Algorithmen aus der Vorlesung als Unterprogramm verwenden. Für (erwartet) O(n log n) Zeit bekommen Sie immerhin noch die Hälfte der Punkte. b) Argumentieren Sie, warum Ihr Algorithmus das gewünschte Laufzeitverhalten hat. Lösung a) Man betrachte auf F die Relation „≤“, definiert durch (M1 , N1 , B1 ) ≤ (M2 , N2 , B2 ) :⇐⇒ B1 besser oder gleich B2 . Man wende nun den Algorithmus Quickselect aus der Vorlesung gemäß der gerade definierten Relation „≤“ an, um so das d3n/100e-te Element bzgl. „≤“ zu wählen. Heiße dieses p. Man verwende nun die von Quicksort bekannte Art zu partionieren, um F derart in zwei Teile zu teilen, dass der linke Teil alle Elemente e ∈ F mit e ≤ p enthält und der rechte Teil alle anderen. Der linke Teil enthält die gesuchten 3% mit der besten Bewertung. b) Quickselect: erwartet O(n) Zeit. Partitionieren: O(n) Zeit. Lösungsende Aufgabe 6. Variante 1 Zeigen oder widerlegen Sie, dass 22n = O(3n ). [2 Punkte] Lösung Gilt nicht. Wenn doch, gäbe es c > 1, n0 > 1 mit 22n ≤ c3n für alle c ≤ n0 . Es ist aber n 4 n 2 n 2n n 4 = (2 ) = 2 ≤ c3 ⇔ ≤ c ⇔ n ≤ log4/3 c , 3 was ein Widerspruch ist zur Unbeschränktheit von n nach oben. Lösungsende g hla c rs vo s g Variante 2 un s ö L Zeigen oder widerlegen Sie, dass 23n = O(5n ). Lösung Gilt nicht. Wenn doch, gäbe es c > 1, n0 > 1 mit 23n ≤ c5n für alle c ≤ n0 . Es ist aber n 8 n 3 n 3n n 8 = (2 ) = 2 ≤ c5 ⇔ ≤ c ⇔ n ≤ log8/5 c , 5 was ein Widerspruch ist zur Unbeschränktheit von n nach oben. Lösungsende Variante 3 Zeigen oder widerlegen Sie, dass 32n = O(5n ). Lösung Gilt nicht. Wenn doch, gäbe es c > 1, n0 > 1 mit 32n ≤ c5n für alle c ≤ n0 . Es ist aber n 9 n 2 n 2n n 9 = (3 ) = 3 ≤ c5 ⇔ ≤ c ⇔ n ≤ log9/5 c , 5 was ein Widerspruch ist zur Unbeschränktheit von n nach oben. Lösungsende Aufgabe 7. [2 Punkte] Variante 1 Bestimmen Sie die Lösungen der folgenden Rekurrenzen im Θ-Kalkül mit dem MasterTheorem: T (1) = 1, T (n) = 5T (n/3) + 4n, n = 3k , k ∈ N S(1) = 42, S(n) = n + 2S(n/2), n = 2k , k ∈ N Lösung T (n) = Θ nlog3 5 , S(n) = Θ(n log n) Lösungsende Variante 2 Bestimmen Sie die Lösungen der folgenden Rekurrenzen im Θ-Kalkül mit dem MasterTheorem: T (1) = 1, T (n) = n/5 + 4T (n/5), n = 5k , k ∈ N S(1) = 33, S(n) = 5S(n/4) + 89n, n = 4k , k ∈ N Lösung T (n) = Θ(n), S(n) = Θ nlog4 5 Lösungsende g hla c rs vo s g Variante 3 un s ö L Bestimmen Sie die Lösungen der folgenden Rekurrenzen im Θ-Kalkül mit dem MasterTheorem: T (1) = 2001, T (n) = 42n + 2T (n/2), n = 2k , k ∈ N S(1) = 5, T (n) = 45 T (n/7) + n/7, n = 7k , k ∈ N Lösung T (n) = Θ(n log n), S(n) = Θ(n) Lösungsende Variante 4 Bestimmen Sie die Lösungen der folgenden Rekurrenzen im Θ-Kalkül mit dem MasterTheorem: T (1) = 2, T (n) = 7n + 4T (n/2), n = 2k , k ∈ N S(1) = 5, T (n) = 3T (n/3) + 1001n, n = 3k , k ∈ N Lösung T (n) = Θ n2 , S(n) = Θ(n log n) Lösungsende Aufgabe 8. [2 Punkte] Variante 1 Nennen Sie einen Vorteil von Radix-Sort gegenüber Mergesort und von Mergesort gegenüber Quicksort. Lösung • Vorteil Radix-Sort gegenüber Mergesort: Zeit in O(n) statt Θ(n log n) • Vorteile Mergesort gegenüber Quicksort: stabil, O(n log n) bzw. n log n + O(n) Vergleiche im worst-case Lösungsende Variante 2 Nennen Sie einen Vorteil und Nachteil von Mergesort gegenüber Quicksort. Lösung Vorteile von Mergesort: • O(n log n) Vergleiche im schlimmsten Fall, bei Quicksort Θ(n2 ) • stabil • n log n + O(n) Elementvergleiche statt Θ(n2 ) wie im schlimmsten Fall bei Quicksort Nachteile von Mergesort: • in der Praxis oft langsamer • nicht „inplace“ Lösungsende g hla c rs vo s g Variante 3 un s ö L Nennen Sie je einen Vorteil von Radix-Sort gegenüber Quicksort und von Quicksort gegenüber Mergesort. Lösung • Vorteile von Radixsort gegenüber Quicksort: Zeit in O(n) statt erwartet Θ(n log n) bzw. worst-case Θ(n2 ), Radix-Sort stabil im Gegensatz zu Quicksort • Vorteile von Quicksort gegenüber Mergesort: In der Praxis oft schneller, „inplace“ Lösungsende Aufgabe 9. [2 Punkte] Ein Student hat sich nachfolgenden RAM-Code ausgedacht (dabei ist x ein Platzhalter): R1 := 1 R2 := 0 R4 := x schleifenanfang: R2 := R2 + R1 R1 := R1 + 1 R3 := R1 ≥ R4 JZ schleifenanfang, R3 Welchen Wert enthält das Register R2 nach Ausführung des Programms für den Fall das x = 4? Lösung Für den Fall x = 4 enthält das Register R2 den Wert R2 = 1 + 2 + 3 = 6. Im Fall x = n ∈ N gilt nach Ausführung des Programms R2 = ∑n−1 i=1 i Lösungsende g hla c rs vo s g Aufgabe 10. [1 Punkt] un s ö L Ist dieser Graph ein DAG? Begründen Sie (z.B. durch Markierungen in der Zeichnung des Graphen)! Lösung Der Graph ist kein DAG, da er einen gerichteten Kreis enthält. Lösungsende Aufgabe 11. [1 Punkt] Gegeben Sei folgender Algorithmus zum Finden einer Zahl x in einem unsortierten Feld A von natürlichen Zahlen. 1: procedure findNumber(A : Array [1..n] of N, x ∈ N ) 2: for i = 1 to n do 3: if A[i] == x return i 4: invariant 5: return -1 Geben Sie in Zeile 4 eine gültige und sinnvolle Invariante an. Lösung Zum Beispiel: ∀k ∈ {1...i} : A[k] 6= x. Zusatz: Falls Zeile 5 aufgerufen wird, so gilt i = n. Also gilt ∀i ∈ {1..n} : A[i] 6= x und mit anderen Worten: A enthält kein Element mit dem Wert x. Lösungsende Aufgabe 12. [1 Punkt] Welche der folgenden Operationen eines unbeschränkten Feldes liegen im schlimmsten Fall in Θ(n) (ohne Amortisierung): pushBack, Folge von n pushBack, [·] (Elementzugriff), |· | (Größe)? Lösung pushBack, Folge von n pushBack Lösungsende Aufgabe 13. [2 Punkte] g hla c rs vo s g Variante 1 un s ö L Nennen Sie zwei Vorteile von beschränkten Feldern gegenüber einfach verketteten Listen. Lösung • keine Zeiger • Cache-effizientes Iterieren • effizienter beliebiger/wahlfreier Zugriff • einfach Lösungsende Variante 2 Nennen Sie zwei Nachteile von beschränkten Feldern gegenüber verketteten Listen. Lösung • kein effizientes Einfügen an beliebiger Position • Speicherplatz-Verschnitt • einzelne Operationen können lange dauern • nicht so flexibel Lösungsende Variante 3 Nennen Sie zwei Vorteile von einfach verketteten Listen gegenüber beschränkten Feldern. Lösung • flexibel • keine Ausreißer bei der Laufzeit der Operationen • kein Speicherplatz-Verschnitt • effizientes Einfügen an beliebiger Position Lösungsende Variante 4 Nennen Sie zwei Nachteile von einfach verketteten Listen gegenüber beschränkten Feldern. Lösung • Zeiger benötigen zusätzlichen Platz • Iterieren nicht Cache-effizient • kein effizienter beliebiger/wahlfreier Zugriff • komplizierter Lösungsende g hla c rs vo s g Aufgabe 14. un s ö L Variante 1 [1 Punkt] Gegeben Sei eine Hashtabelle mit 10 Einträgen und die Hashfunktion h(x) = x DIV 10. Fügen Sie die Elemente 4, 77, 5, 63, 98, 3, 22, 23, 99 in der gegebenen Reihenfolge in die Hashtabelle ein. Verwenden Sie Hashing mit lineare Suche (zyklisches Array). Geben Sie nur das entgültige Ergebnis an. 0 1 2 3 4 5 6 7 8 9 4 5 6 7 8 9 Lösung 0 1 2 3 4 5 3 22 23 99 63 77 98 Lösungsende Variante 2 Gegeben Sei eine Hashtabelle mit 10 Einträgen und die Hashfunktion h(x) = x DIV 10. Fügen Sie die Elemente 3, 76, 4, 62, 97, 2, 21, 22, 98 in der gegebenen Reihenfolge in die Hashtabelle ein. Verwenden Sie Hashing mit lineare Suche (zyklisches Array). Geben Sie nur das entgültige Ergebnis an. 0 1 2 3 4 5 6 7 8 9 4 5 6 7 8 9 Lösung 0 1 2 3 3 4 2 21 22 98 62 97 76 Lösungsende Variante 3 Gegeben Sei eine Hashtabelle mit 10 Einträgen und die Hashfunktion h(x) = x DIV 10. Fügen Sie die Elemente 2, 75, 3, 61, 96, 1, 21, 22, 97 in der gegebenen Reihenfolge in die Hashtabelle ein. Verwenden Sie Hashing mit lineare Suche (zyklisches Array). Geben Sie nur das entgültige Ergebnis an. 0 1 2 3 4 5 6 7 8 9 4 5 6 7 8 9 Lösung 0 1 2 3 2 3 1 21 22 97 61 75 96 Lösungsende g hla c rs vo s g Aufgabe 15. [2 Punkte] un s ö L Variante 1 Ein Array A[1..h] stelle einen impliziten binären Heap dar. Geben Sie sowohl den Index des Parents als auch des linken Kindes für das Element j an, gegeben dass beide existieren. parent(j) = linkes Kind(j) = Lösung parent(j) = b j/2c, linkes Kind(j) = 2 j Lösungsende Variante 2 Ein Array A[1..h] stelle einen impliziten binären Heap dar. Geben Sie sowohl den Index des linken als auch des rechten Kindes für das Element j an, gegeben dass beide existieren. linkes Kind(j) = rechtes Kind(j) = Lösung linkes Kind(j) = 2 j, rechtes Kind(j) = 2 j + 1 Lösungsende Variante 3 Ein Array A[1..h] stelle einen impliziten binären Heap dar. Geben Sie sowohl den Index des Parents als auch des rechten Kindes für das Element j an, gegeben dass beide existieren. parent(j) = rechtes Kind(j) = Lösung parent(j) = b j/2c, rechtes Kind(j) = 2 j + 1 Lösungsende Aufgabe 16. [1 Punkt] Erläutern Sie kurz die Hauptidee des rekursiven recMult-Algorithmus der Vorlesung zur Multiplikation von zwei n-Bit Ziffern a, b. Lösung Im Wesentlichen handelt es sich um einen Darstellungstrick: Es sei a = a1 Bk + a0 , b = b1 Bk + b0 . Dann a · b = a1 b1 B2k + (a1 b0 + b1 a0 )Bk + a0 b0 . Daraus lässt sich dann der Algorithmus ableiten. Lösungsende g hla c rs vo s g Aufgabe 17. [1 Punkt] un s ö L Variante 1 Wie lautet die Datenstrukurinvariante für doppelt verkettete Listen aus der Vorlesung? Lösung prev→next = next→prev = this Lösungsende Variante 2 Wie lautet die Heap-Eigenschaft? Lösung Bäume (oder Wälder) mit ∀v :parent(v)≤ v Lösungsende