Höhere Algorithmik, WS 2012/13 — 1. Übungsblatt Vor- und Wiederholungsübungen, ohne Abgabe 1. Laufzeitvergleich Die folgende Tabelle gibt die Laufzeiten von verschiedenen Algorithmen für eine Eingabe der Größe n auf einem bestimmten Rechner an. Verfahren Laufzeit in ms Programmieraufwand Algorithmus A 0,001n! 1 Stunde Algorithmus B 0,01n2 1 Tag Algorithmus C 0,1 n log2 n 1 Woche Algorithmus D 0,5n 10 Wochen Welchen Algorithmus würden Sie wählen, wenn das Programm für Eingaben der Größe (a) n = 10, (b) n = 1000, (c) n = 10 000 000 bis zum Jahr 2020 (i) einmal pro Jahr, (ii) täglich, (iii) 10-mal pro Sekunde laufen müsste. Was ändert sich, wenn man auf eine dreimal schnellere Hardware umsteigen würde? 2. Wiederholungsübungen zur O-Notation (a) Zwei Algorithmen A und B haben die (feste) Laufzeit f (n) bzw. g(n), mit g(n) = O(f (n) log n). Welche der folgenden Aussagen lässt sich daraus schließen? i. Für alle n größer als ein gewisses n0 ist A schneller als B. ii. Für alle n größer als ein gewisses n0 ist B schneller als A. iii. Keine der beiden Aussagen lässt sich daraus folgern. (b) Beantworten Sie die gleiche Frage für die Voraussetzung g(n) = Ω(f (n) log n). (c) Ein Algorithmus hat im schlimmsten Fall die Laufzeit Θ(n2 ). Ist es möglich, dass er für manche Eingaben in O(n) Zeit läuft? (d) Ein Algorithmus hat im schlimmsten Fall die Laufzeit Θ(n2 ). Ist es möglich, dass er für alle Eingaben in O(n) Zeit läuft? (e) Welche der folgenden Aussagen ist wahr? (a) 3n = O(2n ), (b) log 3n = O(log 2n ), (c) 3n = Ω(2n ), (d) log 3n = Ω(log 2n ). (f) Ordnen Sie folgende Funktionen nach der Geschwindigkeit des Wachstums, und fassen Sie Funktionen, die asymptotisch gleich stark wachsen (f (n) = Θ(g(n))), zusammen: 2n , n2 log2 (n2 ), n2 log2 n, √ 2 n , (log2 n)2 , n2 + n − 1, 5n2 + n log2 n, log3 n, 4n + n2 , n log2 (2n ), log2 n, n + 22n . 3. Wiederholungsübung zu Graphen Betrachten Sie den gerichteten Graphen G = (V, E) mit Knotenmenge V = {v1 , v2 , . . . , v10 } und Kantenmenge E = { (vi , vj ) | 1 ≤ i, j ≤ 10, j − i = 2 oder ggT(i, j) = 2 } wobei ggT der größte gemeinsame Teiler ist. Wieviele Kanten hat der Graph? Finden Sie den kürzesten Weg von v1 zu v8 . Wie viele kürzeste Wege von v1 zu v8 gibt es? Ist der Graph stark zusammenhängend? Bestimmen Sie seine starken Zusammenhangskomponenten. 1 4. Wiederholungsübung zur Wahrscheinlichkeit Beim folgenden Spiel wird ein Würfel viermal geworfen. Beim zweiten, dritten, und vierten Wurf bekommen Sie 5 Euro, wenn die Augenzahl höher als alle vorhergehenden Würfe ist. Wie groß ist die Wahrscheinlichkeit, dass beim dritten Wurf ein neuer Höchststand erreicht wird? Wie groß ist der Erwartungswert des Gewinns? Würde sich das Spiel lohnen, wenn Sie dafür 10 Euro Einsatz zahlen müssten? 5. Wiederholungsfrage zu Sortieralgorithmen Welche Algorithmen zum Sortieren kennen Sie? Welche Laufzeit und welchen Speicherbedarf haben diese Algorithmen? 6. Wiederholungsfrage zu Graphenalgorithmen Welche Algorithmen zum Bestimmen des kürzesten Weges in einem Graphen kennen Sie? Welche Laufzeit und welchen Speicherbedarf haben diese Algorithmen? Für welche Arten von Graphen und welche Daten sind sie anwendbar? 7. Wiederholungsaufgaben zu Rekursionen (a) Bestimmen Sie die Lösung der folgenden Rekursionsgleichung für T (n), und beweisen Sie Ihre Antwort durch vollständige Induktion: ( 1, für n = 1, T (n) = T (n − 1) + 4, für n > 1. (b) Bestimmen Sie für die Lösung S(n) der folgenden Rekursionsgleichung eine obere Schranke der Form S(n) ≤ Cn log2 n für eine geeignete Konstante C, und beweisen Sie Ihre Antwort durch vollständige Induktion: ( 3n, für n ≤ 5, S(n) = n 5n + 2 · S(b 2 c), für n > 5. Hinweis: Sie müssen C groß genug wählen, dass der Induktionsbeweis klappt. (c) Wie ändert sich die Konstante C, wenn in der Rekursion der Ausdruck 5n + 2 · S(b n2 c) durch 5n + S(b n4 c) + S(b 3n 4 c) ersetzt wird? 8. Speicherknappheit (zum Knobeln) In einem Feld a[1], a[2], . . . , a[n] der Länge n sind Werte aus der Menge {1, 2, . . . , n − 1} gespeichert. Nach dem Schubfachprinzip gibt es dann mindestens einen Wert, der mehr als einmal vorkommt. Finden Sie einen möglichst effizienten Algorithmus, der einen mehrfach vorkommenden Wert ausgibt, der dabei auf die Eingabe nur lesend zugreift und mit konstantem zusätzlichen“ Speicher auskommt. ” Das bedeutet: Es gibt nur eine feste Zahl von Registern (die Anzahl ist unabhängig von n), die geschrieben oder gelesen werden können. Jedes dieser Register kann eine ganze Zahl zwischen 0 und n speichern. Die gängigen Operationen auf diesen Registern können in konstanter Zeit durchgeführt werden. Das Eingabefeld kann gelesen, aber nicht verändert werden. Eine Laufzeit von O(n log n) ist nicht schwierig, es geht aber sogar in O(n) Zeit! 2 Höhere Algorithmik, WS 2012/13 — 2. Übungsblatt Abgabe: Freitag, 26. Oktober 2012, 10:15 Uhr 0. (0 Punkte) Fassen Sie stichwortartig den Inhalt der zwei ersten Vorlesungen zusammen. Diese Aufgabe ist Voraussetzung dafür, dass das Übungsblatt bewertet wird. 1. Schmutzige Tricks im Einheitskostenmaß (10 Punkte) (a) Für zwei ganzzahlige Vektoren x = (x1 , x2 , . . . , xn ) und y = (y1 , y2 , . . . , yn ) mit |xi |, |yi | ≤ M und einen Wert u > 2M betrachten wir die Zahlen a = x1 un−1 + x2 un−2 + · · · + xn−1 u + xn und b = y1 un−1 + y2 un−2 + · · · + yn−1 u + yn . Zeigen Sie: a = b genau dann, wenn x = y ist; a < b genau dann, wenn x lexikographisch kleiner als y ist. (Man kann also den Vergleich beliebig langer Vektoren durch den Vergleich einzelner Zahlen ersetzen. Warum funktioniert das nicht mehr für relle Vektoren?) (b) Anwendung: Entwerfen Sie einen Algorithmus, der für zwei gegebene Folgen ganzer Zahlen x = (x1 , x2 , . . . , xn ) und y = (y1 , y2 , . . . , ym ) (m ≥ n) in linearer Zeit“ ” entscheidet, ob x als Teilfolge (yi+1 , yi+2 , . . . , yi+m ) in y vorkommt (0 ≤ i ≤ m−n). Hinweis. Wie kann man die Zahl b für die Teilfolge (yi+1 , yi+2 , . . . , yi+m ) ausbessern, wenn i um 1 steigt?) 2. Programmieren einer Registermaschine, Horner-Schema (10 Punkte) Schreiben Sie ein Programm für die Registermaschine, das bei Eingabe von n, u und x die Zahl a aus Aufgabe 1a berechnet. (Beachten Sie, dass der einzige bedingte Befehl, den Sie verwenden können, die Form if A > 0 goto L“ hat.) ” Hinweis. Es ist hilfreich, sich den Algorithmus zuerst in einer höheren Programmiersprache oder in Pseudocode zu überlegen. Bestimmen Sie die asymptotische Laufzeit und den Speicherplatz (a) im Einheitskostenmaß und (b) im logarithmischen Kostenmaß. 3. (10 Punkte) Berechnen Sie eine asymptotische Schranke für die durch die Rekursion T (n) ≤ 2T (bn/2c) + O(n2 ), für n > n0 und T (n) ≤ C für n ≤ n0 gegebene Laufzeit eines Algorithmus, indem Sie den Rekursionsbaum aufstellen und ebenenweise aufsummieren. (Wenn Sie der Einfachheit halber zunächst annehmen, dass n eine Zweierpotenz ist, müssen Sie auch begründen, dass Ihr Ergebnis auch für andere Werte gilt.) 4. (0 Punkte) Berechnen Sie die ersten 10 Glieder der durch die Rekursion an = an−1 + an−2 + an−3 , für n > 3 und a1 = a2 = a3 = 1 gegebene Folge. 5. (0 Punkte) Bestimmen Sie die Anzahl der rekursiven Aufrufe der Funktion f (n) in Abhängigkeit von n, die das n-te Glied an der Folge aus Aufgabe 4 berechnet: def f (n): if n ≤ 3: return 1 else: return f (n − 1) + f (n − 2) + f (n − 3) Hinweis: für kleine n ausrechnen, Vermutung formulieren, und mit Induktion beweisen. 3 Höhere Algorithmik, WS 2012/13 — 3. Übungsblatt Abgabe: Freitag, 2. November 2012, 10:15 Uhr 0. (0 Punkte) Fassen Sie stichwortartig den Inhalt der beiden letzten Vorlesungen zusammen. Diese Aufgabe ist, wie auf allen Übungsblättern, Voraussetzung dafür, dass das Übungsblatt bewertet wird. 1. Rekursion (10 Punkte) In der Vorlesung wurde die Rekursion T (n) = T (bn/2c) + T (dn/2e) + 2, für n > 2 mit den Anfangswerten T (1) = 0, T (2) = 1 betrachtet und die Formel T (n) = 3n/2 − 2 für Zweierpotenzen der Form n = 2k ausgerechnet. (a) Bestimmen Sie eine Formel für die Werte der Form n = 3 · 2k . (b) Beweisen Sie durch vollständige Induktion die folgende Ungleichung für alle n ≥ 2. 1 ≤ T (n) − T (n − 1) ≤ 2 (c) Zeigen Sie, dass durch diese Ungleichungen und die für n = 2k und n = 3 · 2k bekannten Werte von T (n) alle Werte von T (n) bestimmt sind. (d) Beweisen Sie eine Schranke T (n) ≤ cn für ein möglichst kleines c. 2. Eine alte Klausuraufgabe (0 Punkte) Gegeben ist eine unsortierte Folge von n verschiedenen Zahlen a1 , . . . , an . Entwerfen Sie einen effizienten Algorithmus, der die Anzahl der Paare (i, j) mit 1 ≤ i < j ≤ n und 3ai = aj bestimmt. Welche Laufzeit und welchen Speicherbedarf hat Ihr Algorithmus? 3. Stichwortsuche. Der kleinste Textausschnitt (0 Punkte) Entwerfen und analysieren Sie einen effizienten Algorithmus für folgendes Problem: Gegeben sind zwei sortierte Folgen A = (a1 , a2 , . . . , am ) und B = (b1 , b2 , . . . , bn ). Jede Folge ist ein Index, der angibt, an welchen Stellen ein bestimmtes Wort in einem Text vorkommt. Gesucht ist das kleinste Intervall [u, v], das sowohl Elemente von A als auch Elemente von B enthält. Beispiel: Das Wort divide kommt an den Positionen A = (11, 16, 42, 101, 125, 767) vor, conquer an den Positionen B = (2, 44, 289, 300). Dann ist [42, 44] der kleinste Textausschnitt, der beide Wörter enthält. 4. (10 Punkte) Lösen Sie die vorige Aufgabe für drei Eingabefolgen A, B, C. 5. (10 Punkte) Bestimmen Sie die Anzahl T (n) der rekursiven Aufrufe der Funktion g(n), die das n-te Glied bn der durch die Rekursion bn = bn−1 + 2bn−2 , für n > 2 und b1 = 2, b2 = 5 gegebene Folge nach dieser Rekursionsformel (analog zu Aufgabe 5 vom 2. Übungsblatt) rekursiv berechnet. Zeichnen Sie den Rekursionsbaum für die Berechnung von b5 . 6. Rekursionsgleichungen (0 Punkte) Geben Sie, wenn möglich, möglichst genaue untere und obere asymptotische Schranken für die Lösung T (n) der folgenden Rekursionen an. Die Rekursionen gelten für alle n ≥ n0 , für ein festes n0 . √ (a) T (n) = 2 · T (bn/4c) + Θ( n) (c) T (n) = 2 · T (bn/3c) + O(n) (b) T (n) = 2 · T (n − 1) + 1 (d) T (n) = 3 · T (dn/3e) + O(n) 4 Höhere Algorithmik, WS 2012/13 — 4. Übungsblatt Abgabe: Freitag, 9. November 2012, 10:15 Uhr Programmieraufgabe Nr. 3 bis 16. November, 10:00 Uhr 0. Fassen Sie stichwortartig den Inhalt der beiden letzten Vorlesungen zusammen. Diese Aufgabe ist Voraussetzung dafür, dass das Übungsblatt bewertet wird. 1. Verschiebung des Parameter- und Wertebereichs (10 Punkte) Betrachten Sie folgende Rekursionsgleichung: f (n) = 2f (b n+3 2 c) − 5 (für n ≥ 4), f (1) = f (2) = f (3) = 3 (a) Definieren Sie eine neue Funktion g(n) = f (n)+A mit einer geeigneten Konstanten A, sodass der Term −5 in der entstehenden Rekursion für g(n) verschwindet. (b) Definieren Sie eine neue Funktion h(n) = g(n + B), sodass auch der additive Term +3 im Argument von g verschwindet, sodass auf der rechten Seite nur h(b n2 c) steht, lösen Sie diese Rekursion, und geben Sie eine Formel für f (n) an. (c) Lösen Sie die Rekursionsgleichung q(n) = q(b n+3 2 c) + 1 (für n ≥ 4), q(1) = q(2) = q(3) = 1. 2. (10 Punkte) Entwerfen Sie einen Algorithmus zum Bestimmen des Medians von 5 Elementen, der mit höchstens 8 Vergleichen auskommt. (Für jeden eingesparten Vergleich gibt es 1 Zusatzpunkt.) Der Median ist das mittlere Element in sortierter Reihenfolge, in diesem Fall also das drittgrößte. 3. Programmieraufgabe: Multiplikation langer Zahlen nach Karatsuba (20 Punkte, Abgabe bis Freitag 16.11., 10:00 Uhr) Programmieren Sie die Multiplikation beliebig langer positiver Binärzahlen mit dem Karatsuba-Algorithmus in Java. Sie können das Paket java.math.BigInteger zum Einlesen und Ausgeben (und zum Testen) verwenden, aber Sie dürfen natürlich nicht die Multiplikations- und Divisionsroutinen dieses Pakets oder eines anderen Pakets verwenden. Sie können die rekursive Zerlegung fortführen wahlweise (a) bis auf einzelne Bits oder (b) bis zur einer Größe, wo man die Multiplikation mit den eingebauten int-Zahlen durchführen kann. Ihr Programm soll vorzeichenlose Dezimalzahlen von der Standardeingane einlesen (eine Zeile pro Zahl) und nach jeweils zwei gelesenen Zahlen das Produkt ausgeben. Testen Sie Ihr Programm mit jeweils 10 zufälligen Zahlenpaaren der Längen n = 1000, 2000, 3000, . . . , 10000 Bits, und ermitteln sie für jede Länge die mittlere Laufzeit in Millisekunden. Stellen Sie die Ergebnisse graphisch dar. Schätzen Sie empirisch die Laufzeit ab, indem Sie die Parameter C und α der Formel T = Cnα an ihre experimentellen Daten anpassen. Anleitung zur Abgabe der Programmieraufgabe: Laden Sie das ausführbare Programm als jar-Datei und die Quelltexte (zum Beispiel als zip-komprimierten Ordner) auf dem Sakai-Portal1 der Veranstaltung hoch. Ihr Programm muss mit > java -jar Multiplikation.jar gestartet werden können. Fügen Sie eventuell eine README-Datei hinzu, wenn die Benützung nicht selbsterklärend ist. 1 http://sakai.imp.fu-berlin.de:8080/portal 5 4. Exponentielle Suche (0 Punkte) In einem sortierten Feld (a1 , a2 , . . . , an ) soll ein Wert b gefunden werden. (a) Zeigen Sie, dass man b in O(log i) Zeit finden kann, wenn b das i-kleinste Element ist. Man vergleicht dazu b mit den Elementen an Position 1,2,4,8,. . . , und am Schluss fährt man mit binärer Suche fort. (b) Nehmen wir an, wir haben eine Anfangsschätzung, dass sich b ungefähr an Position j befindet. Zeigen Sie, wie man b in O(log(2 + |i − j|)) Vergleichen findet. 5. 20 Fragen (0 Punkte) Jemand denkt sich eine ganze Zahl n zwischen 2 und 166 aus. Wieviele Ja-Nein-Fragen benötigt man im schlimmsten Fall, um den kleinsten Teiler (größer als 1) von n herauszufinden?2 6. Knobelaufgabe (0 Punkte) Eine Funktion f : U → U erzeugt für einen Ausgangswert x0 ∈ U die unendliche Folge x1 = f (x0 ), x2 = f (x1 ) usw. Die auf Computern verwendeten (Pseudo-)Zufallszahlen werden zum Beispiel oft mit einer solchen Methode erzeugt. Falls der Bereich U endlich ist, führt diese Folge irgendwann in einen Kreis und wiederholt sich ab da periodisch: xi+k = xi für alle i ≥ a, und die Elemente x0 , x1 , . . . , xa−1 kommen alle nur einmal vor. Finden Sie einen effizienten Algorithmus, der die Länge a ≥ 0 der Vorperiode und die (kleinstmögliche) Periodenlänge k ≥ 1 in O(a + k) Zeit bestimmt. Wieviel Speicher benötigt Ihr Algorithmus? Können Sie auch mit konstantem Speicher auskommen? (Dabei soll eine Speicherzelle ein Element von U oder eine Zahl zwischen −|U | und |U | enthalten können.) Ihr Programm kann die Funktion f aufrufen, um f (x) zu berechnen, aber es kann sonst keine Eigenschaften der Funktion f , (die vielleicht durch ein kompliziertes Programm gegeben ist) verwenden. Diese Aufgabe kann übrigens helfen, eine Lösung für Aufgabe 8 vom ersten Übungsblatt mit linearer Laufzeit zu finden. Hinweis: Beginnen Sie mit dem Programmstück x := x0 ; y := x0 ; i := 0; repeat { x := f (x); y := f (f (y)); i := i + 1; } until x = y; 7. Paarweise Kommunikation in Runden. Knobelaufgabe (0 Punkte) Acht verteilte Sensoren messen jeweils für sich die Niederschlagsmenge. Am Ende des Tages (um 24 Uhr) treten sie miteinander in Kontakt, mit dem Ziel, dass die gesamte Niederschlagsmenge (die Summe der Messwerte) allen Sensoren bekannt wird. Sie können dazu paarweise miteinander kommunizieren: Zwei Sensoren können eine Punktzu-Punkt-Funkverbindung aufbauen, und dann beliebig viele Daten austauschen. Dieser Austausch dauert eine Minute (inklusive Auf- und Abbau der Verbindung und Sicherung des Austauschs). Die betroffenen Sensoren können in dieser Zeit nicht mit anderen Sensoren kommunizieren, aber andere Sensoren können trotzdem untereinander (paarweise) Daten austauschen. (a) Wieviele Kommunikationsrunden (Minuten) sind zum vollständigen Austausch der Informationen notwendig? (b) Wieviele Runden braucht man bei 5 Sensoren? (c) bei 7 Sensoren? (d) bei 10 Sensoren? 2 http://domino.research.ibm.com/Comm/wwwr_ponder.nsf/challenges/November2009.html 6 Höhere Algorithmik, WS 2012/13 — 5. Übungsblatt Abgabe: Freitag, 16. November 2012, 10:15 Uhr, Aufgabe Nr. 2 bis 23. November. 0. Fassen Sie stichwortartig den Inhalt der beiden letzten Vorlesungen zusammen. 1. Wechselgeld (5 Punkte) Entwerfen Sie einen effizienten Algorithmus, der berechnet, wie ein gegebener Geldbetrag mit der kleinstmöglichen Anzahl von Münzen ausgezahlt werden kann. Die Eingabe ist die zu zahlende Summe sowie die Werte der zur Verfügung stehenden Münzen. Beispiele: 64 1 2 5 10 20 50 100 200 22 12 1 18 3 5 → Ausgabe: 4 Münzen: 64=50+10+2+2 → Ausgabe: 3 Münzen: 22=12+5+5 Nehmen Sie an, dass von jeder Münzart ein genügend großer Vorrat vorhanden ist. 2. (Programmieraufgabe, 10 Punkte, Abgabe bis 23. 11., 10:00 Uhr) Schreiben Sie ein Java-Programm für die vorige Aufgabe. Es genügt, wenn Sie eine optimale Lösung ausgeben. Wenn Sie alle Optimallösungen ausgeben, gibt es 5 Zusatzpunkte. 3. Das Rucksackproblem (10 Punkte) Betrachten Sie die folgende Variante des Rucksackproblems: Aus n Arten von Gegenständen mit gegebenen Gewichten gi ∈ R>0 und Werten wi ∈ {1, 2, . . . , Wmax } sollen Gegenstände mit Gesamtgewicht höchstens G und möglichst großem Gesamtwert ausgewählt werden. Dabei Pnkann man beliebig viele Gegenständ jeder Pn Art nehmen. Das Gesamtgewicht ist also i=1 xi gi und der Gesamtwert ist W = i=1 xi wi , wenn man xi ∈ N≥0 Exemplare vom Typ i nimmt. Entwerfen Sie für dieses Problem einen effizienten Algorithmus mit dynamischer Programmierung. Beachten Sie, dass als Gewichte reelle Werte zugelassen sind; daher müssen Sie die Teilprobleme anders ansetzen als in der Vorlesung. Sie können aber annehmen, dass der Algorithmus die Gewichte korrekt addieren und vergleichen kann. Definieren Sie die Teilprobleme, und geben Sie die Rekursionsgleichungen an. Formulieren Sie den Algorithmus zur Bestimmung des optimalen Wertes. Die Ausgabe der optimalen Lösung müssen Sie nicht formulieren. Welche Laufzeit hat Ihr Algorithmus? 4. Zum Nachdenken (0 Punkte) Wie hängen die beiden vorigen Aufgaben zusammen? 5. Rekursionen (5 Punkte) Lösen Sie folgende Rekursionen mit dem Master-Theorem. Die angegebenen Gleichungen gelten jeweils für n > n0 , und für n ≤ n0 wird T (n) ≤ c0 angenommen. Bestimmen sie asymptotische obere und untere Schranken für T (n) und versuchen Sie, wenn möglich, Schranken der Form T (n) = Θ(·) herzuleiten. (a) T (n) = 2 · T (n/3) + Θ(log n) √ (b) T (n) = 2 · T (n/4) + Θ( n) (c) T (n) = 2 · T (n/2) + Θ(2 √ (d) T (n) = 3 · T (n/2) + Θ(n log n) (e) T (n) = 4 · T (n/4) + Θ(n) n) 6. Triangulierungen und Bäume (0 Punkte) Wieviele Triangulierungen hat ein konvexes n-Eck, für n = 3, 4, 5, 6? Wieviele binäre Bäume mit n − 1 inneren Knoten (alle vom Grad 2) und n Blättern gibt es, für n = 1, 2, 3, 4? 7 7. Optimale Triangulierung (0 Punkte) Modifizieren Sie den Algorithmus für die kürzeste Triangulierung eines konvexen Polygons aus der Vorlesung so, dass er die Triangulierung bestimmt, bei der die Summe aller Winkel der Dreiecke möglichst klein ist. In welcher Zeit können Sie eine optimale Triangulierung bestimmen? 8. Wettrennen (0 Punkte) Es gibt ein einfaches Spiel, das man auch um die Wette spielen kann: Man malt auf einem karierten Papier eine Rennstrecke und versucht dann, möglichst schnell von der Startlinie zur Ziellinie zu fahren, indem man von Gitterpunkt zu Gitterpunkt springt. Standardmäßig legt man die gleiche Strecke wie zwischen den beiden letzten Punkten zurück ( konstante Geschwindigkeit“). ” Man kann aber bis zu ±1 Einheit in x-Richtung und ±1 Einheit in y-Richtung davon abweichen. Das Bild zeigt ein Beispiel für eine gültige Bahn. Entwerfen Sie einen effizienten Algorithmus zur Berechnung einer schnellsten Bahn, und analysieren Sie die Laufzeit. Schreiben Sie ein Programm, das die schnellste Bahn (nicht nur ihre Länge) bestimmt. Die Eingabe besteht aus Paaren x y von ganzen Zahlen, die die Koordinaten der Punkte des Spielfeldes angeben.1 Die Startgerade besteht aus den Punkten mit kleinster xKoordinate. Der erste Schritt geht von einem beliebigen Punkt der Startgeraden zu einem Nachbarpunkt. Die Zielgerade besteht aus den Punkten mit größter x-Koordinate und muss genau erreicht werden, aber die Größe des letzten Schrittes ist egal. 9. Der kleinste Textausschnitt (0 Punkte) Aufgabe 3 vom 3. Übungsblatt kann man in O(m + n) Zeit durch Verschmelzen der beiden sortierten Listen lösen. Wenn m und n sehr verschiedenen Größenordnungen haben (m ≤ n) und die Eingabedaten in einem Feld gespeichert sind, dann geht es schneller in O(m log n) Zeit, mit binärer Suche. n Man kann die Laufzeit sogar auf O(m log m ) drücken, indem man exponentielle Suche (Aufgabe 4b vom 4. Übungsblatt) zu Hilfe nimmt. Überlegen Sie, wie das geht, und beweisen Sie die Laufzeitschranke. 10. Asymptotischer Laufzeitvergleich für die vorige Aufgabe (0 Punkte) Man kann, je nach Größe von m und n, das bessere der Verfahren Verschmelzen (in linearer Zeit) und wiederholte binäre Suche auswählen und erhält eine Laufzeit von O(min{m + n, m log n)} für n ≥ m. Gibt es überhaupt Parameterwerte m und n, für n die die Laufzeit O(m log m ) asymptotisch besser als dieses kombinierte Verfahren ist? 11. Untere Schranken (0 Punkte) Die Anzahl der möglichen Ergebnisreihenfolgen beim Verschmelzen zweier sortierter m+n Folgen der Länge m und n ist m+n . Daher ist dlog e eine untere Schranke für 2 m m jeden vergleichsbasierten Algorithmus zum Verschmelzen. Zeigen Sie, dass für m ≤ n m+n n log = Θ(m log m ) m ist, und dass der Algorithmus in Aufgabe 9 daher asymptotisch optimal ist. 1 Die Daten für das Beispiel stehen auf http://www.inf.fu-berlin.de/lehre/WS12/HA/rennbahn.txt. Sie wurden mit dem grafischen Python-Programm rennbahn.py erzeugt. 8 Höhere Algorithmik, WS 2012/13 — 6. Übungsblatt Abgabe: Freitag, 23. November 2012, 10:15 Uhr 0. Fassen Sie stichwortartig den Inhalt der beiden letzten Vorlesungen zusammen. 1. Viereckszerlegung eines konvexen Polygons (0 Punkte) Ein konvexes n-Eck soll durch Diagonalen möglichst kleiner Gesamtlänge in Vierecke zerlegt werden. Entwerfen Sie einen effizienten Algorithmus für dieses Problem. Analysieren Sie die Laufzeit und den Speicherbedarf. (Zielen Sie auf O(n4 ) Zeit. Es geht auch in O(n3 ) Zeit.) Jan 12 2. Produktionsplanung (10 Punkte) Feb 3 Mär 1 Die Firma Zopel schätzt für die Monate des nächsten Jahres den Absatz an Apr 15 Knaster gemäß der nebenstehenden Tabelle ein. Als Produktionsleiter/in Mai 8 von Zopel können Sie sich in jedem Monat entscheiden, ob Sie Knaster Jun 25 herstellen oder nicht. Die Produktionskosten sind 50 Taler pro Tonne, plus Jul 2 zusätzlich 400 Taler Fixkosten, falls in diesem Monat überhaupt Knaster Aug 11 hergestellt wird. Der Knaster, der am Ende des Monats nicht gemäß der Sep 20 nebenstehenden Tabelle verkauft wird, kann zwischengelagert und später Okt 9 abgesetzt werden. Das Lagern kostet aber 17 Taler pro Tonne pro Monat. Nov 2 Beispiel: Wenn Sie alle 120 benötigten Tonnen Knaster im Januar produDez 12 zieren, kostet das 400 + 120 × 50 + 17 × (108 + 105 + 104 + · · · + 12) Taler. Berechnen Sie die optimale Herstellungs- und Lagerungsstrategie. Das Lager ist zu Beginn leer. Der Bedarf muss auf jeden Fall erfüllt werden. Entwerfen Sie einen Algorithmus, der auch für einen Zeithorizont von mehreren Jahren geeignet ist. Hinweis: Sie können auch von hinten nach vorne rechnen. 3. Isotone L∞ -Regression (0 Punkte) Für eine Eingabefolge (a1 , . . . , an ) soll eine aufsteigende Folge x1 ≤ x2 ≤ · · · ≤ xn gefunden werden, die maxi=1,...,n |xi − ai | minimiert. Denken Sie sich einen effizienten Algorithmus für dieses Problem aus. 4. Amortisierte Laufzeit eines Binärzählers (10 Punkte) Das folgende Programmstück zählt einen als Binärzahl (. . . b2 b1 b0 ) mit bi ∈ {0, 1} dargestellen Zähler um 1 hoch: i := 0; while bi = 1 do bi := 0; i := i + 1; bi := 1; Nehmen wir an, dass der Zähler auf 0 initialisiert ist und dann n-mal inkrementiert wird. Tk bezeichnet die Laufzeit für den k-ten Aufruf, wobei jedes Lesen oder Schreiben einer Binärstelle bi als eine Operation zählt. (a) Was ist die maximale Laufzeit f (n) = max1≤k≤n Tk eines einzelnen Aufrufs? Bestimmen Sie die exakte Anzahl von Zugriffen auf die Binärstellen. Pn (b) Zeigen Sie, dass die durchschnittliche Laufzeit g(n) = k=1 Tk /n der ersten n Aufrufe durch eine Konstante beschränkt ist. (Hinweis: Wie oft wird ein bestimmtes Bit bi betrachtet?) 9 Höhere Algorithmik, WS 2012/13 — 7. Übungsblatt Abgabe: Freitag, 30. November 2012, 10:15 Uhr 0. Fassen Sie stichwortartig den Inhalt der beiden letzten Vorlesungen zusammen. 1. Optimaler binärer Suchbaum (10 Punkte, eine ehemalige Klausuraufgabe) Bestimmen Sie einen optimalen binären Suchbaum für vier Schlüssel 1,2,3,4 mit folgenden Anfragehäufigkeiten: (p1 , p2 , p3 , p4 ) = (q0 , q1 , q2 , q3 , q4 ) = (1, (4, 0, 1, 1, 2, 0, 1) und 0) Dabei ist pi die Häufigkeit, mit der der Schlüssel i angefragt wird, und qi die Häufigkeit, mit der ein Schlüssel x mit i < x < i + 1 gesucht wird (i = 0, 1, 2, 3, 4). 2. Das Rundreiseproblem (10 Punkte) Beim Rundreiseproblem (Traveling Salesman Problem, TSP) wird eine Rundreise (oder Tour ) mit kürzester Gesamtlänge in einem Graphen mit Kantengewichten gesucht. Entwerfen Sie eine dynamische Programmierungslösung zur Berechnung der Länge L einer kürzesten Rundreise in einem (4 × n)-Gitter (als ungerichteter Graph betrachtet). Bezeichnen Sie die Kantenlängen der vertikalen Kanten (parallel zur Kante mit Seitenlänge 4) von oben nach unten mit ai , bi , ci für i = 1, . . . , n und die horizontalen Kanten von oben nach unten mit di , ei , fi , gi für i = 2, . . . , n. Definieren Sie passende Teilprobleme, erläutern Sie Ihren Ansatz und schreiben Sie exemplarisch die Rekursionsgleichung für zwei Fälle auf. Die Bestimmung der optimalen Rundreise müssen Sie nicht formulieren. Welche Laufzeit hat der Algorithmus, der die Rekursion löst? Hinweis: Als Teillösungen müssen Sie auch mit Teilrundreisen“ rechnen, die nicht bloß ” einzelne Wege sind. 3. (0 Punkte) Wieviele Rundreisen gibt es im (4 × n)-Gitter, für n = 2, 3, . . . , 10? 4. Münzwechsel (10 Punkte) (a) Formulieren Sie einen Greedy-Algorithmus für das Geldwechselproblem (Aufgabe 1 vom 5. Übungsblatt). (b) Konstruieren Sie Beispiele, wo dieser Algorithmus nicht die Optimallösung liefert. (c) Beweisen Sie, dass der Greedy-Algorithmus immer die Optimallösung findet, wenn für die Münzwerte a1 , a2 , . . . , ak gilt: a1 = 1 und jedes ai ist Teiler von ai+1 . 5. (0 Punkte) Beweisen Sie, dass der Greedy-Algorithmus für die Münzwerte 1, 2, 5, 10, 20, 50, 100, 200 der Euro-Münzen immer die Optimallösung findet. 6. (0 Punkte) Die Firma Borer möchte der Firma Zopel vom 6. Übungsblatt Konkurrenz machen. Sie hat aber andere Produktionsbedingungen. In jedem Monat kann entschieden werden, ob Knaster hergestellt wird oder nicht. Falls ja, dann werden dabei genau 20 Tonnen hergestellt. Die Kosten dafür sind 1000 Taler, plus zusätzlich 400 Taler für das Anfahren“ der Produktion, falls im Vormonat kein Knaster hergestellt wurde. ” Die Lagerkosten sind gleich wie für die Firma Zopel: 17 Taler pro Tonne pro Monat. Beispiel: Wenn Sie alle 120 benötigten Tonnen Knaster in den ersten sechs Monaten produzieren, kostet das 400 + 6 × 1000 + 17 × (8 + 25 + 44 + · · · + 12) Taler. Berechnen Sie die optimale Herstellungs- und Lagerungsstrategie mit denselben Randbedingungen und Absatzdaten wie für Aufgabe 2 vom 6. Übungsblatt. 10 Höhere Algorithmik, WS 2012/13 — 8. Übungsblatt Abgabe: Freitag, 7. Dezember 2012, 10:15 Uhr 0. Fassen Sie stichwortartig den Inhalt der beiden letzten Vorlesungen zusammen. Diese Aufgabe ist wie immer Voraussetzung dafür, dass das Übungsblatt bewertet wird. 1. Kürzeste Wege (0 Punkte) Berechnen Sie mit dem Bellman/Ford-Algorithmus die kürzesten Wege vom ersten Knoten zu allen anderen Knoten im Graphen mit der folgenden Kostenmatrix: − −3 ∞ 3 4 2 ∞ − ∞ ∞ 6 ∞ ∞ −4 − 8 ∞ ∞ (cij ) = ∞ ∞ ∞ − ∞ −3 ∞ ∞ −1 ∞ − ∞ ∞ ∞ −2 ∞ ∞ − Geben Sie die Distanzwerte und die Vorgängerzeiger nach jeder Iteration an. Zeichnen Sie die kürzesten Wege im Graphen. (Alle Wege zusammengenommen bilden einen Baum, den kürzesten-Wege-Baum.) 2. Inflation (10 Punkte) Sie benötigen für die Zukunft n verschiedene Software-Lizenzen, aber wegen beschränkter Mittel können sie nur eine Lizenz pro Monat kaufen. Zu Beginn sind alle Lizenzen gleich teuer, nämlich 1000 Euro. Sie steigen aber jeden Monat im Preis an, nämlich um den Faktor ri ≥ 1, i = 1, . . . , n. Die Lizenz für das Produkt i kostet also nach k Monaten 1000rik Euro. Sie sollen eine Reihenfolge festlegen, die die Gesamtkosten minimiert. Überlegen Sie sich eine passende Greedy-Strategie, und beweisen Sie, dass sie die Optimallösung liefert. 3. Deflation (0 Punkte) (a) Funktioniert der Algorithmus der vorigen Aufgabe auch dann, wenn die Ausgangspreise verschieden sind? Beweisen Sie es, oder finden Sie ein Gegenbeispiel. (b) Zeigen Sie, dass ein ähnlicher Algorithmus für Produkte, die verderblich sind oder aus der Mode kommen und daher im Preis abnehmen (ri < 1), nicht funktioniert, und zwar weder, wenn man die Produkte verkaufen will und den Gesamtpreis maximieren will, noch zur Minimierung des Gesamtpreises. 4. (Abwiegen, zum Knobeln, 0 Punkte) Sie haben 8 Münzen mit höchstens zwei unterschiedlichen Gewichten, und sie sollten feststellen, ob alle 8 Münzen gleich viel wiegen. Sie dürfen dreimal eine Balkenwaage benützen: Mit einer Wägung können Sie dabei bestimmen, welche von zwei Mengen von Münzen schwerer ist, oder ob sie das Gleiche wiegen. Bei einer schwierigeren Variante des Problems gibt es 10 Münzen. Ist es auch mit 11 oder 12 Münzen möglich?1 1 Peter Winkler, Puzzled: Weighed in the Balance, Communications of the ACM 55 (No. 11) (November 2012), 120, doi:10.1145/2366316.2366340 11 5. Kritischer Weg (10 Punkte): Beim Kuchenbacken oder bei einem Software- oder Bauprojekt müssen mehre Einzelaufgaben durchgeführt werden: den Teig 23 Minuten im Ofen backen; die Zutaten zusammenmischen; den Teig kneten, usw. Für manche Operationen ist eine Reihenfolge vorgegeben: Der Teig kann erst geknetet werden, wenn die Zutaten zusammengemischt sind. Andere Operationen können unahbängig voneinander in beliebiger Reihenfolge oder sogar gleichzeitig durchgeführt werden. Gegeben ist also • eine Liste L = {A1 , A2 , . . . , An } von Aufgaben. • Für jede Aufgabe Ai ist die Zeitdauer ti > 0 gegeben, sowie • die Menge Fi ⊆ L der Aufgaben, die abgeschlossen sein müssen, bevor Ai beginnen kann. Fi kann auch leer sein. Wir nehmen an, dass die Aufgaben schon in einer natürlichen Reihenfolge gegeben sind und dass daher Fi ⊆ {A1 , . . . , Ai−1 } ist. Wir nehmen auch an, dass genügend Helfer zur Verfügung stehen, sodass es keine Grenze für die Anzahl der parallel durchgeführten Aufgaben gibt. Schreiben Sie einen effizienten Algorithmus (in Pseudocode), der für jede Aufgabe den frühestmöglichen Beginnzeitpunkt und den frühestmöglichen Endzeitpunkt, bezogen auf den Arbeitsbeginn des Gesamtprojektes, berechnet. Verwenden Sie dynamische Programmierung. (Was sind die Teilprobleme, etc.) Analysieren Sie die Laufzeit und den Speicherbedarf Ihres Algorithmus. 6. Optimale Zuordnung (10 Punkte) Drei Aufgaben A1 , A2 , A3 sollen durch drei verschiedene Leute erledigt werden. Es stehen 5 Personen P1 , . . . , P5 zur Auswahl, die für verschiedene Aufgaben verschieden gut geeignet sind. Die nebenstehende Tabelle gibt an, wie lange jede Person Pj für jede Aufgabe Ai brauchen würde. cij P1 P2 P3 P4 P5 A1 18 16 15 12 16 (a) Formulieren Sie einen Greedy-Algorithmus für die A2 7 6 9 8 7 Bestimmung einer Zuordnung von Personen zu AufA 5 6 6 4 6 3 gaben. Das Ziel ist eine kleine Summe der Arbeitszeiten. Jede Person kann höchstens eine Aufgabe übernehmen. Überlegen Sie sich geeignete Datenstrukturen, und analysieren Sie die Laufzeit Ihres Algorithmus in Abhängigkeit von der Anzahl m der Aufgaben und der Anzahl n der Personen (n ≥ m). (b) Wenden Sie Ihren Algorithmus auf das obige Beispiel mit m = 3 und n = 5 an. (c) Konstruieren Sie für jedes m und n ein Beispiel, bei dem Ihr Algorithmus nicht die optimale Lösung liefert. 7. Stichwortsuche. Der kleinste Textausschnitt (0 Punkte) Verallgemeinern Sie Aufgabe 3 vom 3. Übungsblatt auf mehr als zwei Stichwörter: Gegeben sind k sortierte Listen von Zahlen, und gesucht ist das kleinste Intervall, das ein Element aus jeder Liste enthält (das kürzeste überdeckende Intervall). Hinweis. Ein möglicher Ansatz besteht darin, der Reihe nach für jede vorkommende Zahl x das kleinste überdeckende Intervall zu bestimmen, das bei x beginnt. Können Sie Ihren Algorithmus so erweitern, dass er alle minimalen überdeckenden Intervalle bestimmt? Das sind alle jene Intervalle, die kein kleineres überdeckendes Intervall enthalten. 12 Höhere Algorithmik, WS 2012/13 — 9. Übungsblatt Abgabe: Freitag, 14. Dezember 2012, 10:15 Uhr 0. Fassen Sie stichwortartig den Inhalt der beiden letzten Vorlesungen zusammen. 1. Das Wurmspiel, dynamische Programmierung (0 Punkte) Spielregel: Eine Spielerin darf beliebig oft mit jeweils N = 2 Würfeln würfeln. Nach einem Wurf kann sie sich eine der geworfenen Augenzahlen 1–6 auswählen und erhält die Gesamtaugenzahl der Würfel mit dieser Zahl gutgeschrieben. Diese Augenzahl ist dann allerdings für die Zukunft gesperrt und kann nicht mehr gewählt werden. Die Spielerin kann sich jederzeit entscheiden, nicht mehr zu würfeln. Sie erhält dann den gesamten gutgeschriebenen Punktbetrag in Euro. Wenn Sie jedoch würfelt und alle geworfenen Augen bereits gesperrt sind, hat sie verloren und muss 5 Euro zahlen. Berechnen Sie den Erwartungswert des Gewinnes, wenn die Spielerin optimal spielt. Die Lösung erfordert einen Computer. Wenn man Würfel mit Augenzahlen 1,2,3,1,2,3 annimmt, dann ist es per Hand (und Taschenrechner) zu schaffen, aber mühsam. Lösen Sie das Problem auch für N = 3 Würfel. 2. Rekursionsgleichungen in einen Algorithmus umformulieren (10 Punkte) (a) (5 Punkte) Schreiben Sie ein effizientes Programm in Pseudocode, das bei Eingabe von n > 0 und t > 0 den Wert der Funktion fnn (t) berechnet, die durch die folgenden Rekursionsgleichungen gegeben ist. Ihr Programm darf keine Rekursion verwenden und darf nur normale“ Variablen verwenden, die keine Werte wie ∞ ” oder −∞ speichern können. fij (k) = max{fi,j−k (i − k) + k 2 , fi−1,j (k + 1) − fi−k,j (k − 1)}, für i, j, k > 0 fij (0) = i, für alle i, j fij (k) = k, für k > 0 und i ≤ 0 fij (k) = −∞, für k < 0 oder (j ≤ 0 < i und k > 0) Hinweis: Es geht mit drei geschachtelten Schleifen. Schätzen Sie die Laufzeit Ihres Programmes im Einheitskostenmaß in Abhängigkeit von n und t ab. (b) (5 Punkte) Programmieren Sie Ihr Programm in Java, wenn nötig unter Verwendung des Paketes java.math.BigInteger. Ihr Programm soll für n, t ≤ 50 korrekte Ergebnisse berechnen. 3. Zeitplanung als längstes-Wege-Problem (10 Punkte) Zeigen Sie, dass das Zeitplanungsproblem von Aufgabe 5 vom 8. Übungsblatt (Bestimmung der frühestmöglichen Startzeiten fi ) als längster Weg von einem Startknoten zu allen anderen Knoten in einem geeigneten Graphen definiert werden kann. Was sind die Knoten dieses Graphen, was sind die Kanten, und welche Gewichte haben die Kanten? Was ist der Startknoten? Was ist die Bedeutung einer Kante (j, k) mit Gewicht cjk in Bezug auf die gesuchten Größen fi ? 4. Zeitplanung mit oberen Schranken für die Verzögerung (0 Punkte) Bei manchen Zeitplanungsproblemen kann es auch obere Schranken für den zeitlichen Abstand zwischen Ereignissen geben. Zum Beispiel: Die Weiterverarbeitung (Aufgabe Y ) eines Zwischenprodukts, das beim Prozessschritt X entsteht, muss spätestens 13 dreißig Minuten nach Ende von Aufgabe X beginnen, weil das Zwischenprodukt verderblich ist oder zu sehr abkühlt. Oder es gibt einen Prozessschritt Z, dessen Dauer man so kontrollieren kann, dass er zwischen 60 und 90 Minuten dauert. Das heißt, das Ende von Z ist spätestens 90 Minuten nach dem Beginn. Erweitern Sie das längste-Wege-Modell von Aufgabe 3 auf diese Bedingungen. Durch welche Kanten kann man diese neuen Bedingungen darstellen? (Der entstehende Graph kann auch Kreise und negative Kanten haben.) 5. (10 Punkte) Für welche der folgenden Operationen ⊕ und auf einer Grundmenge S gelten die folgenden beiden Distributivgesetze? a (b ⊕ c) = (a b) ⊕ (a c) (a ⊕ b) c = (a c) ⊕ (b c) Geben Sie Beweise oder Gegenbeispiele an. (a) S = R ∪ {−∞, ∞}, ⊕ = max und = min (b) S = R ∪ {−∞}, ⊕ = + und = max (c) S = R2 , = elementweises +: (a1 , a2 ) (b1 , b2 ) = (a1 + b1 , a2 + b2 ), und ⊕ = das lexikographische Minimum: für a1 < b1 a2 , (a1 , a2 ) ⊕ (b1 , b2 ) = (min{a1 , b1 }, c), mit c = b2 , für b1 < a1 min{a2 , b2 }, für a1 = b1 6. (0 Punkte) Bestimmen, Sie, wenn möglich, die neutralen Elemente bezüglich der Operationen ⊕ und aus der vorigen Aufgabe: Es soll also n ⊕ x = x ⊕ n = x für alle x ∈ S gelten, beziehungsweise e x = x e = x. 7. Sicherste Wege (0 Punkte) In einem Graphen ist für jede Kante (i.j) eine Ausfallswahrscheinlichkeit pij zwischen 0 und 1 gegeben, mit der die Kante nicht zur Verfügung steht. Wir nehmen an, dass die Ausfälle der Kanten (vollständig) unabhängig stattfinden. Gesucht ist von jedem Startknoten s zu jedem Zielknoten t ein Weg, der mit der kleinsten Wahrscheinlichkeit ausfällt. (a) Modifizieren Sie den Algorithmus von Bellman/Ford so, dass er von einem Startknoten zu allen anderen Knoten die geringste Ausfallswahrscheinlichkeit eines Weges bestimmt. (b) Lösen Sie Aufgaben 5 und 6 für die entsprechenden Operationen ⊕ und , mit S = [0, 1]. (c) Wie kann man das Problem auf ein klassisches kürzestes-Wege-Problem zurückführen? Kann man es dann mit dem Algorithmus von Dijkstra lösen? 8. Wahr oder falsch? (0 Punkte) Wenn man alle Kantengewichte eines Graphen (a) quadriert, (b) mit einer Konstanten α > 0 multipliziert, (c) zu ihnen eine Konstante β > 0 addiert, dann bleibt (i) der kürzeste Weg zwischen zwei Knoten s und t, (ii) der kürzeste Hamiltonsche Kreis, (ii) der kürzeste Hamiltonsche Weg, (iv) der zusammenhängende Teilgraph, der alle Knoten verbindet, mit dem kürzesten Gesamtgewicht, (v) der kürzeste Spannbaum unverändert. Unterscheiden Sie die Fälle, wo die alle Ausgangsgewichte positiv sind oder beliebig sein können. 14 Höhere Algorithmik, WS 2012/13 — 10. Weihnachtsübungsblatt Freiwillige Abgabe: Montag, 7. Januar 2010, 10:15 Uhr 0. Blicken Sie zurück. Welche Probleme wurden bisher in der Vorlesung behandelt? Welche Techniken, welche algorithmischen Prinzipien haben Sie geübt? Welche Algorithmen haben Sie kennengelernt? Welche Datenstrukturen haben Sie besprochen? 1. Hamiltonkreise (6 Punkte). Wieviele Hamiltonkreise hat das (3 × n)-Gitter, für n = 2, 3, 4, 5, 6, 7, 8, 9, 10? Wieviele Hamiltonkreise hat das (2×n)-Gitter, für n = 2, 3, 4, 5, 6? 2. Das gebrochene Rucksackproblem (0 Punkte) Beim gebrochenen Rucksackproblem sind die Gegenstände beliebig teilbar, wie Wasser oder Mehl. Man kann vom Gegenstand i einen P beliebigen gebrochenen Anteil xi ∈ [0, 1] nehmen. Man soll also den Gesamtwert W = ni=1 xi wi unter den Nebenbedingungen Pn i=1 xi gi ≤ G und 0 ≤ xi ≤ 1 maximieren. Beweisen Sie, dass der Greedy-Algorithmus für dieses Problem die Optimallösung liefert, wenn man die Gegenstände zuvor geeignet sortiert. 3. Optimaler binärer Suchbaum (6 Punkte) (a) Formulieren Sie einen Greedy-Algorithmus zur Bestimmung eines binären Suchbaum für n Schlüssel mit Anfragehäufigkeiten p1 , . . . , pn und q0 , . . . , qn (siehe Aufgabe 1 vom 7. Blatt), der die mittlere Suchzeit möglichst klein machen sollte. (b) Konstruieren Sie ein Beispiel, wo Ihr Algorithmus nicht den optimalen binären Suchbaum findet. 4. (6 Punkte) Nehmen wir unrealistischerweise an, ich weiß für jeden Tag T1 , T2 , . . . , T365 des nächsten Jahres, wie oft ich an diesem Tag die öffentlichen Verkehrsmittel benütze. Eine Einzelfahrt kostet e, eine Tageskarte kostet t, eine Wochenkarte (7 beliebige aufeinanderfolgende Tage) kostet w, und 30 beliebige aufeinanderfolgende Tage (eine Mo” natskarte“) kosten m. (Die Karten sind nicht auf andere Personen übertragbar.) Entwerfen Sie einen Algorithmus, der die billigste Möglichkeit berechnet, wie man an den angegebenen Tagen fahren kann. Welche Laufzeit hat ihr Algorithmus, wenn es n Tage und k Arten von Zeitkarten gibt? 5. Untere Schranken (6 Punkte). Ein Gegenspieler aus dem Publikum merkt sich aus einem Kartenstapel mit 52 Karten eine Karte. Sie sollen diese Karte bestimmen. Sie dürfen dazu die Karten in drei Haufen teilen, und der Gegenspieler verrät Ihnen dann, in welchem Stapel die gesuchte Karte ist. Nach wievielen Wiederholungen dieses Vorgangs können Sie die ausgesuchte Karte mit Sicherheit bestimmen? Geben Sie eine Strategie an, und beweisen Sie, dass es nicht besser geht. (Sie sollen also beweisen, dass es keine bessere Strategie gibt, die im schlimmsten Fall weniger Abfragen macht als Ihre Strategie (eine untere Schranke für (die Laufzeit im schlimmsten Fall) für (jeden Algorithmus für) das Problem). Es ist nicht nach einer unteren Schranke für Ihren Algorithmus im besten Fall gefragt.) 6. Dynamische Programmierung (6 Punkte) Berechnen Sie im nebenstehenden gerichteten Graphen die Anzahl der Wege von der Ecke r zur Spitze des Baumes, wo der Stern angeheftet ist. Bestimmen Sie auch den Weg mit der kleinsten Anzahl von Kanten. 15 r Höhere Algorithmik, WS 2012/13 — Freiwillige Probeklausur Abgabe: Freitag, 21. Dezember 2012, 11:00 Uhr 1. Matrizenmultiplikation (10 Punkte): Das Matrizenprodukt ist assoziativ. Ein Produkt von k Matrizen P = A1 · A2 · A3 · · · Ak kann daher auf verschiedenen Arten durch paarweise Matrizenmultiplikation berechnet werden, zum Beispiel von links nach rechts. Wir nehmen an, dass das Produkt einer (m× n)-Matrix mit einer (n × p)-Matrix mit der gewöhnlichen Methode ausgerechnet wird, die mnp Multiplikationen von Zahlen (und geringfügig weniger Additionen) erfordert. Ai ist eine (mi−1 × mi )-Matrix, für gegebene Dimensionen m0 , m1 , . . . , mk . Formulieren Sie einen dynamischen Programmierungsalgorithmus zur Bestimming der Reihenfolge, die die wenigsten Multiplikationen erfordert. Definieren Sie die Teilprobleme, und geben Sie die Rekursionsgleichungen an. Formulieren Sie anschließend den Algorithmus zur Bestimmung der kleinstmöglichen Anzahl an Multiplikationen. Die Ausgabe der optimalen Lösung müssen Sie nicht formulieren. Welche Laufzeit hat Ihr Algorithmus? 2. (10 Punkte) Geben Sie, wenn möglich, möglichst genaue untere und obere asymptotische Schranken für die Lösung T (n) der folgenden Rekursionen an. Die Rekursionen gelten für alle n ≥ 10, T (n) = 1, für n < 10. √ (a) (4 Punkte) T (n) = 3 · T (bn/9c) + Θ( n) (b) (3 Punkte) T (n) = 2 · T (n − 1) + 2 (c) (3 Punkte) T (n) = 2 · T (b2n/5c) + n 3. Optimaler binärer Suchbaum (10 Punkte) Gegeben seien drei Schlüssel (S1 , S2 , S3 ) = (10, 12, 17) mit folgenden Anfragehäufigkeiten: (p1 , p2 , p3 ) = (q0 , q1 , q2 , q3 ) = (1, (8, 2, 1, 4) und 10, 4) Dabei ist pi die Häufigkeit, mit der der Schlüssel Si angefragt wird, und qi die Häufigkeit, mit der ein Schlüssel x mit Si < x < Si+1 gesucht wird (i = 0, 1, 2, 3, S0 = −∞, S4 = ∞). Bestimmen Sie den optimalen binären Suchbaum und seine mittlere Suchzeit mit dem Algorithmus aus der Vorlesung. 16 Höhere Algorithmik, WS 2012/13 — 12. Übungsblatt Abgabe: Freitag, 18. Januar 2013, 10:15 Uhr 0. Fassen Sie stichwortartig den Inhalt der fünf letzten Vorlesungen zusammen. Diese Aufgabe ist wie immer Voraussetzung dafür, dass das Übungsblatt bewertet wird. 1. (10 Punkte) Betrachten Sie die UNION-FIND-Datenstruktur mit Darstellung der Mengen als Bäume und Pfadkompression, und zwar mit (i) Vereinigung nach Rang, (ii) Vereinigung nach Größe, und (iii) Vereinigung in beliebiger Reihenfolge. Nehmen Sie an, dass auf einer Grundmenge von n Elementen, die zunächst Einzelmengen bilden, (a) alle k UNION-Operationen (k ≤ n − 1) vor allen m FIND-Operationen (b) alle m FIND-Operationen vor allen k UNION-Operationen stattfinden. In welchen dieser sechs Fälle ist die Gesamtlaufzeit linear, also O(m + k) (nachdem die Datenstruktur in O(n) Zeit initialisiert wurde)? 2. Fluten eines Tagbaus, digitale Landschaft (10 Punkte) Ein rechteckiges (m×n)-Feld a[i, j] gibt die Höhe einer Landschaft in Abhängigkeit von den Koordinaten i und j an, siehe nebenstehendes Beispiel. Wenn das Grundwasser bis zur Höhe h steigt, werden die Bereiche mit a[i, j] < h überflutet, und es entstehen Seen und Inseln. Ein See oder eine Insel muss dabei über gemeinsame Kanten zusammenhängen: Das heißt, das Quadrat a[i, j] ist nur mit vier anderen Quadraten a[i ± 1, j] und a[i, j ± 1] benachbart, aber zum Beispiel nicht mit a[i ± 1, j ± 1]. 91 92 10 45 51 25 79 44 87 24 47 82 75 66 63 19 36 7 56 77 15 93 90 55 23 94 18 69 58 17 61 73 30 46 6 27 59 39 65 2 28 33 99 1 89 76 72 57 71 78 43 11 26 74 67 53 49 37 12 81 41 98 22 (a) (0 Punkte) Finden Sie alle bei Höhe h = 50 überfluteten Gebiete im obigen Beispiel, und malen Sie die verschiedenen Seen und Inseln in verschiedenen Farben an. (b) (10 Punkte) Wir möchten die Entwicklung der Seen und Inseln bei wachsendem Wasserstand verfolgen, und insbesondere zu jeder Höhe h die Anzahl der Inseln und Seen wissen. Entwerfen Sie einen effizienten Algorithmus für dieses Problem, der die Quadrate a[i, j] in nach ihrem Wert sortierter Reihenfolge betrachtet und die lokalen Änderungen, die sich durch die Überflutung einer einzelnen Zelle ergeben, bearbeitet. Nehmen Sie eine UNION-FIND-Datenstruktur zu Hilfe. Nehmen Sie der Einfachheit halber an, dass alle Werte a[i, j] verschieden sind. Analysieren Sie die Laufzeit. (c) (0 Punkte) Erweitern Sie die Aufgabe so, dass zu jedem Wert h der größte See und die größte Insel bestimmt wird. Ähnliche Fragen treten auch bei der Bildverarbeitung auf; dort bedeutet a[i, j] den Grauwert eines Bildpunktes (Pixels). 3. Die Ackermannfunktion (5 Punkte) Eine Variante der Ackermannfunktion Ai (n) ist für i ≥ 0, n ≥ 1 so definiert: n + 1, für i = 0 3, für i = 1, n = 1 Ai (n) := 2, für i ≥ 2, n = 1 A (A (n − 1)), für i ≥ 1, n > 1 i−1 i 17 (a) (3 Punkte) Welche bekannten Funktionen sind A1 , A2 , A3 , A4 ? (b) (2 Punkte) Welche Werte stehen in den “Spalten” Ai (1) und Ai (2), (i ≥ 0)? (c) Betrachten Sie die beiden Umkehrfunktionen α(n) := min{ i ≥ 1 | Ai+2 (3) ≥ n } = 1 + min{ j ≥ 0 | Lj (n − 1) ≤ 2 } α̃(n) := min{ i ≥ 1 | Ai+2 (i) ≥ n } = 1 + min{ j ≥ 0 | Lj (n − 1) ≤ j } (Die Funktionen Lj (r) wurden in der Vorlesung definiert.) Zeigen Sie, dass α̃(n) ≤ α(n) ≤ α̃(n) + 1 für alle n ≥ 17 ist. 4. Iterierter Logarithmus (5 Punkte) Füllen Sie folgende Lücken aus, sodass die Aussagen für alle Zahlen x > 3 gelten. Begründen Sie Ihre Antworten. (a) (b) (c) (d) (e) (f) dx/3e gibt an, wie oft man von x 3 subtrahieren muss, bis das Ergebnis ≤ 0 ist. dlog5 xe gibt an, wie oft man x muss, bis das Ergebnis ≤ 1 ist. ∗ log x gibt an, wie oft man muss, bis das Ergebnis ≤ 1 ist. dlog2 log2 xe gibt an, wie oft man muss, bis das Ergebnis ist. muss, bis das Ergebnis ist. dlog3 log2 xe gibt an, wie oft man dlog2 log3 xe gibt an, wie oft man muss, bis das Ergebnis ist. Spieler B Spielerin A 1 größer als 1 4, 42 zwischen 4 und 42 8, 15, 16, 23, 30 zwischen 8 und 15 9, 10, 11, 12, 13, 14 Es ist 11. 5. Eine Ratespiel (zum Knobeln) Spielerin A denkt sich eine positive ganze Zahl n aus. Spieler B soll diese Zahl erraten. Er darf in einer Runde eine Liste von beliebig vielen Zahlen aufschreiben. Wenn die gesuchte Zahl dabei ist, hat B gewonnen. Andernfalls gibt Spielerin A bekannt, zwischen welchen beiden aufgeschriebenen Zahlen n liegt, bzw. ob sie größer oder kleiner als alle aufgeschriebenen Zahlen ist, siehe nebenstehendes Beispiel. Hauptregel: Wenn B in einer Runde mehr als n Zahlen aufschreibt, hat er sofort verloren. (a) Wie muss die erste Liste von B aussehen? Warum ist die Fragestrategie im obigen Beispiel für B gefährlich? (b) Finden Sie eine Formel, einen rekursiv definierten Ausdruck, oder ein Berechnungsprogramm (zum Beispiel mit dynamischer Programmierung) für den größten Wert N , sodass alle Zahlen n ≤ N in höchstens r Runden erraten werden können. (c) Beweisen Sie, dass Spieler B in O(α(n)) Runden gewinnen kann. wobei α in Aufgabe 3c definiert ist. (Diese Schranke ist asymptotisch optimal.) (d) Was ändert sich, wenn zu Beginn eine obere Schranke N0 für n festgelegt wird? 6. Gradfolgen (0 Punkte) Gibt es einen Graphen mit 5 Knoten mit Knotengraden 1, 1, 2, 3, 4? Mit Knotengraden 1, 1, 2, 3, 3? (Mehrfachkanten und Schleifen sind nicht erlaubt.) Gibt es einen Graphen mit 6 Knoten mit Knotengraden 1, 2, 2, 3, 4, 4? Mit Knotengraden 1, 1, 2, 2, 3, 3? Mit Knotengraden 1, 1, 2, 3, 4, 5? Finden Sie einen Greedy-Algorithmus, der einen Graphen mit gegebener Gradfolge konstruiert, wenn es einen gibt. Beweisen Sie, dass es keinen Graphen gibt, wenn der Algorithmus versagt. (Schwierig) Beweisen Sie, dass es für jedes n und jedes d < n einen d-regulären Graphen (wo alle Knoten Grad d haben) auf n Knoten gibt, wenn dn gerade ist. Was ändert sich, wenn Mehrfachkanten zugelassen werden? Werden die Probleme dadurch schwieriger oder leichter? 18 Höhere Algorithmik, WS 2012/13 — 13. Übungsblatt Abgabe: Freitag, 25. Januar 2013, 10:15 Uhr 0. Fassen Sie stichwortartig den Inhalt der beiden letzten Vorlesungen zusammen. Diese Aufgabe ist wie immer Voraussetzung dafür, dass das Übungsblatt bewertet wird. 1. Binomialbäume (10 Punkte) Beweisen Sie, dass ein Binomialbaum Bi der Höhe i für jedes k genau Tiefe k hat. i k Knoten der 2. Fibonacci-Halde (10 Punkte) Führen Sie auf einer zu Beginn leeren Fibonacci-Halde die Operationen insert(Oi , 2i) für i = 1, 2, . . . , 13 aus, wobei ein neues Objekt Oi mit Schlüssel 2i eingefügt wird. (Geben Sie ab hier an, wie die Fibonacci-Halde vor und nach jeder Operation ausschaut.) Führen Sie anschließend deletemin; decreasekey(Ou , 7); decreasekey(Ov , 5); und deletemin aus. Wählen Sie u und v dabei so, dass bei der Operation decreasekey(Ov , 5) mindestens zwei neue Wurzeln entstehen. 3. Binomialhalden (0 Punkte) Führen Sie die Folge von Operationen von Aufgabe 2 mit einer Binomialhalde durch. 4. (0 Punkte) Überlegen Sie, welche elementaren Datenstrukturen zur Implementierung von Fibonacci-Halden notwendig sind. (Wie sind die Kinder eines Knotens organisiert? Welche Attribute und Referenzen müssen in den Knoten gespeichert werden? Wie ist die Liste der Wurzeln organisiert?) 5. (10 Punkte) Verlängern und Verkürzen von Feldern variabler Länge (Vektoren) Wie in der Vorlesung gezeigt wurde, kann ein Feld variabler wachsender Länge n implementiert werden, indem man es in ein Feld statischer Länge n0 ≥ n speichert und ab und zu auf ein neues Feld mit geändertem n0 umspeichert. Betrachten Sie folgenden Algorithmus, der zusätzlich zum Wachsen auch das Verkleinern von n unterstützt: n0 ist immer eine Zweierpotenz. Wenn n größer als n0 wird, wird n0 verdoppelt; wenn n kleiner als n0 /4 wird, wird n0 halbiert. Das Feld wird in beiden Fällen umgespeichert. Zeigen Sie mit Hilfe einer geeigneten Potentialfunktion oder mit der Bankkontomethode, dass beide Operationen (Vergrößern und Verkleinern von n um 1) in konstanter amortisierter Zeit unterstützt werden. (Zusatzfrage: Warum möchte man n0 überhaupt jemals reduzieren? Es funktioniert doch auch so in konstanter amortisierter Zeit.) 6. (0 Punkte) Schauen Sie nach, wie die Längenänderung in der Java-Standardklasse java.util.Vector implementiert ist. 7. Gerrymandering (0 Punkte, eine ehemalige Klausuraufgabe): Bezirk Partei A Partei B B1 55 45 B2 43 58 B3 61 39 B4 46 53 In einer Provinz gibt es n Wahlbezirke und m Wählerinnen und Wähler. Aus früheren Wahlen ist bekannt, wie viele Wählerinnen und Wähler in jedem Bezirk eher der Partei A oder der Partei B zugeneigt sind, wie im nebenstehenden Beispiel (m = 400, n = 4). 19 Die Provinz muss nun in zwei Wahlkreise aus je n/2 Bezirken eingeteilt werden. Die Partei A (die an der Macht ist) möchte diese Aufteilung so arrangieren, dass sie in beiden Wahlkreisen die Mehrheit hat. Beispiel: B1 und B4 zu einem Wahlkreis zusammengefasst, liefert eine Mehrheit von 101 : 98 für A. Im anderen Wahlkreis (B2 und B3 ) steht es 104 : 97 für A. Schreiben Sie einen effizienten Algorithmus (in Pseudocode), der polynomiell in m und n ist, und der berechnet, ob eine solche Einteilung möglich ist. Analysieren Sie die Laufzeit und den Speicherbedarf Ihres Algorithmus. Hinweis: Dynamische Programmierung kann hilfreich sein. Wenn man Untermengen der Bezirke löst, reicht es nicht, diese in zwei gleich große Hälften zu zerlegen. Man muss auch Zerlegungen in unterschiedliche Teile betrachten, und über die Größe der Teile Buch führen. 8. Zur Unterhaltung: Die Bergsteigergleichung (0 Punkte) Betrachten Sie eine digitale Landschaft“, wie sie in Aufgabe 2 vom 12. Übungsblatt ” dargestellt ist. Ein Gipfel ist ein Element, das größer als seine vier Nachbarn ist. Eine Senke ist ein Element, das kleiner als seine vier Nachbarn ist. Ein Sattel wird von vier Elementen ai,j , ai+1,j , ai,j+1 , ai+1,j+1 gebildet, die die Beziehung max{ai,j , ai+1,j+1 } < min{ai+1,j , ai,j+1 } oder min{ai,j , ai+1,j+1 } > max{ai+1,j , ai,j+1 } erfüllen, oder von einem Element ai,j , dessen vier Nachbarn die Beziehung max{ai−1,j , ai+1,j } < ai,j < min{ai,j−1 , ai,j+1 } oder min{ai−1,j , ai+1,j } > ai,j > max{ai,j−1 , ai,j+1 } erfüllen. (a) Finden Sie alle Gipfel, Senken, und Sattelpunkte im Beispiel vom 12. Übungsblatt. (b) Wir nehmen nun an, dass das umliegende Gebiet eine flache Ebene ist, und wir setzen ai,j außerhalb der Tabelle auf einen konstanten Wert C, der tiefer als alle Werte in der Tabelle ist. (Wir habe also keinen Tagbau, sondern ein Gebirge.) Mit dieser Konvention kann also es auch Gipfel, Senken, und Sattelpunke am Rand des Gebietes geben. Innerhalb der Tabelle seien alle Werte verschieden. Für die Anzahl nG , nT , nS der Gipfel, Senken, und Sattelpunke gilt dann immer die folgende Gleichung:1 nG + nT = nS + 1 (c) Wie viele Gipfel, Senken, und Sattelpunke kann ein (k × k)-Feld höchstens haben? 9. Iterierter Logarithmus (0 Punkte) Finden Sie kompakte Formeln für die Antworten auf folgende Fragen, für x > 10: (a) Wie oft muss man 1 verdreifachen, bis das Ergebnis ≥ x ist? (b) Wie oft muss man 2 verdreifachen, bis das Ergebnis > x ist? (c) Wie oft muss man 3 quadrieren, bis das Ergebnis > x ist? (d) Wie oft muss man 4 um 2 erhöhen, bis das Ergebnis > x ist? (e) Wie oft muss man auf 5 den Zweierlogarithmus x 7→ log2 x anwenden, bis das Ergebnis ≤ 1/x ist? (f) Wie oft muss man die Funktion x 7→ 3x auf 6 anwenden, bis das Ergebnis ≥ x ist? (g) Wie oft muss man die Exponentialfunktion x 7→ exp x = ex auf 7 anwenden, bis das Ergebnis ≥ x ist? 1 James Clerk Maxwell: On Hills and Dales, The Philosophical Magazine 40 (1870), S. 421–427. http: //www.maths.ed.ac.uk/~aar/surgery/hilldale.pdf 20 Höhere Algorithmik, WS 2012/13 — 14. Übungsblatt Abgabe: Freitag, 1. Februar 2013, 10:15 Uhr 0. Fassen Sie stichwortartig den Inhalt der beiden letzten Vorlesungen zusammen. Diese Aufgabe ist wie immer Voraussetzung dafür, dass das Übungsblatt bewertet wird. 1. (0 Punkte) Wie groß kann die Höhe eines Baumes in einer Fibonacci-Halde mit n Elementen höchstens sein? 2. (0 Punkte) Beweisen Sie, dass die Relation P der polynomiellen Reduzierbarkeit zwischen Entscheidungsproblemen transitiv und reflexiv ist. 3. Polynomielle Reduktion (10 Punkte) Das Hamilton-Kreis-Problem HAMILTONKREIS ist folgendermaßen definiert: Eingabe: Ein ungerichteter Graph G. Frage: Gibt es in G einen Kreis, der jeden Knoten genau einmal besucht? Die Entscheidungsversion des kürzesten-einfachen-Wege-Problems KEW ist folgendermaßen definiert: Eingabe: Ein gerichteter Graph G = (V, E) mit Kantengewichten cij ∈ Z (können auch negativ sein!); zwei Knoten s, t ∈ V ; eine Schranke Q ∈ Z. Frage: Gibt es in G einen Weg von s nach t, der keinen Knoten mehrfach besucht (einen einfachen Weg), und der Gesamtlänge ≤ Q hat? Finden Sie eine polynomielle Reduktion, um zu zeigen, dass HAMILTONKREIS P KEW ist. Zeigen Sie im einzelnen, dass ihre Funktion alle geforderten Eigenschaften einer polynomiellen Reduktion hat. 4. Erfüllbarkeit (10 Punkte) (a) Zeigen Sie: Eine Belegung der Booleschen Variablen A und B erfüllt die Formel A ∨ B genau dann, wenn sich dazu ein Wert für die neue Variable y finden lässt, sodass die Formel (A ∨ y) ∧ (ȳ ∨ B) erfüllt ist. (b) Zeigen Sie: Eine gegebene Belegung der Variablen x1 , x2 , . . . , xk (k ≥ 4), erfüllt die Klausel (x1 ∨ x2 ∨ · · · ∨ xk ) genau dann, wenn sich dazu Werte der zusätzlichen Variablen y1 , . . . , yk−3 finden lassen, sodass die folgende Formel erfüllt ist. (x1 ∨x2 ∨y1 )∧(ȳ1 ∨x3 ∨y2 )∧(ȳ2 ∨x4 ∨y3 )∧· · ·∧(ȳk−4 ∨xk−2 ∨yk−3 )∧(ȳk−3 ∨xk−1 ∨xk ) 5. Das Mengenüberdeckungsproblem, Selbstreduktion (10 Punkte) Beim Mengenüberdeckungsproblem ist ist eine Grundmenge S, eine Familie F ⊆ 2S von Teilmengen von S, und eine Schranke k gegeben. Gesucht ist eine Teilmenge U ⊆ F von höchstens k Mengen, die S überdeckt: [ A=S A∈U Nehmen wir an, es gäbeeinen Algorithmus X, der die Enscheidungsversion dieses Problems in polynomieller Zeit löst. Dieser Algorithmus bestimmt also, ob es eine Lösung gibt, ohne diese Lösung zu verraten. Zeigen Sie, dass man mit Hilfe von X eine Überdeckung U mit der kleinsten Zahl |U | von Mengen in polynomieller Zeit finden könnte. 21 Höhere Algorithmik, WS 2012/13 — 15. Übungsblatt Abgabe: Freitag, 8. Februar 2013, 10:15 Uhr 0. Fassen Sie stichwortartig den Inhalt der beiden letzten Vorlesungen zusammen. Diese Aufgabe ist wie immer Voraussetzung dafür, dass das Übungsblatt bewertet wird. 1. NP-Vollständigkeit (10 Punkte) Beweisen Sie: (a) Wenn P = N P ist, dann ist jedes nichttriviale Problem in P auch N P -vollständig. (Ein Problem A ist trivial, wenn alle Eingaben JA-Eingaben oder wenn alle Eingaben NEIN-Eingaben sind; das sind also die Sprachen ∅ und Σ∗ .) (b) Wenn jedes Problem in P auch N P -vollständig ist, dann ist P = N P . 2. Polynomielle Reduktion (10 Punkte) Zeigen Sie, dass das Problem Unabhängige Knotenmenge NP-vollständig ist. Verwenden Sie folgende Reduktion von SAT (Erfüllbarkeit) auf Unabhängige Knotenmenge: Jede der m Klauseln einer SAT-Formel wird eine Clique (einen vollständigen Untergraphen) dargestellt, deren Knoten den in den Klauseln vorkommenden Literalen entsprechen, und es wird die disjunkte Vereinigung dieser m Cliquen gebildet. Die Gesamtanzahl der Knoten entspricht also ziemlich genau der Länge der Formel. Zusätzlich werden zwei Knoten auch dann durch eine Kante verbunden, wenn sie entgegengesetzte Literale x und x̄ repräsentieren. Zeichnen Sie den Graphen für die Formel (x̄2 ∨ x3 ) ∧ (x1 ∨ x2 ∨ x̄4 ∨ x3 ) ∧ (x4 ∨ x̄1 ∨ x̄3 ) ∧ (x̄2 ∨ x̄1 ∨ x3 ). Die Formel ist genau dann erfüllbar, wenn der Graph eine unabhängige Menge einer gewissen Größe (welcher?) enthält. Vergessen Sie nicht, zu zeigen, dass das Problem in NP liegt. 3. NP-Vollständigkeit (10 Punkte) Das Graphenfärbungsproblem FÄRB ist folgendermaßen definiert: EINGABE: Ein ungerichteter Graph G, und eine Schranke k. FRAGE: Gibt es in G eine gültige k-Färbung, das heißt, eine Färbung der Knoten mit k Farben, sodass benachbarte Knoten verschiedene Farben haben? Das k-Färbungsproblem k-FÄRB, für eine feste natürliche Zahl k, ist folgendermaßen definiert: EINGABE: Ein ungerichteter Graph G. FRAGE: Gibt es in G eine gültige k-Färbung? In der Vorlesung wird gezeigt, dass 3-FÄRB NP-vollständig ist. Zeigen Sie unter dieser Voraussetzung, dass die Probleme 4-FÄRB und FÄRB ebenfalls NP-vollständig sind. 4. (0 Punkte) Das dreidimensionale Matching-Problem ist eine Erweiterung des Paarungsproblems in bipartiten Graphen. Gegeben sind drei disjunkte Mengen A, B, C der Größe n, und eine Menge T ⊆ A × B × C von geordneten Tripeln. Gibt es eine Teilmenge von n Tripeln, die jedes Element von A ∪ B ∪ C genau einmal enthält? 22 Dieses Problem ist im Gegensatz zum zweidimensionalen“ Problem, wo eine perfekte ” Paarung gesucht wird, NP-vollständig. Zeigen Sie unter Verwendung dieser Tatsache, dass auch das analoge vierdimensionale Matching-Problem NP-vollständig ist. 5. Erfüllbarkeit (0 Punkte) Konstruieren sie eine erfüllbare Boolesche Formel in konjunktiver Normalform in k ≥ 1 Variablen x1 , x2 , . . . , xk , bei der jede Klausel genau 3 Literale enthält, die zu verschiedenen Variablen gehören (3SAT-Form), sodass bei allen Belegungen, die die Formel erfüllen, die Variable x1 falsch ist. Sie dürfen die Anzahl k der Variablen frei wählen. 6. Median (0 Punkte) Gegeben sind zwei sortierte Felder x1 , . . . , xn und y1 . . . , ym von Zahlen. Finden Sie den Median aller m + n Elemente in der Vereinigung der beiden Listen in O(log m + log n) Zeit. 7. Unabhängige Knotenmenge, Intervallauswahl, Knotenüberdeckung (0 Punkte) (a) Bein Problem der (ungewichteten) Intervallauswahl aus der Vorlesung ist eine Menge von Intervallen und eine Schranke S gegeben, und es soll überprüft werden, ob es eine Teilmenge von S disjunkten Intervallen gibt. Zeigen Sie: Intervallauswahl P Unabhängige Knotenmenge Was folgt daraus für die Komplexität von Intervallauswahl? (b) Eine Knotenüberdeckung (vertex cover) in einem ungerichteten Graphen G = (V, E) ist eine Teilmenge S ⊆ V , sodass jede Kante ij ∈ E mindestens einen Endknoten in S hat: i ∈ S ∨ j ∈ S. Zeigen Sie, dass S genau dann eine Knotenüberdeckung ist, wenn V − S eine unabhängige Knotenmenge ist. 8. Isotone L2 -Regression (0 Punkte) Entwerfen Sie einen Algorithmus für isotone Regression: Zu einer gegebenen Zahlenfolge a1 , . . . , an mit Gewichten wi > 0 ist eine monoton steigende Folge x1 ≤ x2 ≤ · · · ≤ xn gesucht, die die gewichtete L2 -Norm des Fehlers n X i=1 wi · (xi − ai )2 minimiert. (Sie können den dynamischen Programmierungsansatz aus der Vorlesung anwenden. Das Problem ist mit geeigneten Datenstrukturen in O(n) Zeit lösbar.) 9. Einparken, dynamische Programmierung1 (0 Punkte) Autos können auf dem Rand eines Kreises parken, der in 99 Abschnitte eingeteilt ist. Der Kreis ist zu Beginn leer. Es kommen nach und nach einzelne Autos dazu. Jedes Auto belegt zwei benachbarte Abschnitte. Wir nehmen an, dass jedes Auto aus den freien Doppelabschnitten zufällig gleichverteilt einen Doppelabschnitt auswählt und dort parkt. Es fahren keine Autos weg. Wenn nur noch isolierte Einzelabschnitte frei sind, können keine Autos mehr dazukommen. Berechnen Sie den Erwartungswert für die Anzahl der Autos, die auf diese Weise parken können. 1 http://domino.research.ibm.com/Comm/wwwr_ponder.nsf/challenges/June2011.html 23 Höhere Algorithmik, WS 2012/13 — 16. Übungsblatt Bonusübungen. Freiwillige Abgabe: Freitag, 22. Februar 2013, 10:15 Uhr 0. Fassen Sie stichwortartig den Inhalt der beiden letzten Vorlesungen zusammen. Diese Aufgabe ist wie immer Voraussetzung dafür, dass das Übungsblatt bewertet wird. 1. Das Zollstockproblem (10 Punkte) Gegeben ist ein Zollstock, dessen Abschnitte die Längen a1 , . . . , an ∈ N haben, und ein Futteral der Länge F . Gefragt ist, ob der Zollstock so gefaltet werden kann, dass er in das Futteral passt. Jedes Gelenk des Zollstocks kann entweder gestreckt (Winkel = 180◦ ) oder eingefaltet (Winkel = 0◦ ) sein. Die Dicke oder Breite des Zollstocks soll vernachlässigt werden. a1 a2 a3 Zeigen Sie, dass dieses Problem NP-vollständig ist. 2. (10 Punkte) Geben Sie einen pseudopolynomiellen Algorithmus zur Bestimmung des kürzesten Futterals, in das ein gegebener Zollstock passt. 3. (10 Punkte) Rekursion, Mediansuche Der deterministische Algorithmus zur Mediansuche aus der Vorlesung zerteilt die Eingabe in Fünferblöcke und führt zur Rekursionsgleichung T (n) = T (d n5 e) + T (d 3n 4 e) + O(n), für hinreichend große n. (a) Wie sieht die Rekursionsformel aus, wenn die Eingabe in Blöcke der Größe k aufgeteilt wird, für allgemeine ungerade k? (b) Für welche Werte von k ist die Laufzeit linear? (c) Bestimmen Sie die Laufzeit für alle ungeraden k > 1, für die die Laufzeit nicht linear ist. Sie dürfen der Einfachheit halber für diese Teilaufgabe annehmen, dass n eine Potenz von k ist. 4. Komplexitätsklassen (10 Punkte) n (a) (4 Punkte) Die Klasse EXPTIME enthält alle Sprachen, die in Laufzeit O(2k ) für eine Konstante k entschieden werden können. (n ist die Länge der Eingabe.) Zeigen Sie: NP ⊆ EXPTIME (b) (3 Punkte) Zeigen Sie: P ⊆ NP ∩ coNP (c) (3 Punkte) Zeigen Sie: P = NP =⇒ NP = coNP 5. BinPacking (0 Punkte) Eingabe: n Gegenstände mit Größen s1 , s2 , . . . , sn , wobei 0 < si < 1 ist; eine Zahl S. Frage: Können die Gegenstände in S Behälter der Größe 1 gepackt werden? Zeigen Sie, dass BinPacking NP-vollständig ist 6. Das Rundreiseproblem in der Ebene (5 Punkte) Beweisen Sie, dass eine optimale Tour für das Rundreiseproblem keine Kreuzungen enthält, wenn die Knoten des Graphen Punkte in der Ebene sind und die Abstände durch den euklidischen Abstand gegeben sind. 24 7. Einparken (5 Punkte, siehe Aufgabe 9 vom 15. Übungsblatt) Bestimmen Sie die kleinstmögliche Anzahl von Autos, bei denen der Parkplatz keine Autos mehr aufnehmen kann, in Abhängigkeit von der Anzahl n der Abschnitte. 8. NP-Vollständigkeit (0 Punkte, eine ehemalige Klausuraufgabe) Eingabe: Eine logische Formel in konjunktiver Normalform mit genau zwei Literalen pro Klausel, und eine Schranke k. Frage: Gibt es eine erfüllende Belegung, bei der höchstens k Variablen falsch sind? (a) Schreiben Sie ein Beispiel für eine solche Formel auf, die erfüllbar ist (ohne Einschränkung für die Anzahl der falschen Variablen). (b) Schreiben Sie ein Beispiel für eine solche Formel auf, die nicht erfüllbar ist. (c) Beweisen Sie, dass dieses Problem NP-vollständig ist. Hinweis: Sie können zum Beispiel von Knotenüberdeckung reduzieren. 9. Unabhängige Knotenmenge (0 Punkte) Der folgende Greedy-Algorithmus versucht, eine möglichst große unabhängige Knotenmenge in einem Graphen G mit n Knoten und m Kanten zu finden: Wähle einen Knoten v mit kleinstem Grad und entferne v und alle seine Nachbarn aus G. Wiederhole diesen Schritt, bis der Graph leer wird. (a) Wie entsteht bei diesem Algorithmus die Lösungsmenge? (b) Welche Datenstrukturen sind notwendig, um diesen Algorithmus effizient zu implementieren. Welche Laufzeit erhalten Sie in Abhängigkeit von n und m? (c) Geben Sie einen Graphen an, bei dem der Algorithmus nicht die größte unabhängige Menge findet. 10. 2-Färbung (0 Punkte, siehe Aufgabe 3 vom 15. Übungsblatt) Zeigen Sie, dass das 2-Färbungsproblem 2-FÄRB in P liegt. 11. Feste Eingabeparameter (0 Punkte) Zeigen Sie, dass folgende Probleme in P liegen, falls k ∈ N eine feste Konstante (und nicht Teil der Eingabe) ist: (a) SATk Eingabe: Eine Boolesche Formel F in konjunktiver Normalform. Frage: Gibt es eine Variablenbelegung, die mindestens k Klauseln von F erfüllt? (b) k-Clique Eingabe: Ein ungerichteter Graph G Frage: Gibt es eine Clique der Größe k in G? 12. Zeigen Sie, dass folgende Probleme in NP liegen: (0 Punkte) (a) Oberwort Eingabe: m Wörter w1 , w2 , . . . , wm über einem Alphabet Σ und eine Zahl k. Frage: Gibt es ein Wort w der Länge k, sodass jedes wi Teilwort von w ist? 25 (b) Zusammengesetzte Zahl Eingabe: Eine natürliche Zahl k. Frage: Ist k das Produkt von mehreren (> 1) Primzahlen? (c) Graphisomorphie Eingabe: Zwei Graphen G1 = (V1 , E1 ) und G2 = (V2 , E2 ). Frage: Existiert eine Bijektion f : V1 → V2 mit der Eigenschaft (u, v) ∈ E1 ⇐⇒ (b(u), b(v)) ∈ E2 , für alle u, v ∈ V1 ? 13. Zeigen Sie, dass folgendes Problem in coNP liegt: (0 Punkte) Eingabe: Eine Menge S von n Punkten in der Ebene, ein konvexes Polygon P = p1 p2 . . . pk . Frage: Ist P die konvexe Hülle von S? 14. Zerstörendes Testverfahren (0 Punkte) Eine Fahrzeugfirma hat einen neuen Anhänger entwickelt und möchte das maximale Gewicht (eine ganze Zahl x von Tonnen) bestimmen, die er tragen kann, bevor er zusammenbricht. Bei einem Test darf eine beliebige (natürliche) Zahl von je eine Tonne schweren Gewichten auf den Anhänger geladen werden und dann wird beobachtet, ob er sie trägt oder zusammenbricht. Mit wie vielen Tests (als Funktion von x) kommt man aus, (a) wenn beliebig viele Anhänger zur Verfügung stehen, die zerstört werden dürfen. (b) wenn nur ein Anhänger zur Verfügung steht. (c) wenn zwei Anhänger zur Verfügung stehen. Versuchen Sie, dies auf eine beliebige Zahl k ∈ N von Anhängern zu verallgemeinern. 15. Optimale Triangulierung (0 Punkte) Entwerfen Sie einen effizienten Algorithmus zur Berechnung der Triangulierung eines konvexen Polygons, die die Summe der Quadrate aller Dreiecksflächen minimiert. Welche Laufzeit hat Ihr Algorithmus? 16. Union-Find (0 Punkte) Wir haben einen ungerichteten Graphen G mit Knotenmenge V = {a, b, c, . . . , k} gegeben, und wir möchten die Zusammenhangskomponenten von G bestimmen. Dazu verwenden wir eine UNION-FIND-Datenstruktur. Nehmen Sie an, dass die Kanten des Graphen in folgender Reihenfolge bearbeitet werden: (d, i), (f, k), (g, i), (b, g), (a, h), (i, j), (d, k), (b, j), (d, f ), (g, j), (a, e), (i, d). Zeigen Sie den Status der UNION-FINDDatenstruktur nach der Bearbeitung jeder Kante. Verwenden Sie Vereinigung nach Rang und Pfadkompression. Geben Sie auch die Ränge der einzelnen Knoten an. 17. Kürzeste Wege, dynamisches Programmieren (0 Punkte) Sabine und Peer wollen mit dem Auto von Berlin nach Dortmund fahren. Das Auto fährt mit Gas und ist daher auf spezielle Tankstellen angewiesen. Eine Tankfüllung reicht für F Kilometer, und die Straßenkarte gibt ihnen die Abstände zwischen den einzelnen Tankstellen entlang der Autobahn. Sabine und Peer wollen so wenig Tankstopps wie möglich einlegen. Geben Sie einen effizienten Algorithmus an, mit dem Sabine und Peer dieses Problem lösen können. Beweisen Sie die Korrektheit Ihres Algorithmus und analysieren Sie die Laufzeit. 26 Höhere Algorithmik, WS 2012/13 — Klausur Abgabe: Montag, 18. Februar1 2013, 11:45 Uhr 1. Kürzeste Wege, dynamisches Programmieren (10 Punkte) Wir wollen eine Trekkingtour von A nach B durch die Wüste machen. Einer Karte entnehmen wir die Stellen, wo es Wasser gibt, und wieviel Wasservorrat Wxy wir benötigen, um sicher von einer Wasserstelle x zu einer anderen Wasserstelle y zu gelangen, wo wir unsere Wasservorräte wieder auffüllen können, für alle Paare x, y. Wir wollen die Reise so planen, dass wir mit möglichst wenig Transportkapazität für das Wasser auskommen. Geben Sie einen effizienten Algorithmus zur Bestimmung des geringsten Transportkapazität an Wasser an, mit der eine Reise von A nach B möglich ist. Beweisen Sie die Korrektheit Ihres Algorithmus und analysieren Sie die Laufzeit. 2. Median und k-kleinstes Element (10 Punkte) Angenommen, es steht ein Algorithmus Median(S) zur Verfügung, der in linearer Zeit den Median einer Folge S finden kann. Benutzen Sie diesen Algorithmus, um (a) ein Verfahren Auswahl (S, k) anzugeben, das ebenfalls in linearer Zeit das k-kleinste Element einer Folge S findet (1 ≤ k ≤ |S|). (b) eine Variante von Quicksort zu finden, die auch im schlechtesten Fall eine gute Laufzeit hat. Für eine Folge S gerader Länge n stimmt Median(S) mit Auswahl (S, n/2) überein. Analysieren Sie die Laufzeiten Ihrer Algorithmen. 3. Reduktion (10 Punkte) Beweisen Sie: Clique ≺p Teilgraphisomorphie Das Problem Teilgraphisomorphie (oder kurz TGI) ist folgendermaßen definiert: Eingabe: Zwei ungerichtete Graphen G1 = (V1 , E1 ) und G2 = (V2 , E2 ). Frage: Gibt es einen Teilgraphen G0 = (V 0 , E 0 ) mit V 0 ⊆ V2 und E 0 ⊆ E2 , der isomorph zu G1 ist? (Mit anderen Worten: Gibt es eine injektive Abbildung f : V1 → V2 sodass für alle Kanten uv ∈ E1 gilt: f (u)f (v) ∈ E2 ?) Bei Clique ist die Eingabe ein Graph G und eine Zahl k, und es ist gefragt, ob es k Knoten in G gibt, die paarweise miteinander verbunden sind. 4. (10 Punkte) Geben Sie, wenn möglich, möglichst genaue untere und obere asymptotische Schranken für die Lösung T (n) der folgenden Rekursionen an. Die Rekursionen gelten für alle n ≥ 10. Für n < 10 gilt T (n) = 1. (a) (4 Punkte) T (n) = 8 · T (bn/4c) + Θ(n3/2 ) (b) (3 Punkte) T (n) = T (n − 1) + 2 · T (n − 2) (c) (3 Punkte) T (n) = 2 · T (bn/3c) + 3n 1 Der Termin der Nachklausur schwankt noch zwischen 4. und 5. April 2013. 27 Höhere Algorithmik, WS 2012/13 — Klausur Abgabe: Freitag, 5. April 2013, 11:30 Uhr 1. Optimierung (10 Punkte) Ihr Betrieb stellt hochwertige Bauteile her, die per Luftfracht europaweit an die Kunden ausgeliefert werden. Für jede Woche i = 1, 2, . . . , n ist die Menge ci der auszuliefernden Teile (in kg) gegeben, zum Beispiel (c1 , . . . , c10 ) = (11, 9, 9, 12, 12, 12, 12, 9, 9, 11). Zum Transport stehen zwei Firmen zur Auswahl: Die erste Firma berechnet Kosten pro Kilogramm. Der Preis für ein kg ist A. Die zweite Firme verrechnet einen Pauschalpreis von B pro Woche, unabhänging von der Transportmenge. Der Preis pro Woche ist B. Allerdings kann man einen Transportauftrag bei der zweiten Firma nur für jeweils mindestens vier aufeinanderfolgende Wochen erteilen. Geben Sie einen effizienten Algorithmus zur Bestimmung der geringsten Frachtkosten an. Erläutern Sie Ihren Algorithmus, und analysieren Sie die Laufzeit. (Im obigen Beispiel würde man bei A = 1 und B = 10 die erste Firma für die Wochen 1–3 und 8–10 mit dem Transport beauftragen, und die zweite Firma für die vier Wochen dazwischen.) 2. Optimaler binärer Suchbaum (10 Punkte) Wir haben drei Schlüssel (S1 , S2 , S3 ) = (10, 12, 19) mit folgenden Anfragehäufigkeiten: (p1 , p2 , p3 ) = (q0 , q1 , q2 , q3 ) = (4, (4, 1, 10, 8) und 2, 1) Dabei ist pi die Häufigkeit, mit der der Schlüssel Si angefragt wird, und qi die Häufigkeit, mit der ein Schlüssel x mit Si < x < Si+1 gesucht wird (i = 0, 1, 2, 3, S0 = −∞, S4 = ∞). Bestimmen Sie den optimalen binären Suchbaum und seine mittlere Suchzeit mit dem Algorithmus aus der Vorlesung. 3. NP-Vollständigkeit (10 Punkte) Zeigen Sie, dass das folgende Problem A NP-vollständig ist: Eingabe: n Gegenstände mit Größen s1 , s2 , . . . , sn , wobei 0 < si < 1 ist; eine Zahl S. Frage: Können die Gegenstände in S Behälter der Größe 1 gepackt werden? Für die Reduktion können Sie zum Beispiel Teilmengensumme, Partition (Zerlegung einer Zahlenfolge in zwei Teile mit gleicher Summe), oder das Rucksackproblem verwenden. 4. (10 Punkte) Geben Sie, wenn möglich, möglichst genaue untere und obere asymptotische Schranken für die Lösung T (n) der folgenden Rekursionen an. Die Rekursionen gelten für alle n ≥ 10. Für n < 10 gilt T (n) = 1. (a) (3 Punkte) T (n) = 3 · T (bn/4c) + Θ(n3/2 ) (b) (3 Punkte) T (n) = T (n − 1) + 2n2 (c) (4 Punkte) T (n) = 4 · T (bn/3c) + 3n 28