Algorithmen und Programmierung WS 15/16 ¨Ubungsblatt 7 input N

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 15/16
Übungsblatt 7
Abgabe der Lösungen am 16.12.2015 in der Vorlesung
Aufgabe 1 (Korrektheit imperativer Algorithmen)
4 Punkte
Gegeben sei der folgende Algorithmus GAUSS. Zeigen Sie, dass
{N ≥ 0} GAUSS {S = N * (N + 1) / 2}
gilt.
GAUSS:
var N,C,S : int;
input N;
C := 0;
S := 0;
while C 6= N do
C := C + 1
S := S + C;
od
output S.
Aufgabe 2 (Korrektheit applikativer Algorithmen)
4 Punkte
Den folgenden applikativen Algorithmus kennen Sie bereits aus Aufgabe 4 vom Übungsblatt 3.
f(x,y) = if (y = 0) then 1
else if (y < 0) then (1.0)/f(x,-y)
else if (y > 0) then x · f(x,y-1) fi fi fi
Damals haben einige von Ihnen die Behauptung aufgestellt, dass f(x,y) = xy gelten
würde. Beweisen Sie diese Behauptung per vollständiger Induktion.
Aufgabe 3 (Master-Theorem)
8 Punkte
Das Master-Theorem besagt, dass eine Rekurrenzgleichung T (n) = aT ( nb ) + f (n), mit
Konstanten a, b > 1 und einer Funktion f (n) über den nicht-negativen Zahlen, wie folgt
asymptotisch abgeschätzt werden kann:

logb a )

falls gilt: ∃ε > 0 : f (n) = O(nlogb a−ε )

Θ(n

Θ(nlogb a log n) falls gilt: f (n) = Θ(nlogb a )
T (n) =

Θ(f (n))
falls gilt: ∃ε > 0 : f (n) = Ω(nlogb a+ε )




∧∃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 + 2n2,5 n
b) T (n) = T n2 + n
c) T (n) = 64 · T n4 + 3n2
d) T (n) = 0, 5 · T n2 + n
Bitte wenden!
2
Algorithmen und Programmierung WS 15/16
Aufgabe 4 (Zahlendreieck applikativ)
Übungsblatt 7
4 + 1 + 3 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:
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) Finden Sie eine geschlossene Form für T(n) und beweisen Sie die Äquivalenz der
geschlossenen Form und der Rekurrenz mittels vollständiger Induktion.
Aufgabe 5 (Zahlendreieck effizient)
4 + 1 + 1 Punkte
Leider ist der applikative Algorithmus aus Aufgabe 4 nicht besonders effizient (siehe
Teilaufgabe 4c)).
(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) 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.
(c) Welche asymptotische Laufzeit besitzt Ihr Algorithmus für eine Eingabe mit n
Zeilen?
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 ) ;
Herunterladen