Algorithmen I

Werbung
Algorithmen I
Prof. Jörn Müller-Quade
26.04.2017
Institut für theoretische Informatik
Web:
https://crypto.iti.kit.edu/index.php?id=799
(Folien von Peter Sanders)
KIT Institut für Theoretische Informatik
1
Organisatorisches: Tutorien
I wöchentlich, ab nächster Woche
Einteilung mittels Webinscribe
https://webinscribe.ira.uka.de/
I WebInscribe seit gestern freigeschaltet
I WebInscribe wird am 27.04, 18 Uhr geschlossen
I Bitte tragen Sie sich unbedingt bis dahin ein!
I
WebInscribe teilt Sie so ein, dass Sie keine Terminkonikte haben!
I Erinnerung: Übungsblattabgabe zu Zweit möglich
I
I
Partner müssen im gleichen Tutorium sein
Tragen Sie sich bitte mit ihrem/r Partner/in als Lerngruppe im
WebInscribe ein!
KIT Institut für Theoretische Informatik
2
Organisatorisches: 1. Mai & Mailingliste
I Der 1. Mai (Montag) ist ein Feiertag
I Tutorien an diesem Tag fallen daher aus
I Bitte besuchen Sie in dieser Woche ein anderes Tutorium
I Hinweis: Mailingliste auf der Website. Melden Sie sich bitte an!
I Website:
https://crypto.iti.kit.edu/index.php?id=799
KIT Institut für Theoretische Informatik
3
Erinnerung VL 24.04.2017
I Amuse Geule: Langzahlmultiplikation
I
I
Gegeben: Langzahlen a, b (jeweils aus n Ziern bestehend)
Gesucht: Produkt p = a · b (bis zu 2n Ziern)
I Basisoperationen: Ziernaddition (mit Übertrag), Ziernmult.
I Erster Schritt: Langzahladdition mit
I Multiplikation Langzahl mit Zier:
I Schulmultiplikation:
O
n2
I Rekursive Multiplikation:
n
n
Ziernadditionen
Ziernmult.,
n
Ziernadd.
Ziernoperationen
O n2
Ziernoperationen
KIT Institut für Theoretische Informatik
4
Karatsuba-Ofman Multiplikation[1962]
Beobachtung:
(a1 + a0 )(b1 + b0 ) = a1 b1 + a0 b0 + a1 b0 + a0 b1
Function recMult(a, b)
assert a und b haben n Ziern,
if n = 1 then return a · b
sei
k = dn/2e
a1 · B k + a0
k
Schreibe
als b1 · B + b0
c11 := recMult(a1 , b1 )
c00 := recMult(a0 , b0 )
Schreibe
a
b
als
return
c11 · B 2k +
(recMult((a1 + a0 ), (b1 + b0 )) − c11 − c00 )B k
+c00
KIT Institut für Theoretische Informatik
5
Zurück zur Langzahlmultiplikation
I Zierngröÿe
↔
Hardware-Fähigkeiten
z. B. 64 Bit
I Schulmultiplikation für kleine Eingaben
I Assembler, SIMD,. . .
0.4
Karatsuba, n = 2048
Karatsuba, n = 4096
0.3
0.2
0.1
4
8
16
32
64 128 256 512 1024
recursion threshold
KIT Institut für Theoretische Informatik
6
Skalierung
school method
Karatsuba4
Karatsuba32
10
1
I Asymptotik
setzt sich durch
Implementierungsdetail
0.1
time [sec]
I Konstante Faktoren oft
0.01
0.001
0.0001
1e-05
24
26
28 210 212 214
n
KIT Institut für Theoretische Informatik
7
Blick über den Tellerrand
I Bessere Potenzen durch Aufspalten in mehr Teile
I Schnelle Fourier Transformation
O(n)
Multiplikationen von
O(log n)-Bit
Zahlen
I [Schönhage-Strassen 1971]: Bitkomplexität
O(n log n log log n)
∗
I [Fürer 2007]: Bitkomplexität 2O(log n) n log n
I Praxis: Karatsuba-Multiplikation ist nützlich für Zahlenlängen aus
der Kryptographie
I GnuPG, OpenSSL verwenden Karatsuba (ab best. Bitlänge)
(
Iterierter Logarithmus: log
∗
n=
0
falls
∗
1 + log log n
n≤1
sonst
KIT Institut für Theoretische Informatik
8
(Asymptotische) Algorithmenanalyse
Gegeben:
Ein Programm
Gesucht:
Laufzeit
T (I )
(# Takte), eigentlich für alle Eingaben
I
(!)
(oder auch Speicherverbrauch, Energieverbrauch,. . . )
Erste Vereinfachung:
Worst case:
T (n) = max|I |=n T (I )
(Später mehr:
average case, best case, die Rolle des Zufalls, mehr Parameter)
T(n)
Instanzen mit |I|=n
KIT Institut für Theoretische Informatik
9
Zweite Vereinfachung: Asymptotik
O(f (n)) = {g (n) : ∃c > 0 : ∃n0 ∈ N+ : ∀n ≥ n0 : g (n)≤c · f (n)}
höchstens
Ω (f (n)) = {g (n) : ∃c > 0 : ∃n0 ∈ N+ : ∀n ≥ n0 : g (n)≥c · f (n)}
mindestens
Θ(f (n)) = O(f (n)) ∩ Ω (f (n))
genau
o(f (n)) = {g (n) : ∀c > 0 : ∃n0 ∈ N+ : ∀n ≥ n0 : g (n)≤c · f (n)}
weniger
ω(f (n)) = {g (n) : ∀c > 0 : ∃n0 ∈ N+ : ∀n ≥ n0 : g (n)≥c · f (n)}
mehr
KIT Institut für Theoretische Informatik
10
O-Kalkül Rechenregeln
Schludrigkeit: implizite Mengenklammern.
Lese `f
(n) = E '
als `{f
(n)} ⊆ E '
cf (n) ∈ Θ(f (n))
für jede positive Konstante
c
k
∑ ai ni ∈ O(nk )
i=0
f (n) + g (n) ∈ Ω (f (n)) ,
f (n) + g (n) ∈ O(f (n))
falls
g (n) = O(f (n)) ,
O(f (n)) · O(g (n)) = O(f (n) · g (n)) .
u. s. w.
KIT Institut für Theoretische Informatik
11
Maschinenmodell:
RAM (Random Access Machine)
S
1
2
Program Control
R 1
2
load
...
...
store
<>=
+−*/&v~
k
Θ (log Space)
Moderne (RISC) Adaption des
von Neumann-Modells [von Neumann 1945]
KIT Institut für Theoretische Informatik
12
Register
S
1
2
Program Control
R 1
2
load
...
...
store
<>=
+−*/&v~
k
Θ (log Space)
k (irgendeine Konstante)
R1 ,. . . ,Rk für
Speicher
(kleine) ganze Zahlen
KIT Institut für Theoretische Informatik
13
Hauptspeicher
S
1
2
Program Control
R 1
2
load
...
...
store
<>=
+−*/&v~
k
Θ (log Space)
Unbegrenzter Vorrat an Speicherzellen
S[1], S[2]. . .
für
(kleine) ganze Zahlen
KIT Institut für Theoretische Informatik
14
Speicherzugri
S
1
2
Program Control
R 1
2
load
...
...
store
<>=
+−*/&v~
k
Θ (log Speicher)
Ri := S[Rj ]
lädt Inhalt von Speicherzelle
S[Rj ]:= Ri
speichert Register
Ri
S[Rj ]
in Register
in Speicherzelle
Ri .
S[Rj ].
KIT Institut für Theoretische Informatik
15
Rechnen
S
1
2
Program Control
R 1
2
load
...
...
store
<>=
+−*/&v~
k
Θ (log Space)
Ri := Rj R`
Registerarithmetik.
`' ist Platzhalter für eine Vielzahl von Operationen
Arithmetik, Vergleich, Logik
KIT Institut für Theoretische Informatik
16
Bedingte Sprünge
S
1
2
Program Control
R 1
2
load
...
...
store
<>=
+−*/&v~
k
Θ (log Space)
JZ j, Ri
Setze Programmausführung an Stelle
j
fort falls
Ri = 0
KIT Institut für Theoretische Informatik
17
Kleine ganze Zahlen?
Alternativen:
Konstant viele Bits (64?): theoretisch unbefriedigend, weil nur endlich
viel Speicher adressierbar
endlicher Automat
Beliebige Genauigkeit: viel zu optimistisch für vernünftige
Komplexitätstheorie. Beispiel:
zu einer Zahl mit
≈ 2n
n-maliges
Quadrieren führt
Bits.
OK für Berechenbarkeit
Genug um alle benutzten Speicherstellen zu adressieren: bester
Kompromiss.
KIT Institut für Theoretische Informatik
18
Algorithmenanalyse im RAM-Modell
Zeit: Ausgeführte Befehle zählen,
d. h. Annahme 1 Takt pro Befehl.
Nur durch späteres
O(·)
gerechtfertigt!
Ignoriert Cache, Pipeline, Parallelismus. . .
Platz: Etwas unklar:
I letzte belegte Speicherzelle?
I Anzahl benutzter Speicherzellen?
I Abhängigkeit von Speicherverwaltungsalgorithmen?
Hier: Es kommt eigentlich nie drauf an.
KIT Institut für Theoretische Informatik
19
Mehr Maschinenmodell
Cache: schneller Zwischenspeicher
I begrenzte Gröÿe
kürzlich/häug zugegriene Daten sind eher im
Cache
I blockweiser Zugri
Zugri auf konsekutive Speicherbereiche sind
schnell
Parallelverarbeitung: Mehrere Prozessoren
unabhängige Aufgaben identizieren
···
mehr in TI, Algorithmen II, Programmierparadigmen,. . .
KIT Institut für Theoretische Informatik
20
Mehr Maschinenmodell
S 1
2
Caches
Program Control
R 1
2
...
k
...
Netzwerk
KIT Institut für Theoretische Informatik
21
Pseudocode
just in time
Beispiel:
Class
Complex(x, y
Number
Number
r := x
i:= y
: Number) of
Number
√
Function abs : Number return r 2 + i 2
Function add(c 0 : Complex) : Complex
return Complex(r + c 0 .r , i + c 0 .i)
KIT Institut für Theoretische Informatik
22
Design by Contract / Schleifeninvarianten
assert: Aussage über Zustand der Programmausführung
Vorbedingung: Bedingung für korrektes Funktionieren einer Prozedur
Nachbedingung: Leistungsgarantie einer Prozedur,
falls Vorbedingung erfüllt
Invariante: Aussage, die an vielen Stellen im Programm gilt
Schleifeninvariante: gilt vor / nach jeder Ausführung des
Schleifenkörpers
Datenstrukturinvariante: gilt vor / nach jedem Aufruf einer Operation
auf abstraktem Datentyp
Hier: Invarianten als zentrales Werkzeug für Algorithmenentwurf und
Korrektheitsbeweis.
KIT Institut für Theoretische Informatik
23
Beispiel
(Ein anderes als im Buch)
Function
power(a : R; n0 : N) : R
p =a : R; r =1 : R; n=n0 : N
while n > 0 do
if n is odd then n−− ; r := r · p
else (n, p):= (n/2, p · p)
return r
KIT Institut für Theoretische Informatik
24
Beispiel
(Ein anderes als im Buch)
Function power(a : R; n0 : N) : R
assert n0 ≥ 0 and ¬(a = 0 ∧ n0 = 0)
// Vorbedingung
// p n r = an0
p =a : R; r =1 : R; n=n0 : N
while n > 0 do
invariant p n r = an0
// Schleifeninvariante (*)
if n is odd then n−− ; r := r · p
else (n, p):= (n/2, p · p)
assert r = an0
// (*)∧n = 0 −→Nachbedingung
return r
KIT Institut für Theoretische Informatik
25
Rechenbeispiel: 2
5
p =a = 2 : R; r =1 : R; n=n0 = 5 : N
while n > 0 do
if n is odd then n−− ; r := r · p
else (n, p):= (n/2, p · p)
Iteration
p
r
n
pn r
0
2
1
5
32
1
2
2
4
32
2
4
2
2
32
3
16
2
1
32
4
16
32
0
32
//
5 · 1 = 25
2
KIT Institut für Theoretische Informatik
26
Beispiel
Function power(a : R; n0 : N) : R
assert n0 ≥ 0 and ¬(a = 0 ∧ n0 = 0)
// Vorbedingung
// p n r = an0
p =a : R; r =1 : R; n=n0 : N
while n > 0 do
invariant p n r = an0
// Schleifeninvariante (*)
if n is odd then n−− ; r := r · p
else (n, p):= (n/2, p · p)
assert r = an0
// (*)∧n = 0 −→Nachbedingung
return r
neues n
Fall
n
ungerade: Invariante erhalten wegen
z }| {
p n r = p n − 1 pr
|{z}
neues r
KIT Institut für Theoretische Informatik
27
Beispiel
Function power(a : R; n0 : N) : R
assert n0 ≥ 0 and ¬(a = 0 ∧ n0 = 0)
// Vorbedingung
p =a : R; r =1 : R; n=n0 : N
// p n r = an0
while n > 0 do
invariant p n r = an0
// Schleifeninvariante (*)
if n is odd then n−− ; r := r · p
else (n, p):= (n/2, p · p)
assert r = an0
// (*)∧n = 0 −→Nachbedingung
return r
neues n
Fall
n
n
gerade: Invariante erhalten wegen p
z}|{
= (p · p) n/2
| {z }
neues p
KIT Institut für Theoretische Informatik
28
Programmanalyse
Die fundamentalistische Sicht: Ausgeführte RAM-Befehle zählen
einfache Übersetzungsregeln
z}|{
−→
Pseudocode
Idee:
O(·)-Notation
Maschinenbefehle
vereinfacht die direkte Analyse des Pseudocodes.
I
T (I ; I 0 ) = T (I ) + T (I 0 ).
I
T (if C then I else I 0 ) ∈ O(T (C ) + max(T (I ), T (I 0 ))).
I
T (repeat I until C ) ∈ O(∑i T (i -te
Rekursion
Iteration))
Rekurrenzrelationen
KIT Institut für Theoretische Informatik
29
Schleifenanalyse
Summen ausrechnen
Das lernen Sie in Mathe
Beispiel: Schulmultiplikation
KIT Institut für Theoretische Informatik
30
Eine Rekurrenz für Teile und Herrsche
Für positive Konstanten
a, b , c , d ,
(
a
r (n) =
cn + dr (n/b)
1
1
a
falls
falls
2
n/b
...
...
1
a
n = bk
n=1
n>1
n
cn
n/b
1
a
sei
1
a
für ein
Basisfall
teile und herrsche.
1
d
...
...
n/b
...
...
...
...
k ∈ N.
1
a
2
1
a k
KIT Institut für Theoretische Informatik
31
Master Theorem
(Einfache Form)
Für positive Konstanten
a, b , c , d ,
(
a
r (n) =
cn + dr (n/b)
sei
falls
falls
n = bk
n=1
n>1
für ein
k ∈ N.
Basisfall
teile und herrsche.
Es gilt


Θ(n)
r (n) ∈ Θ(n log n)


Θ nlogb d
Übung: dasselbe gilt, wenn wir beliebige
r (n) = cn + dr (dn/be)
für
n>1
falls
falls
falls
d <b
d =b
d > b.
n∈N
zulassen und
setzen.
KIT Institut für Theoretische Informatik
32
Beweisskizze
Auf Ebene
i
haben wir
di
Probleme @
n/b i = b k−i
i
n
d
d · c · i = cn
b
b
i
ad k
KIT Institut für Theoretische Informatik
33
Beweisskizze Fall
d <b
geometrisch schrumpfende Reihe
−→
erste Rekursionsebene kostet konstanten Teil der Arbeit
k−1 d i
∈ Θ(n)
r (n) = a| {z
· d } + cn · ∑
i=0 b
o(n)
| {z }
k
O(1)
d=2, b=4
KIT Institut für Theoretische Informatik
34
Beweisskizze Fall
d =b
gleich viel Arbeit auf allen
k = logb (n)
Ebenen.
r (n) = an + cn logb n ∈ Θ(n log n)
d=b=2
KIT Institut für Theoretische Informatik
35
Beweisskizze Fall
d >b
geometrisch wachsende Reihe
−→
letzte Rekursionsebene kostet konstanten Teil der Arbeit
k−1 k
r (n) = ad + cn ·
∑
i=0
beachte:
log b
d
b
i
∈ Θ nlogb d
log d
d k = 2k log d = 2k log b log d = b k log b = b k logb d = nlogb d
d=3, b=2
KIT Institut für Theoretische Informatik
36
Master Theorem Beispiele
Für positive Konstanten
a, b , c , d ,
(
a
r (n) =
cn + dr (n/b)
sei
falls
falls
n = bk
n=1
n>1
für ein
k ∈ N.
Basisfall
teile und herrsche.
schon gesehen, kommt noch, allgemeinerer Fall
d < b:
Median bestimmen
d = b:
mergesort, quicksort
d > b:
rekursive Multiplikation, Karatsuba-Ofman-Multiplikation
KIT Institut für Theoretische Informatik
37
Herunterladen