Algorithmen und Programmierung WS 16/17

Werbung
TU Ilmenau, Fakultät IA
FG Telematik/Rechnernetze
Prof. Dr.-Ing. G. Schäfer
http://www.tu-ilmenau.de/telematik/aup
Algorithmen und Programmierung WS 16/17
Übungsblatt 8
Die Lösungen der Aufgaben sind am 19.12.16 in der Vorlesung abzugeben.
Aufgabe 1 (Türme von Hanoi)
2 + 1 + 2 Punkte
Wiederholen Sie zunächst den in der Vorlesung vorgestellten Algorithmus zur Lösung
des Problems der Türme von Hanoi (Kapitel 2, Folie 26).
(a) Geben Sie die Rekurrenzrelation für die Anzahl T (n) an benötigten Bewegungen
für einen Turm der Höhe n ≥ 1 an.
(b) Können Sie das Master-Theorem verwenden, um diese Rekurrenz abzuschätzen?
Begründen Sie Ihre Antwort.
(c) Beweisen Sie mittels vollständiger Induktion, dass T (n) = 2n − 1 gilt.
Aufgabe 2 (Master-Theorem)
7 Punkte
Das Master-Theorem besagt, dass eine Rekurrenzgleichung T (n) = aT ( nb ) + f (n), mit
Konstanten a ≥ 1, b > 1 und einer Funktion f (n) über den nicht-negativen Zahlen, wie
folgt asymptotisch abgeschätzt werden kann:

log a

falls gilt: ∃ε > 0 : f (n) = O(nlogb a−ε )
Θ(n b )


Θ(nlogb a log n) falls gilt: f (n) = Θ(nlogb a )
T (n) =

Θ(f (n))
falls gilt: ∃ε > 0 : f (n) = Ω(nlogb a+ε )




∧∃c, 0 < c < 1, ∃n0 ∀n ≥ n0 : a · f ( nb ) ≤ c · f (n)
Nutzen Sie das Master-Theorem, um die folgenden Rekurrenzgleichungen abzuschätzen,
bzw. geben Sie an wo dies nicht möglich ist. Begründen Sie Ihre Lösung.
√
a) T (n) = 27 · T n3 + 3n2
b) T (n) = T n2 + n
√
c) T (n) = 0, 5 · T n2 + n
d) T (n) = 16 · T n2 + 2n2,5 n3
Aufgabe 3 (Zahlendreieck applikativ)
4 + 1 + 1 Punkte
Startet man an der Spitze eines Zahlendreiecks und bewegt sich in jedem Schritt stets
zu einem benachbarten Feld der darunterliegenden Zeile, so entsteht ein Weg von der
Spitze bis zum Boden. Die Länge eines Weges sei definiert als die Summe der Zahlen
auf dem Weg. Beispiel für einen Weg der Länge 3 + 7 + 4 + 5 = 19:
3
7
2
8
4
4
5
6
9
3
Der folgende applikative Algorithmus berechnet die Länge des kürzesten Weges (Weg
mit der geringsten Summe) von der Spitze bis vom Boden:
2
Algorithmen und Programmierung WS 16/17
Übungsblatt 8
d(t) = h(t,0,0)
h(t,i,j) = if i = length(t)-1 then t[i,j]
else t[i,j] + min(h(t,i+1,j), h(t,i+1,j+1)) fi
Dabei sei im Parameter t das Zahlendreieck als Array kodiert, so dass t[i,j] das j-te
Element der i-ten Zeile (jeweils beginnend mit 0) liefert. length(t) sei die Anzahl der
Zeilen in t.
(a) Beweisen Sie mittels vollständiger Induktion die Korrektheit des Algorithmus.
Hinweis: Zeigen Sie dafür, dass h(t, i, j) den kürzesten Weg von (i,j) zum Boden
berechnet.
(b) Leiten Sie aus dem Algorithmus eine Rekurrenzrelation T(n) für die Anzahl der
Array-Zugriffe bei Ausführung von d(t) mit n = length(t) und n ≥ 1 ab.
(c) Geben Sie eine geschlossene Form für T(n) an und begründen Sie Ihre Antwort.
Aufgabe 4 (Zahlendreieck effizient)
5 + 1 + 1 Punkte
Leider ist der applikative Algorithmus aus Aufgabe 3 nicht besonders effizient (siehe
Teilaufgabe 3c)).
(a) Entwickeln Sie einen (asymptotisch) effizienteren Algorithmus in Java, der die
Länge des kürzesten Weges eines Zahlendreiecks von der Spitze bis zum Boden
ermittelt.
(b) Welche asymptotische Laufzeit besitzt Ihr Algorithmus für eine Eingabe mit n
Zeilen?
(c) Auf der Internetseite zur Vorlesung (http://www.tu-ilmenau.de/telematik/
aup) ist neben dem Übungsblatt ein Beispiel eines größeren Zahlendreiecks verlinkt. Geben Sie die Länge des kürzesten Weges dieses Zahlendreiecks an.
Hinweis: Zum Einlesen des Zahlendreiecks können Sie die Klasse aup.FileUtils verwenden:
import aup . ∗ ;
...
S t r i n g path = F i l e U t i l s . g e t F i l e P a t h ( ) ;
i n t [ ] [ ] t r i a n g l e = F i l e U t i l s . r e a d I n t M a t r i x ( path ) ;
Aufgabe 5 (Binäre Suche)
5 Punkte
Implementieren Sie die rekursive Variante der binären Suche (siehe Kapitel 7, Folie 9) in
Java. Gehen Sie davon aus, dass es sich bei der Folge F um ein Array aus ganzen Zahlen
handelt und somit auch der Suchschlüssel k eine ganze Zahl ist. Sie können zudem davon
ausgehen, dass das Feld F bereits sortiert ist.
Herunterladen