Erinnerung VL 18.04.2016 I Amuse Geule: Langzahlmultiplikation I I Gegeben: Langzahlen a, b (jeweils aus n Ziffern bestehend) Gesucht: Produkt p = a · b (bis zu 2n Ziffern) I Basisoperationen: Ziffernaddition (mit Übertrag), Ziffernmult. I Erster Schritt: Langzahladdition mit n Ziffernadditionen I Multiplikation Langzahl mit Ziffer: n Ziffernmult., n Ziffernadd. Schulmultiplikation: O n2 Ziffernoperationen Rekursive Multiplikation: O n2 Ziffernoperationen I I KIT – Institut für Theoretische Informatik 1 Erinnerung rekursiver Algorithmus Function recMult(a, b) assert a und b haben n Ziffern, sei k = dn/2e if n = 1 then return a · b Schreibe a als a1 · B k + a0 Schreibe b als b1 · B k + b0 return recMult(a1 , b1 ) · B 2k + (recMult(a0 , b1 )+recMult(a1 , b0 )) · B k + recMult(a0 , b0 ) KIT – Institut für Theoretische Informatik 2 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 Ziffern, sei k = dn/2e if n = 1 then return a · b Schreibe a als a1 · B k + a0 Schreibe b als b1 · B k + b0 c11 := recMult(a1 , b1 ) c00 := recMult(a0 , b0 ) return c11 · B 2k + (recMult((a1 + a0 ), (b1 + b0 )) − c11 − c00 )B k +c00 KIT – Institut für Theoretische Informatik 3 Beispiel 10 01 · 19 84 = 10 · 19 · 10000+ ((10 + 1) · (19 + 84) − 10 · 19 − 1 · 84) · 100+ 1 · 84 = 1985984 KIT – Institut für Theoretische Informatik 4 Analyse ( 1 T (n) ≤ 3 · T (dn/2e) + 10 · n if n = 1, if n ≥ 2. −→ (Master-Theorem) T (n) = Θ nlog2 3 ≈ Θ n1.58 KIT – Institut für Theoretische Informatik 5 Algorithm Engineering – was hat das mit der Praxis zu tun?0 Algorithmics experiment analyze design implement KIT – Institut für Theoretische Informatik 6 Algorithmentheorie (Karikatur) models design Theory Practice analysis implementation deduction perf. guarantees applications KIT – Institut für Theoretische Informatik 7 Algorithmik als Algorithm Engineering Algorithm Engineering Deduktion Leistungs− garantien Entwurf 2 falsifizierbare 3 Hypothesen 5 Induktion 4 Implementierung reale Eingaben Experimente 7 Anwendungen Analyse realistische Modelle 1 Algorithmen− 6 bibliotheken KIT – Institut für Theoretische Informatik 8 Zurück zur Langzahlmultiplikation I Zifferngröß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 9 Skalierung school method Karatsuba4 Karatsuba32 10 1 Asymptotik setzt sich durch I Konstante Faktoren oft Implementierungsdetail 0.1 time [sec] I 0.01 0.001 0.0001 1e-05 24 26 28 210 212 214 n KIT – Institut für Theoretische Informatik 10 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 I Praxis: Karatsuba-Multiplikation ist nützlich für Zahlenlängen aus der Kryptographie ∗ n) n log n GnuPG, OpenSSL verwenden Karatsuba (ab best. Bitlänge) ( 0 falls n ≤ 1 Iterierter Logarithmus: log∗ n = ∗ 1 + log log n sonst I KIT – Institut für Theoretische Informatik 11 Einführendes KIT – Institut für Theoretische Informatik 12 Überblick I Algorithmenanalyse I Maschinenmodell I Pseudocode I Codeannotationen I Mehr Algorithmenanalyse I Graphen KIT – Institut für Theoretische Informatik 13 (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 14 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 15 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 16 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 17 Register S 1 2 Program Control R 1 2 load ... ... store <>= +−*/&v~ k Θ (log Space) k (irgendeine Konstante) Speicher R1 ,. . . ,Rk für (kleine) ganze Zahlen KIT – Institut für Theoretische Informatik 18 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 19 Speicherzugriff S 1 2 Program Control R 1 2 load ... ... store <>= +−*/&v~ k Θ (log Speicher) Ri := S[Rj ] lädt Inhalt von Speicherzelle S[Rj ] in Register Ri . S[Rj ]:= Ri speichert Register Ri in Speicherzelle S[Rj ]. KIT – Institut für Theoretische Informatik 20 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 21 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 22 „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: n-maliges Quadrieren führt zu einer Zahl mit ≈ 2n Bits. OK für Berechenbarkeit Genug um alle benutzten Speicherstellen zu adressieren: bester Kompromiss. KIT – Institut für Theoretische Informatik 23 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 24 Mehr Maschinenmodell Cache: schneller Zwischenspeicher I begrenzte Größe kürzlich/häufig zugegriffene Daten sind eher im Cache I blockweiser Zugriff Zugriff auf konsekutive Speicherbereiche sind schnell Parallelverarbeitung: Mehrere Prozessoren unabhängige Aufgaben identifizieren ··· mehr in TI, Algorithmen II, Programmierparadigmen,. . . KIT – Institut für Theoretische Informatik 25 Mehr Maschinenmodell S 1 2 Caches Program Control R 1 2 ... k ... Netzwerk KIT – Institut für Theoretische Informatik 26