TU Ilmenau, Fakultät IA Institut TI, FG Komplexitätstheorie und Effiziente Algorithmen Univ.-Prof. Dr. Martin Dietzfelbinger Dipl.-Ing. Christopher Mattern http://www.tu-ilmenau.de/iti/lehre/lehre-ss-2013/aud/ Algorithmen und Datenstrukturen“ ” Übungsblatt 1, SS 2013 Besprechung: 15. Kalenderwoche Aufgabe 1 (ganzzahlige Division) Die Division zweier ganzer Zahlen a ≥ 0 und b > 0 liefert den ganzzahligen Quotienten q ≥ 0 und den ganzzahligen Rest 0 ≤ r < b mit a = q · b + r. Quotient und Rest sind stets eindeutig bestimmt. Zur Berechnung von (q, r) sei folgende rekursive Prozedur gegeben: div(a, b) 1 2 3 4 5 6 if a = 0 then return (0, 0) (q, r) ← div(shiftR(a), b) (q, r) ← (shiftL(q), shiftL(r)) r ← r + lsb(a) if r ≥ b then (q, r) ← (q + 1, r − b) return (q, r) Für die Definition der Funktionen shiftL, shiftR und lsb siehe Übungsblatt 0, Aufgabe 4. (a) Zeigen Sie: Der Algorithmus ist korrekt. Hinweis: Verallgemeinerte Induktion über a. (b) Wie groß ist die Anzahl der rekursiven Aufrufe, wenn a und b je n-Bit-Zahlen sind? Aufgabe 2 (Schnelle Modulare Exponentiation) Der Ausdruck ab mit a, b ∈ N soll durch Multiplikation berechnet werden. Rechenoperationen arbeiten dabei gemäß Modulo-n-Arithmetik, d.h., a · a ≡ (a · a) mod n. Typischerweise ist n = 2w , wobei w die Wortbreite eines Prozessors in Bit, bspw. w = 32 oder w = 64, ist. (a) Formulieren Sie einen Algorithmus in Pseudocode, der das Ergebnis durch sukzessive Multiplikation liefert. (b) Der Ausdruck ab kann in a · a · . . . · a · a · a · . . . · a · z, | {z } | {z } bb/2c bb/2c ( 1 z= a , b gerade , ungerade zerlegt werden. Entwickeln Sie ausgehend von dieser Beobachtung einen rekursiven Algorithmus (in Pseudocode) zur Berechnung von ab . P i (c) Sei xn−1 xn−2 . . . x0 die Binärdarstellung der n-Bit-Zahl b, d.h. b = n−1 i=0 xi · 2 . Der Ausdruck b a kann als n−1 Y i xi Y n−1 + x n−2 + ... + x i n−2 ·2 0 axn−1 ·2 = a2 = a2 i=0 0≤i<n xi =1 dargestellt werden. Entwickeln Sie ausgehend von dieser Beobachtung einen iterativen Algorithmus (in Pseudocode) zur Berechnung von ab . i i+1 Hinweis: Gilt u = a2 , folgt u2 = a2 . 2 Algorithmen und Datenstrukturen“ ” Übungsblatt 1, SS 2013 (d) Schätzen Sie die Anzahl der Multiplikationen und die Bitkomplexität der Algorithmen aus den Teilaufgaben (a) bis (c) in O-Notation ab! Hinweis: Die Multiplikation zweier Zahlen a und b kostet O(log a · log b) Bitoperationen. Aufgabe 3 (Euklidischer Algorithmus) Der größte gemeinsame Teiler zweier Zahlen a, b ∈ N kann durch den Euklidischen Algorithmus wie folgt berechnet werden: gcd(a, b) 1 2 3 4 5 if b = 0 then return a else return gcd(b, a mod b) end (a) Schätzen Sie die Anzahl der Modulo-Operationen (Zeile 4) in O-Notation ab! Hinweis: Betrachten Sie zwei rekursive Aufrufe und beobachten Sie die Bitanzahl der Argumente a und b. (b) Wenn a und b jeweils mit maximal n Bit besetzt sind, wie groß ist die Bitkomplexität in O-Notation? Hinweis: Die Operation a mod b kostet O(n · m) (Schulmethode), wenn a aus n Bits und b aus m Bits besteht.