Algorithmen und Datenstrukturen“ ¨Ubungsblatt 1, SS

Werbung
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.
Herunterladen