TU Ilmenau, Fakultät für Informatik und Automatisierung FG Komplexitätstheorie und Effiziente Algorithmen Univ.-Prof. Dr. Martin Dietzfelbinger Dipl.-Ing. Christopher Mattern, Dipl.-Inf. Michael Rink http://www.tu-ilmenau.de/iti/lehre/lehre-ss-2012/aud/ Algorithmen und Datenstrukturen“ ” Lösung zum Übungsblatt 0, SS 2012 Besprechung: 14. Kalenderwoche Lösung von Aufgabe 1 (Grundlegende Formeln) (a) 1. Sei n gerade. n X i= i=0 n/2 X i+ i=1 n/2 X (n − i + 1) = i=1 n/2 X (n + 1) = i=1 n · (n + 1) 2 2. Sei n ungerade. n X i= i=0 n+1 X i − (n + 1) nach 1. = i=0 (n + 1) · (n + 2) 2 · (n + 1) n · (n + 1) − = 2 2 2 (b) vollständige Induktion n P Wir betrachten die Aussage A(n): i2 = i=0 n·(n+1)·(2·n+1) . 6 I.A. z.z. A(0) 0 X i2 = 0 = i=0 0 · (0 + 1) · (2 · 0 + 1) 6 I.S. z.z. A(n − 1) ⇒ A(n) für alle n > 0 n X i2 = i=0 n−1 X I.V. i2 + n2 = i=0 (n − 1) · n · (2 · n − 1) 6 · n2 + 6 6 n · [(n + 1 − 2) · (2 · n + 1 − 2) + 6 · n] n · [(n + 1) · (2 · n + 1) − 2 · (n + 1) − 2 · (2 · n − 1) + 6 · n] = = 6 6 n · (n + 1) · (2 · n + 1) = 6 (c) Sei f (n) = 1. Sei q 6= 0. n P qi. i=0 n n+1 n X 1 X i+1 1 X i 1 f (n) = · q = · q = · −q 0 + q n+1 + qi q q q i=0 i=1 i=0 n+1 n+1 1 q − 1 q6=1 q −1 ⇔f (n) · 1 − = ⇔ f (n) = q q q−1 ! = 1 q n+1 − 1 · f (n) + q q 2 Algorithmen und Datenstrukturen“ ” Lösung zum Übungsblatt 0, SS 2012 2. Sei q = 0. f (n) = n X 0i = 00 + 0 = 1 = i=0 0n+1 − 1 0−1 (d) ∞ X i=0 q i = lim n→∞ n X −1 q n+1 |q|<1 −1 1 q n+1 − 1 = = + lim +0= n→∞ q − 1 q − 1 n→∞ q − 1 q−1 1−q q i = lim i=0 Lösung von Aufgabe 2 (Schranken für monoton fallende Funktionen) (a),(b),(c): Ansatz b−a−1 X Z a+1+i b Z f (x) dx = a Wegen Monotonie gilt: Es folgt: R a+1+i a+i Z i=0 f (x) dx ≤ f (a + i) · 1 und b f (x) dx ≥ (a) b−a−1 X a Z R a+1+i a+i f (a + 1 + i) = i=0 b f (x) dx ≤ (b) f (x) dx a+i b−a−1 X a f (x) dx ≥ f (a + 1 + i) · 1. b X f (i) i=a+1 f (a + i) = i=0 b−1 X f (i) . i=a Damit ergeben sich die Schranken: Z b+1 Z b b b X (b) X (a) (c) f (x) dx ≤ f (i) = f (a) + f (i) ≤ f (a) + f (x) dx . a (d) i=a i=a+1 a Rn (i) Wir betrachten zunächst das bestimmte Integral 1 x1 dx. Z n 1 dx = [ln(x) + C]n1 = ln(n) − 0 x 1 Mit (c) ergibt sich: ln(n + 1) ≤ n X 1 i=1 i ≤ 1 + ln(n) P Bemerkung: Hn = ni=1 1i ist die n-te harmonische Zahl, Partialsumme der (unendliP 1 chen, divergenten) harmonischen Reihe H = ∞ . i=1 R ni (ii) Wir betrachten zunächst das bestimmte Integral 1 1/x2 dx. n Z n 1 −1 1 x−2 dx = x + C = − − (−1) −1 n 1 1 R n −2 1 Es folgt: limn→∞ 1 x dx = limn→∞ 1 − n = 1. Mit (c) ergibt sich: 1≤ ∞ X 1 ≤1+1=2 i2 i=1 Bemerkung: Der exakte Wert ist π2 6 ≈ 1.645. (Basler Problem) Algorithmen und Datenstrukturen“ ” Lösung zum Übungsblatt 0, SS 2012 3 Lösung von Aufgabe 3 (Iteration) foo foo(n) = n X (2 · i + 1) = 2 · i=0 n X i+ i=0 n X 1=2· i=0 n · (n + 1) + (n + 1) = (n + 1)2 2 Die Summe der ersten (n + 1) ungeraden natürlichen Zahlen. bar bar(n) = n X n X n X 1 i=0 j=i+1 k=j+1 Idee 1: direkt ausrechnen bar(n) = n X n X n X 1= n−2 X n−1 X i=0 j=i+1 k=j+1 n X i=0 j=i+1 k=j+1 1= n−2 X n−1 X (n − j) = i=0 j=i+1 n−2 X n−1−i X i=0 j j=1 = 1 + 2 + · · · + (n − 2) + (n − 1)+ 1 + 2 + · · · + (n − 2)+ .. . 1 + 2+ 1 = n−1 X i(n − i) = n i=1 n−1 X i=1 i− n−1 X i2 i=1 (n + 1)n(n − 1) (n − 1)n n(n − 1)(2n − 1) − = =n 2 6 6 n+1 = . 3 Idee 2: geschickt zählen Behauptung: Es existiert eine Bijektion von der Menge aller 3elementigen Teilmengen von {0, 1, 2, . . . , n} in die Menge der 3-Tupel (i, j, k), mit 0 ≤ i ≤ n, i + 1 ≤ j ≤ n, j + 1 ≤ k ≤ n. Beweis: Wir betrachten die elementweise Abbildung f : {a, b, c} 7→ sort(a, b, c) wobei sort auf eingabe 3-er natürlicher Zahlen das aufsteigend geordnete 3-Tupel dieser Zahlen zurückgibt. Es folgt direkt: – Die Abbildung ist injektiv. – Die Abbildung ist surjektiv. Folgerung: f ist eine Bijektion und damit gilt bar(n) = Pn Pn i=0 j=i+1 Pn k=j+1 1 Lösung von Aufgabe 4 (Rekursion) (a) Sei x ∈ N beliebig aber fest. Wir betrachten die Aussage A(y): mult(x, y)= x · y. Behauptung: ∀y ∈ N gilt A(y) Beweis: vollständige Induktion Beobachtung: = n+1 3 . 4 Algorithmen und Datenstrukturen“ ” Lösung zum Übungsblatt 0, SS 2012 • lsb(n) = 0 ⇔ n ist gerade, lsb(n) = 1 ⇔ n ist ungerade • shiftL(n) = 2 · n • shiftR(n) = n/2 ⇔ n ist gerade, shiftR(n) = (n − 1)/2 ⇔ n ist ungerade I.A. z.z. A(0) mult(x, 0) = 0 = x · 0 (Basisfall der Rekursion) I.S. z.z. A(0) ∧ A(1) ∧ . . . ∧ A(y − 1) ⇒ A(y) für alle y > 0 1. Sei y gerade. mult(x, y) = 2 · mult(x, y/2) A(y/2) = 2 · (x · y/2) = x · y ⇒ A(y) gilt für y gerade 2. Sei y ungerade. mult(x, y) = 2 · mult(x, (y − 1)/2) + x A((y−1)/2) = 2 · (x · (y − 1)/2) + x = x · y ⇒ A(y) gilt für y ungerade (b) Sei y ≥ 0. Dann gibt es einen Aufruf mult(x, 0). Sei y ≥ 1. Dann gibt es einen Aufruf mult(x, 1). Sei y ≥ 2. Sei i ≥ 1 mit 2i ≤ y < 2i+1 . Dann gibt es i Aufrufe mult(x, y 0 ) mit 2 ≤ y 0 ≤ y. Es folgt: 1 Aufruf für y = 0 und blog2 yc + 2 Aufrufe für y ≥ 1. (c) Rufe mult wie folgt auf: mult(max{x, y}, min{x, y}) (d) iterativ: mult(x, y) z←0 while y > 0 do if lsb(y)= 1 then z ← z + x x ← shiftL(x) y ← shiftR(y) end return z