Algorithmen I
Total Page:16
File Type:pdf, Size:1020Kb
Sanders: Algorithmen I April 17, 2009 1 Algorithmen I Peter Sanders Übungen: Robert Geisberger und Johannes Singler Institut für theoretische Informatik, Algorithmik II Web: http://algo2.iti.uni-karlsruhe.de/AlgorithmenI.php Sanders: Algorithmen I April 17, 2009 2 Organisatorisches Vorlesungen: Mo: 14:00–15:30 Mi: 14:00–14:45 Saalübung: Mi: 14:45–15:30 Tutorium: wöchentlich Einteilung mittels Webinscribe Übungsblätter: wöchentlich Ausgabe Mittwoch nach der Übung Abgabe Freitag 14 Uhr (9 Tage nach Ausgabe) Sanders: Algorithmen I April 17, 2009 3 Organisatorisches Sprechstunde: ! Peter Sanders, Dienstag 14–15 Uhr, Raum 217 Sanders: Algorithmen I April 17, 2009 4 Organisatorisches Mittsemesterklausur: Mo 8.6. 14:00–15:45, Audimax. 10% der Note Abschlussklausur: 3.8.2009, 11:00–13:00. 90% der Note Sanders: Algorithmen I April 17, 2009 5 Materialien ! Folien, Übungsblätter ! Buch: K. Mehlhorn, P. Sanders Algorithms and Data Structures — The Basic Toolbox Springer 2008, ggf. einzelne Kapitel der deutschen Übersetzung von Prof. Martin Dietzfelbinger. ! Taschenbuch der Algorithmen Springer 2008 (Unterhaltung / Motivation) Sanders: Algorithmen I April 17, 2009 6 Algorithmus? Kann man das essen? Pseudogriechische Verballhornung eines Namens, der sich aus einer Landschaftsbezeichnung ableitet: Al-Khwarizmi war persischer/usbekischer Wissenschaftler (aus Khorasan) aber lebte in Bagdad 780..840. ≈ Das war damals “Elite” – Machtzentrum des arabischen Kalifats auf seinem Höhepunkt. Er hat ein Rechenlehrbuch geschrieben. "Algorithmus wurde zum Synonym für Rechenvorschrift. Sanders: Algorithmen I April 17, 2009 7 Moderne Definition (Wikipedia): Unter einem Algorithmus versteht man eine genau definierte Handlungsvorschrift zur Lösung eines Problems oder einer bestimmten Art von Problemen in endlich vielen Schritten. Sanders: Algorithmen I April 17, 2009 8 Algorithmik Kerngebiet der (theoretischen) Informatik mit direktem Anwendungsbezug Informatik praktische Algorithmik effiziente Soft− u. Hardware Logik korrekte theoretische Sanders: Algorithmen I April 17, 2009 9 Datenstruktur Ein Algorithmus bearbeitet Daten. Wenn ein Teil dieser Daten eine (interessante) Struktur haben, nennen wir das Datenstruktur. Immer wiederkehrende Datenstrukturen und dazugehörige Algorithmenteile " wichtiger Teil der Basic Toolbox 5 17 2 37 1113 19 2357 11 13 17 19 ∞ Sanders: Algorithmen I April 17, 2009 10 Themenauswahl: Werkzeugkasten Immer wieder benötigte ! Datenstrukturen ! Algorithmen ! Entwurfstechniken " neue Algorithmen ! Analysetechniken " Leistungsgarantien, objektiver Algorithmenvergleich Jeder Informatiker braucht das " Pflichtvorlesung Sanders: Algorithmen I April 17, 2009 11 Inhaltsübersicht 1. Amuse Geule Appetithäppchen 2. Einführung der Werkzeugkasten für den Werkzeugkasten 3. Folgen, Felder, Listen Mütter und Väter aller Datenstrukturen 4. Hashing Chaos als Ordnungsprinzip 5. Sortieren I Effizienz durch Ordnung 6. Prioritätslisten immer die Übersicht behalten 7. Sortierte Liste die eierlegende Wollmilchsau 8. Graphrepräsentation Beziehungen im Griff haben 9. Graphtraversierung globalen Dingen auf der Spur 10. Kürzeste Wege schnellstens zum Ziel 11. Minimale Spannbäume immer gut verbunden 12. Optimierung noch mehr Entwurfsmethoden Sanders: Algorithmen I April 17, 2009 12 1 Amuse Geule Beispiel: Langzahl-Multiplikation Schreibe Zahlen als Ziffernfolgen a =(an 1 ...a0), ai 0..B 1. − ∈ − Wir zählen Volladditionen (c$,s):= ai+b j+c und Ziffernmultiplikationen (p , p):= a b $ i· j Sanders: Algorithmen I April 17, 2009 13 1.1 Addition c=0 : Digit // carry / Überlauf for i := 0 to n 1 do (c,s ):= a + b + c − i i i sn:= c a b 0 c s n 0 Satz: Addition von n-Ziffern-Zahlen braucht n Ziffern-Additionen. Sanders: Algorithmen I April 17, 2009 14 Exkurs: Pseudocode ! Kein C/C++/Java Menschenlesbarkeit vor Maschinenlesbarkeit ! Eher Pascal + Mathe begin/end Einrückung trägt Bedeutung − Zuweisung: := Kommentar: // Ausdrücke: volle Mathepower i 2: a,b 2:i = ab { ≥ ¬∃ ≥ } Deklarationen: c=0 : Digit Tupel: (c,si):= ai + bi + c Schleifen: for , while , repeat ...until ,. uvam: Buch Abschnitt 2.3, hier: just in time und on demand if , Datentypen, Klassen, Speicherverwaltung Sanders: Algorithmen I April 17, 2009 15 Ziffernmultiplikation Function numberTimesDigit(a : Array [0..n 1]of Digit,b : Digit) − low(ab) high(ab) 0 c result n 0 Sanders: Algorithmen I April 17, 2009 16 Ziffernmultiplikation Function numberTimesDigit(a : Array [0..n 1]of Digit,b : Digit) − result : Array [0..n]of Digit c=0 : Digit // carry / Überlauf (h ,!):= a[0] b // Ziffernmultiplikation $ · result[0]:= ! for i := 1 to n 1 do // n 1 Iterationen − − (h,!):= a[i] b // Ziffernmultiplikation · (c, result[i]):= c + h$ + ! // Ziffernaddition h$:= h result[n]:= c + h$ // Ziffernaddition, kein Überlauf?! return result Analyse: 1+(n 1)=n Multiplikationen, (n 1)+1 = n Additionen − − Sanders: Algorithmen I April 17, 2009 17 1.2 Schulmultiplikation p=0 : N // Langzahl for j := 0 to n 1 do − //Langzahladdition, Langzahl mal Ziffer, Schieben: p:= p + a b[ j] B j · · 2n−1 n 0 b a 0 aB aB2 aBn−1 n−1 p n Sanders: Algorithmen I April 17, 2009 18 Schultmultiplikation Analyse p=0 : N for i := 0 to n 1 do − p:= p // n + j Ziffern (außer bei j = 0) + // n + 1 Ziffernadditionen (optimiert) a b[ j] // je n Additionen/Multiplikationen · B j // schieben (keine Ziffernarithmetik) · Insgesamt: n2 Multiplikationen n2 +(n 1)(n + 1)=2n2 1 Additionen − − 3n2 1 3n2 Ziffernoperationen − ≤ Sanders: Algorithmen I April 17, 2009 19 Exkurs O-Kalkül, die Erste O( f (n)) = g(n) : c > 0: n N : n n : g(n) c f (n) { ∃ ∃ 0 ∈ + ∀ ≥ 0 ≤ · } Idee: Konstante Faktoren (und Anfangsstück) ausblenden + Operationen zählen " Laufzeit welche Ops.? + Rechnungen vereinfachen + Interpretation vereinfachen ? Werfen wir zuviel Information weg ? Beispiel: Schulmultiplikation braucht Zeit O n2 ! " Sanders: Algorithmen I April 17, 2009 20 1.3 Ergebnisüberprüfung später an Beispielen Sanders: Algorithmen I April 17, 2009 21 1.4 Ein rekursiver Algorithmus Function recMult(a,b) assert a und b haben n = 2k Ziffern, n ist Zweierpotenz if n = 1 then return a b · Schreibe a als a Bk + a 1 · 0 Schreibe b als b Bk + b 1 · 0 return 2k recMult(a1,b1) B + · k (recMult(a0,b1)+recMult(a1,b0))B +recMult(a0,b0) Sanders: Algorithmen I April 17, 2009 22 Analyse Function recMult(a,b) // T(n) Ops assert a und b haben n = 2k Ziffern, n ist Zweierpotenz if n = 1 then return a b // 1 Op · Schreibe a als a Bk + a // 0 Ops 1 · 0 Schreibe b als b Bk + b // 0 Ops 1 · 0 return 2k recMult(a1,b1) B + // T(n/2)+2n Ops · k (recMult(a0,b1)+recMult(a1,b0))B // 2T(n/2)+2n Ops +recMult(a0,b0) // T(n/2)+2n Ops Also T(n) 4T(n/2)+6n ≤ Übung: Wo kann man hier 2n Ops sparen? ≈ Sanders: Algorithmen I April 17, 2009 23 Analyse 1 if n = 1, T(n) ≤ 4 T( n/2 )+6 n if n 2. · ) * · ≥ (Master-Theorem, stay tuned) −→ T(n)=Θ nlog2 4 = O n2 Aufgabe: Zeigen Sie durch! vollständige" Induktion,! dass" T(n) 7n2 6n ≤ − , falls n eine Zweierpotenz ist Sanders: Algorithmen I April 17, 2009 24 Exkurs: Algorithmen-Entwurfsmuster Im Buch: siehe auch Index! Schleife: z. B. Addition Unterprogramm: z. B. Ziffernmultiplikation, Addition Teile und Herrsche: (lat. divide et impera, engl. divide and conquer) Aufteilen in eins oder mehrere, kleinere Teilprobleme, oft rekursiv Es kommen noch mehr: greedy, dynamische Programmierung, Metaheuristiken, Randomisierung,. Sanders: Algorithmen I April 17, 2009 25 1.5 Karatsuba-Ofman Multiplikation[1962] Beobachtung: (a1 + a0)(b1 + b0)=a1b1 + a0b0 + a1b0 + a0b1 Function recMult(a,b) assert a und b haben n = 2k Ziffern, n ist Zweierpotenz if n = 1 then return a b · Schreibe a als a Bk + a 1 · 0 Schreibe b als b Bk + b 1 · 0 c11:= recMult(a1,b1) c00:= recMult(a0,b0) return c B2k+ 11 · (recMult((a + a ),(b + b )) c c )Bk 1 0 1 0 − 11 − 00 +c00 Sanders: Algorithmen I April 17, 2009 26 Analyse 1 if n = 1, T(n) ≤ 3 T( n/2 )+10 n if n 2. · ) * · ≥ (Master-Theorem) −→ T(n)=Θ nlog2 3 Θ n1.58 ≈ ! " ! " Sanders: Algorithmen I April 17, 2009 27 1.6 Algorithm Engineering – was hat das mit der Praxis zu tun?$ design experiment Algorithmics analyze implement Mehr: DFG Schwerpunktprogram www.algorithm-engineering.de Sanders: Algorithmen I April 17, 2009 28 Algorithmentheorie (Karikatur) models design Theory Practice analysis implementation deduction perf. guarantees applications Sanders: Algorithmen I April 17, 2009 29 Algorithmik als Algorithm Engineering Algorithm realistische Modelle 1 reale Engineering 7 Eingaben Anwendungen Entwurf 2 falsifizierbare Analyse3 Hypothesen 5 Experimente Induktion Deduktion 4 Implementierung Leistungs− garantien Algorithmen− 6 bibliotheken Sanders: Algorithmen I April 17, 2009 30 Zurück zur Langzahlmultiplikation ! Zifferngröße Hardware-Fähigkeiten ↔ z. B. 32 Bit ! Schulmultiplikation für kleine Eingaben ! 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 Sanders: Algorithmen I April 17, 2009 31 school method Skalierung Karatsuba4 10 Karatsuba32 ! Asymptotik setzt sich durch 1 ! Konstante Faktoren oft 0.1 Implementierungsdetail 0.01 time [sec] 0.001 0.0001 1e-05 24 26 28 210 212 214 n Sanders: Algorithmen I April 17, 2009 32 Blick über den Tellerrand ! Bessere Potenzen durch Aufspalten in mehr Teile ! Schnelle Fourier Transformation " O(n) Multiplikationen von O(logn)-Bit Zahlen ! [Schönhage-Strassen 1971]: Bitkomplexität O(nlognloglogn) ! [Fürer 2007]: Bitkomplexität 2O(log∗ n)nlogn ! Praxis: Karatsuba-Multiplikation ist nützlich für Zahlenlängen aus der Kryptographie 0 falls n 1 Iterierter