Algorithmen und Programmierung 3, WS 2015/2016

Algorithmen und Programmierung 3, WS 2015/2016
Klausur, Bearbeitung bis Dienstag, 12. April 2016, 16:00 Uhr.
B4
1. Streckenschnitt, 10 Punkte
Bestimmen Sie mit dem Algorithmus aus
der Vorlesung alle Schnittpunkte der vier A
2
Strecken Ai Bi mit
A1 , . . . , A4 = (4, 5), (1, 4), (2, 2), (6, 3) und
B1 , . . . , B4 = (7, 3), (9, 2), (8, 6), (5, 6)
A1
B3
E
D
C
A3
F
B1
A4
B2
durch Überstreichen der Ebene von links nach rechts. Geben Sie den Inhalt der
vertikalen Struktur (der Fegegerade F ) und der horizontalen Struktur (der Ereigniswarteschlange Q) in jedem Schritt an.
2. Algebraische Spezifikation, 10 Punkte
Die Operationen einfüge, lösche, leereMenge, und istenthalten für Mengen von ganzen
Zahlen sind folgendermaßen spezifiziert (wie in der Vorlesung):
istenthalten(x, leereMenge) = False
istenthalten(x, einfüge(x, m)) = True
istenthalten(x, einfüge(y, m)) = istenthalten(x, m),
für x 6= y
istenthalten(x, lösche(x, m)) = False
istenthalten(x, lösche(y, m)) = istenthalten(x, m),
für x 6= y
Erweitern Sie die Spezifikation um eine neue Operation
aek : Z × (Menge Z) → N.
Das Ergebnis von aek (x, m) soll die Anzahl der Elemente in m sein, die kleiner als x
sind.
Begründen Sie kurz die Korrektheit Ihrer Lösung.
3. Dynamisches Programmieren, 10 Punkte
Gegeben ist eine Folge (a0 , a1 , a2 , . . . , an−1 ) von n verschiedenen Zahlen, z. B. (5, 28,
19, 15, 20, 33, 12, 17, 10). Eine absteigende Teilfolge ist eine Teilfolge, die monoton
fallend ist, zum Beispiel (19, 12, 10) oder die Teilfolge (20). (Jede einelementige
Teilfolge ist eine absteigende Teilfolge.) Schreiben Sie ein effizientes Programm in
Pseudocode, das die längste absteigende Teilfolge berechnet.
Analysieren Sie die Laufzeit und den Speicherbedarf Ihres Algorithmus.
Geben Sie eine kurze Begründung für die Korrektheit an.
Hinweis: Es geht mit O(n) Speicher und O(n2 ) Zeit.
Für einen korrekten Algorithmus, der in O(n log n) Zeit läuft, gibt es 5 Zusatzpunkte.
(Dieser Algorithmus ist aber eher kompliziert.)
4. 2-3-Bäume, 10 Punkte
Fügen Sie die Schlüssel DAVID, TENNIS, COUCH, HAND, PAPPE, MAUS, FISCH,
YOGHURT, und ZEIT der Reihe nach in einem zunächst leeren 2-3-Baum ein, der
die Schlüssel lexikographisch ordnet. Streichen Sie dann das Wort HAND. Zeigen Sie
alle Zwischenschritte. (Wie in der Vorlesung sind die Werte nur in den Blättern des
2-3-Baumes gespeichert.)
22