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.