Algorithmen und Programmierung WS 14/15

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 14/15
Übungsblatt 7
Abgabe am Mittwoch 10.12.2014 in der Vorlesung
Aufgabe 1 (Zahlendreieck)
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.
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.
(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 2 (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.
Bitte wenden!
2
Algorithmen und Programmierung WS 14/15
Aufgabe 3 (O-Notation)
Übungsblatt 7
4 Punkte
Gegeben seien jeweils zwei Funktionen fi (n) und gi (n). Geben Sie an, ob fi (n) ∈ O(gi (n)),
gi (n) ∈ O(fi (n)) oder beides gilt. Ein formaler Nachweis ist nicht erforderlich.
(a)
(b)
3n4 + 0, 5n2 + 13
n2 + 16
√
√
√
√
ga (n) = 14 n + 3 · 9 n + 2 · 5 n + 1 · 2 n
fa (n) =
fb (n) = e
gb (n) = 12, 7−n
(c)
fc (n) = 17, 3n log (n) log (n)
√
gc (n) = 0, 4n n
(d)
fd (n) = 2n · log (5n)
4
gd (n) = 2, 12 3 n
Aufgabe 4 (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:


Θ(nlogb a )
falls gilt: ∃ε > 0 : f (n) = O(nlogb a−ε )



Θ(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
Aufgabe 5 (Sprunghaft Zahlen)
6 Punkte
Steigen die Ziffern einer natürlichen Zahl n von links nach rechts monoton an (z.B.
133456679), so ist n eine aufsteigende Zahl. Entsprechend ist n eine absteigende Zahl,
wenn die Ziffern von links nach rechts monoton fallen (z.B. 755432). Ist eine Zahl weder
absteigend noch aufsteigend, so ist sie sprunghaft. Offensichtlich kann keine natürliche
Zahl unter 100 sprunghaft sein. Von den natürlichen Zahlen (ohne 0) bis einschließlich
538 sind genau 50% sprunghaft.
Entwickeln Sie ein Java-Programm, welches die erste natürliche Zahl k berechnet, so
dass genau 99% der natürlichen Zahlen bis einschließlich k sprunghaft sind und geben
Sie k an.
Herunterladen