Algorithmen I - Tutorium 28 Nr. 2 11.05.2017: Spaß mit Invarianten (die Zweite), Rekurrenzen / Mastertheorem und Merging Marc Leinweber marc.leinweber@student.kit.edu INSTITUT FÜR THEORETISCHE INFORMATIK (ITI), PROF. DR. JÖRN MÜLLER-QUADE KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu
Agenda 1 Übungsblatt 1 Statistik Aufgabe 1c) Aufgabe 2 Aufgabe 3 2 Invarianten (Wdh.) 3 Rekurrenzen 4 Mastertheorem Definition Aufgaben 5 Merging 6 Ende Marc Leinweber Algorithmen I - Tutorium 28 Nr. 2 11.05.2017 2/21
Statistik Abgaben: 14 in 9 Teams. Höchstpunktzahl: 15. Schnitt: 13, 5. Marc Leinweber Algorithmen I - Tutorium 28 Nr. 2 11.05.2017 3/21
Aufgabe 1c) Aufgabe Gilt folgende Implikation? Lösung f, g : N N : f (n) o(g(n)) log(f (n)) o(log(g(n))). Nein: f (n) = n, g(n) = n 2. Dann f (n) o(g(n)) aber lim n log(n) log(n 2 ) = lim n log(n) 2log(n) = 1 2 0. Marc Leinweber Algorithmen I - Tutorium 28 Nr. 2 11.05.2017 4/21
Aufgabe 2 Function f(n : N; m : N) : (N, N) a = 0 : N; b = m : N c = 1 : N Aufgabe while m cn 0 do invariant m = an + b a := c c := c + 1 b := m an return (a, b) Laufzeit und Schleifeninvariante? O(m) im Worst Case wenn n = 1 und. Marc Leinweber Algorithmen I - Tutorium 28 Nr. 2 11.05.2017 5/21
Aufgabe 3 Aufgabe Gegeben sei ein Array M (mit Elementen aus N) der Länge n. Berechne in O(n) die zwei Indizes 0 i, j < n sodass M[i] = max(m) und M[j] = max(m\m[i]). Lösung Function findmaximumpair(a : Array [0..n 1] of N) : (N, N) a = 0 : N; b = 0 : N for i [0..n 1] do if M[i] M[a] then b := a; a := i return (a, b) Marc Leinweber Algorithmen I - Tutorium 28 Nr. 2 11.05.2017 6/21
Schleifeninvarianten - power() Function power(a : R; n 0 : N) : R p = a : R; r = 1 : R; n = n 0 : N while n > 0 do if n is odd then n ; r = r p; else n = n 2 ; p = p p; return r Marc Leinweber Algorithmen I - Tutorium 28 Nr. 2 11.05.2017 7/21
Schleifeninvarianten - power() (Forts.) Function power(a : R; n 0 : N) : R p = a : R; r = 1 : R; n = n 0 : N while n > 0 do invariant p n r = a n 0 if n is odd then n ; r = r p; else n = n 2 ; p = p p; return r Marc Leinweber Algorithmen I - Tutorium 28 Nr. 2 11.05.2017 8/21
Rekurrenzen Oder wenn mathematische Funktionen auf sich selbst verweisen. Aufgabe Zeige mittels Induktion, dass für { 2 falls n = 1 T (n) = 2T ( n ) + 2 n2 falls n 2 die Ungleichung T (n) 2n 2 gilt. Dabei sei n = 2 k für k N. Marc Leinweber Algorithmen I - Tutorium 28 Nr. 2 11.05.2017 9/21
Rekurrenzen (Forts.) Oder wenn mathematische Funktionen auf sich selbst verweisen. Lösung Induktionsanfang: n = 1, T (1) = 2 2 1 2 = 2. Induktionsvoraussetzung: T (n) 2n 2. Induktionsschritt: n 2n : T (2n) = 2T ( 2n ) + 2 (2n)2 = 2T (n) + (2n) 2 4n 2 + 4n 2 = 8n 2 = 2(2n) 2 IV Marc Leinweber Algorithmen I - Tutorium 28 Nr. 2 11.05.2017 10/21
Mastertheorem Das Mastertheorem. Oder: Rekurrenzen lösen leicht gemacht (hier in seiner einfachen Form) für typische Teile- und Herrsche -Algorithmen). Satz (Theorem 2.5) Für a, b, c, d N sei n = b k (k N). Dann { a n = 1 r(n) = cn + dr( n) b sonst Dann Θ(n) d < b r(n) Θ(nlog(n)) d = b Θ(n logb(d) ) d > b. Marc Leinweber Algorithmen I - Tutorium 28 Nr. 2 11.05.2017 11/21
Aufgabe 1 Bestimme mit Hilfe des Master-Theorems eine scharfe asymptotische Schranke! A(1) := 1, n = 2 k, k N : A(n) = A( n 2 ) + ĉn Lösung: a = 1, b = 2, c = ĉ, d = 1 d<b Θ(n) Marc Leinweber Algorithmen I - Tutorium 28 Nr. 2 11.05.2017 12/21
Aufgabe 2 Bestimme mit Hilfe des Master-Theorems eine scharfe asymptotische Schranke! B(1) := 1, n = 3 k, k N : B(n) = 4B( n 3 ) + 4n Lösung: a = 1, b = 3, c = 4, d = 4 d>b Θ(n log 3(4) ) = Θ(n 1.26 ) Marc Leinweber Algorithmen I - Tutorium 28 Nr. 2 11.05.2017 13/21
Aufgabe 3 Bestimme mit Hilfe des Master-Theorems eine scharfe asymptotische Schranke! C(1) := 1, n = 6 k, k N : C(n) = 3C( n 6 ) + n + 7 Lösung: Das Mastertheorem ist nicht ohne weiteres zu verwenden. Schätze ab: n 1 : n n + 7 8n. Definiere: C (n) := 3C( n) + 6 n und C (n) := 3C( n) + 6 8n. Es gilt C (n) C(n) C (n) und a = 1, b = 6, d = 3. Für c = 1 (von C ) d<b C (n) = Θ(n) C(n) = Ω(n). Für c = 8 (von C ) d<b C (n) = Θ(n) C(n) = O(n). C(n) = Θ(n). Marc Leinweber Algorithmen I - Tutorium 28 Nr. 2 11.05.2017 14/21
Das Merging-Problem Wie erhalte ich aus zwei sortierten Arrays ein sortieres Array? Marc Leinweber Algorithmen I - Tutorium 28 Nr. 2 11.05.2017 15/21
Der merge-algorithmus procedure merge(a : Array [1..n 1 ] of N 0, B : Array [1..n 2 ] of N 0 ) assert A, B sortiert A[n 1 + 1] :=, B[n 2 + 1] := n = n 1 + n 2 : N 0 C : Array [1..n] of N 0 j A = 1 : N 0, j B = 1 : N 0 for i := 1 to n do C[i] = min(a[j A ], B[j B ]) if A[j A ] < B[j B ] then j A = j A + 1 else j B = j B + 1 return C Marc Leinweber Algorithmen I - Tutorium 28 Nr. 2 11.05.2017 16/21
Der merge-algorithmus: Laufzeit procedure merge(a : Array [1..n 1 ] of N 0, B : Array [1..n 2 ] of N 0 ) assert A, B sortiert A[n 1 + 1] :=, B[n 2 + 1] := // O(1) n = n 1 + n 2 : N 0 // O(1) C : Array [1..n] of N 0 // O(1) j A = 1 : N 0, j B = 1 : N 0 // O(1) for i := 1 to n do // O(n) C[i] = min(a[j A ], B[j B ]) // O(1) if A[j A ] < B[j B ] then j A = j A + 1 // O(1) else j B = j B + 1 // O(1) return C Laufzeit? Welche Laufzeit hat obiger Algorithmus? Θ(n)! Marc Leinweber Algorithmen I - Tutorium 28 Nr. 2 11.05.2017 17/21
Der merge-algorithmus: Korrektheit procedure merge(a : Array [1..n 1 ] of N 0, B : Array [1..n 2 ] of N 0 ) assert A, B sortiert A[n 1 + 1] :=, B[n 2 + 1] := n = n 1 + n 2 : N 0 C : Array [1..n] of N 0 j A = 1 : N 0, j B = 1 : N 0 for i := 1 to n do C[i] = min(a[j A ], B[j B ]) if A[j A ] < B[j B ] then j A = j A + 1 else j B = j B + 1 return C Korrektheit? Welche Invarianten zeigen die Korrektheit des obigen Algorithmus? Marc Leinweber Algorithmen I - Tutorium 28 Nr. 2 11.05.2017 18/21
Der merge-algorithmus: Korrektheit (Forts.) Korrektheit? Welche Invarianten zeigen die Korrektheit des obigen Algorithmus? Invariante I am Ende der for-schleife: C[1..i] enthält genau A[1..j A 1], B[1..j B 1] Invariante II am Ende der for-schleife: B[k] < A[j A ], k [1, j B 1], A[l] < B[j B ], l [1, j A 1] Invariante III am Ende der for-schleife: C[1..i] ist sortiert Marc Leinweber Algorithmen I - Tutorium 28 Nr. 2 11.05.2017 19/21
Was haben wir heute gemacht? Invarianten Rekurrenzen Mastertheorem Merging Marc Leinweber Algorithmen I - Tutorium 28 Nr. 2 11.05.2017 20/21
Wahre Helden Viel Erfolg und ein schönes Wochenende! Marc Leinweber Algorithmen I - Tutorium 28 Nr. 2 11.05.2017 21/21