in einer Datei

Werbung
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
Herunterladen