Organisatorisches Weiterer Ablauf: Algorithmen und Datenstrukturen (für ET/IT) • Mittwoch, 2. Juli: • Zentralübung: zweite Probe-Klausur • Donnerstag, 3. und Montag, 7. Juli: • Vorlesung: Kapitel 11 Datenkompression • Mittwoch, 9. Juli: • Zentralübung: Fragestunde • Donnerstag, 10. Juli: • Vorlesung: Kapitel 12 Kryptographie • Freitag, 11. Juli: • letzte Tutorfragestunde • Mittwoch, 16. Juli: • Klausur Sommersemester 2014 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München 2 Übersicht Inhalte Übersicht Inhalte 1 Einführung 2 Grundlagen von Algorithmen 3 Grundlagen von Datenstrukturen 4 Grundlagen der Korrektheit von Algorithmen 5 Grundlagen der Effizienz von Algorithmen 11 Datenkompression 6 Grundlagen des Algorithmen-Entwurfs 12 Kryptographie 7 Fortgeschrittene Datenstrukturen 8 Such-Algorithmen 9 Graph-Algorithmen 10 Numerische Algorithmen Nicht Klausur-relevant: 3 4 Kapitel 1: Einführung Kapitel 2: Grundlagen von Algorithmen 2.1 Darstellung von Algorithmen • Pseudocode, Flowchart, Struktogramm, Programmiersprachen • Churchsche These • Was ist ein Algorithmus? 2.2 Elementare Bausteine • Was ist eine Datenstruktur? • Elementarer Verarbeitungsschritt, Sequenz, bedingter • Wo kommen sie vor? Verarbeitungsschritt, Wiederholung • Einordnung in Computer-Schema 2.3 Logische Ausdrücke • Konjunktion, Disjunktion, Negation • Rechenregeln • Logische Ausdrücke in Pseudocode 5 Kapitel 3: Grundlagen von Datenstrukturen 6 Kapitel 3: Grundlagen von Datenstrukturen 3.1 Primitive Datentypen und Zahldarstellung • Bits und Bytes, Primitive Datentypen • Dezimal-, Binär-, Hexadezimalsystem, 2-Komplement 3.5 Abstrakte Datentypen • Abstrakter Datentyp, abstrakte Variable Darstellung • Fixed point und Floating point Darstellung 3.6 Stacks • Stack mit Operationen und Implementationen 3.2 Felder als sequentielle Liste (sequentielle / verkettete Liste) • Feld als sequentielle Liste mit Operationen 3.7 Queues 3.3 Zeichen und Zeichenfolgen • Queue mit Operationen und Implementationen • ASCII Code, Unicode, Zeichen und Strings (verkettete Liste, (zirkuläre) sequentielle Liste) 3.4 Felder als verkettete Liste • Feld als (doppelt) verkettete Liste mit Operationen 7 8 Kapitel 4: Grundlagen der Korrektheit von Algorithmen Kapitel 5: Grundlagen der Effizienz von Algorithmen 4.1 Motivation und Spezifikation • Relative Korrektheit, Nachweis durch Verifikation, Validation 5.1 Motivation 4.2 Verifikation • Komplexität Insertion Sort, Wachstumsraten • Vor- und Nachbedingungen, partielle und totale Korrektheit • Korrektheitsbeweis für 4 Bausteine 5.2 RAM-Modell • Rechnermodell zur Laufzeitanalyse 4.3 Beispiel: Insertion Sort 5.3 Landau-Symbole • Algorithmus und Verifikation • Landau-Symbole O und Θ, Konstanten und Rechenregeln • Kategorisierung der Effizienz von Algorithmen • Komplexität der 4 Bausteine 4.4 Validation • Systematische Tests: Blackbox-, Whitebox-, Regression-, Integrations-Test • Fehlerquellen, fehlertolerantes und fehlerpräventives Programmieren 10 9 Kapitel 6: Grundlagen des Algorithmen-Entwurfs Ende Teil 1 6.1 Entwurfsprinzipien • Prinzip Verfeinerung, Prinzip Algorithmen-Muster 6.2 Divide and Conquer • Muster Divide and Conquer, MergeSort, QuickSort • Ausblick auf später: Binäre Suche, Strassen, FFT 6.3 Greedy-Algorithmen Ende Teil 1, nun Teil 2 • Muster Greedy, Wechselgeld, minimaler Spannbaum • Ausblick auf später: Dijkstra, Prim (Huffman Code - nicht Klausur-relevant) 6.4 Backtracking • Muster Backtracking, Labyrinth, Traveling Salesman, Acht-Damen-Problem 6.5 Dynamisches Programmieren • Muster dynamisches Programmieren, Fibonacci-Zahlen 11 12 Kapitel 7: Fortgeschrittene Datenstrukturen Kapitel 7.1: Graphen Definition: Ungerichteter Graph • Ungerichteter Graph: Definition: Ungerichteter Graph Ein ungerichteter Graph ist ein Paar G = (V , E ) mit • V endliche Menge der Knoten • E ✓ {u, v } : u, v 2 V 7.1 Graphen Menge der Kanten Definition: Gerichteter Graph • Gerichteter Graph: 7.2 Bäume • auf Englisch: Definition: Gerichteter • Knoten = vertices • Kanten = edges 7.3 Heaps 7.4 Priority Queues Beispiel: Graph 4 Ein gerichteter Graph ist ein Paar G = (V , E ) mit • es ist {u, v } = {v , u}, d.h. Richtung der • V endliche Menge der Knoten Kante spielt keine Rolle • E ✓ V ⇥ V Menge der Kanten 2 3 1 5 Definition: Gewichteter Graph • Gewichteter Graph: • E ✓ (u, v ) : u, v 2 V =V ⇥V Beispiel: Graph •Definition: es ist (u, vGewichteter ) 6= (v , u), d.h. Richtung der 13 4 spielt eine Rolle EinKante gewichteter Graph ist ein Graph G = (V , E ) mit einer w :möglich, E ! R. d.h. Kanten der 2 •Gewichtsfunktion hier sind Schleifen Form (u, u) für u 2 V Beispiel: • der Graph G kann gerichtet oder ungerichtet 1 sein 4 • je nach Anwendung kann ein verschiedener 1 Wertebereich für die Funktion w gewählt 3 2 werden • z.B. R oder N0 Kapitel 7.1: Graphen 3 1 2 14 5 7 7 3 8 9 Kapitel 7.2: Bäume 5 5 5 Definition Wald/Baum • Bäume und Wälder: • Eigenschaften von Graphen: • adjazente Knoten • gerichteter Graph: Eingangs- und Ausgangsgrad • ungerichteter Graph: Grad • Pfad zwischen Knoten • Zyklus in gerichteten und ungerichteten Graphen • (starker) Zusammenhang und (starke) Zusammenhangskomponenten • Darstellung von Graphen: • Adjazenzmatrizen, Speicherkomplexität: O(|V |2 ) Definition: Wald und Baum 9 • Ein azyklischer ungerichteter Graph heißt auch Wald. • Ein zusammenhängender, azyklischer ungerichteter Graph heißt auch Baum. • falls Kante entfernt: nicht mehr zusammenhängend • falls Kante hinzugefügt: nicht mehr azyklisch • |E | = |V | − 1 • Eigenschaften: • Wurzelknoten, Vaterknoten, innere Knoten, Blätter • Adjazenzlisten, Speicherkomplexität: O(|V | + |E |) Wurzel • Komplexitäten der Operationen • Kanten-Operationen einfach mit Adjazenzmatrix: O(1) • Knoten einfügen einfach mit Adjazenzliste: O(1) • Knoten löschen immer aufwendig: O(|V |2 ) bzw. O(|V | + |E |) w Vater innerer Knoten 28 x Kind v Blätter 15 16 Kapitel 7.2: Bäume Kapitel 7.2: Bäume • Eigenschaften: • Tiefe, Ebene, Höhe w Ebene 0 • Traversierung von Binärbäumen: • Tiefensuche/DFS: Pre-order (wlr), In-order (lwr), Post-order (lrw) Implementierung z.B. mit Stack Ebene 1 Höhe = 3 Ebene 2 Ebene 3 • Spezialfälle: • geordnete Bäume (→ Suchbäume) • n-äre Bäume • Binärbäume • Darstellung von Bäumen: • mit (doppelt) verketteten Listen • Binärbäume mit (doppelt) verketteten Listen (Kind links/rechts) bzw. als sequentielle Liste • Breitensuche/BFS Implementierung z.B. mit Queue 17 Kapitel 7.3: Heaps 18 Kapitel 7.3: Heaps • Operationen: • minHeapify: O(log n) • buildMinHeap: O(n) • extractMin: O(log n) Definition Heap • Heap: Definition Heap Sei G = (V , E ) ein Binärbaum mit Wurzel w 2 V . Jeder Knoten v 2 V sei mit einem Wert key (v ) verknüpft, die Werte seien durch , geordnet. G heißt Heap, falls er folgende zwei Eigenschaften erfüllt: 1 • G ist fast vollständig, d.h. alle Ebenen sind vollständig gefüllt, 5 2 9 ausser auf der untersten Ebene, die von links her nur bis zu einem bestimmten Punkt gefüllt sein muss. 8 3 11 5 2 9 extractMin Max-Heap-Eigenschaft, d.h. für alle Knoten v 2 V , v 6= w gilt 2 3 5 • Min-Heap: key (v .vater ) key (v ) 11 9 8 minHeapify key (v ) 8 minHeapify 2 • G erfüllt die Min-Heap-Eigenschaft bzw. die • Max-Heap: key (v .vater ) 11 3 3 5 8 9 11 minHeapify • HeapSort: • buildMinHeap und extractMin bis leer • in-place, O(n log n), besser als QuickSort im worst case Entsprechend der Heap-Eigenschaft heißt G Min-Heap bzw. Max-Heap. 20 19 20 Kapitel 7.4: Priority Queues Kapitel 8: Such-Algorithmen • Priority Queue: Definition Priority Queue Definition Priority Queue Eine Priority Queue ist ein abstrakter Datentyp. Sie beschreibt einen Queue-artigen Datentyp für eine Menge von Elementen mit zugeordnetem Schlüssel und unterstützt die Operationen 8.1 Lineare Suche 8.2 Binäre Suche • Einfügen von Elemente mit Schlüssel in die Queue, 8.3 Binäre Suchbäume • Entfernen von Element mit minimalem Schlüssel aus der 8.4 Balancierte Suchbäume Queue, • Ansehen des Elementes mit minimalem Schlüssel in der Queue. • Operationen auf Priority1 Queue 0 2 7 als 3Heap: • extractMin und insert, beides O(log n) • decreaseKey: O(log n) 8.5 Suchen mit Hashtabellen 8.6 Suchen in Zeichenketten 5 • entsprechend gibt es auch eine Priority Queue mit • auch implementierbar mitvon(un)sortierten Feldern Entfernen/Ansehen Elememt mit maximalem Schlüssel 11 21 Kapitel 8.1 und 8.2: Lineare und binäre Suche Kapitel 8.3: Binäre Suchbäume Binärer Suchbaum • Binärer Suchbaum: • Lineare Suche: durchlaufe Array bis gesuchter Schlüssel Definition binärer Suchbaum gefunden: O(n) Sei G = (V , E ) ein Binärbaum mit Wurzel w 2 V . Jeder Knoten v 2 V sei mit einem Wert key (v ) verknüpft, die Werte seien durch , geordnet. G heißt binärer Suchbaum, falls für alle inneren Knoten v 2 V gilt • Binäre Suche: sortiere Array, dann Divide and Conquer: O(log n) 1 2 3 4 5 6 7 8 9 10 1 3 4 6 8 12 14 15 17 20 low 1 middle 3 4 6 8 14 low 1 3 4 6 8 • für alle Knoten x im linken Teilbaum v .left gilt key (x) key (v ) • für alle Knoten y im rechten Teilbaum v .right gilt high 12 15 17 middle 12 14 low high 15 22 key (y ) 20 key (v ) high 17 5 20 32 2 1 23 8 3 9 24 Kapitel 8.3: Binäre Suchbäume Kapitel 8.4: Balancierte Suchbäume • Operationen auf binären Suchbäumen mit Höhe h: • Suchen, Minimum, Maximum: O(h) • Einfügen, Löschen: O(h) • Effizienz direkt abhängig von Höhe • best case: O(log n) • worst case: O(n) • Problem: binären Suchbaum balanciert zu halten ist aufwendig: O(n) • Ausweg: Abschwächung der Kriterien •Definition balanciert:AVL-Baum AVL-Bäume • Binärbaum: B-Bäume, Rot-Schwarz-Bäume • AVL-Bäume: 1 Definition AVL-Baum 2 5 Ein binärer Suchbaum G = (V , E ) mit Wurzel w 2 V heißt AVL-Baum, falls er die AVL-Bedingung erfüllt: 3 2 • für jeden inneren Knoten v 2 V gilt: Höhe von linkem und 5 8 rechtem Teilbaum von v unterscheidet sich maximal um 1. 7 1 3 7 9 8 ausgeglichen entartet • benannt nachEinfügen, G.M. Adelson-Velskii Landis und • Anpassung von Löschen und mitE.M. Rotation 9 (russische Mathematiker) Doppelrotation • AVL-Bedingung nur für Wurzel w ist nicht ausreichend • beide Teilbäume der Wurzel können entartet sein • Ausweg: balancierte Suchbäume 25 26 7 Kapitel 8.5: Suchen mit Hashtabellen Kapitel 8.6: Suchen in Zeichenketten • Motivation: Such-Algorithmen für Wörterbücher mit Komplexität O(1) • Problem: suche Muster (Länge m) in Text (Länge n) • Operationen: search, insert, erase • Adresstabellen: Laufzeit O(1), aber gigantischer • Brute-Force Algorithmus: teste an jeder Textstelle O(nm) Speicherverbrauch! • Hashtabellen: reduziere Speicherverbrauch über Hashfunktion, behalte Laufzeit O(1) • Knuth-Morris-Pratt Algorithmus: O(n + m) • Shift-Tabelle: Länge des eigentlichen Randes des Präfixes von Muster • modifizierter Brute-Force-Algorithmus: • Kollisionsauflösung durch Verkettung, offene Adressierung • Hashfunktionen mittels Divisionsmethode, • 0 in Shift-Tabelle: direkt weitersuchen ohne zurückspringen • > 0 in Shift-Tabelle: mitten in Muster weitersuchen Multiplikationsmethode, universelles Hashing Schlüsselmenge U 4 1 text: 6 3 8 9 2 pat: 7 5 shift h h h h h Kollision! Hashtabelle T 2 3 5 7 27 28 1/_ 2/7 B F Kapitel 9: Graph-Algorithmen 1/8 2/7 B F F Kapitel 9.1: Tiefensuche4/5 4/5 3/6 x y z v w 1/8 2/7 9.1 Tiefensuche C 4/5 u 3/6 z x y z v w u v w 10/ _ w 2/7 9/_ C B 4/5 3/6 x y z 9/ • 2/7 9/_ 1/8 oder 2/7 Implementation rekursiv mit Stack 12 C C • Anwendungen: B F • berechnet Spannwald von Graph, markiert Rückkanten, 10/ 10/ 3/6 4/5 Cross-Kanten 3/6 Vorwärtskanten und 11 11 1/8 B F 4/5 F y z v 1/8 C B 3/6 y u 9/_ 9/_ B x w 2/7 F 3/6 x 9.4 Minimale Spannbäume z v 1/8 2/7 4/5 y u 9/_ B F 9.3 Kürzeste Pfade 3/6 x • Tiefensuche / DFS: O(|V | + |E |) u 9.2 Breitensuche 1/8 4/5 x y z B x y z B • Test aus Zusammenhang Definition Kürzester Pfad G =auf (V , Zyklenfreiheit E ) Graph mit Gewichtsfunktion • Sei Test • Segmentierung von binären mit Nachbarschafts-Graph w : E !Bildern R. BFS: Beispiel-Ablauf 2 29 30 • das Gewicht eines Pfades p = (v1 , . . . , vk ), vi 2 V , i = 1, . . . , k, ist die Summe der Gewichte aller seiner Kanten Kapitel 9.2: Breitensuche r s ∞ t 0 u ∞ r ∞ 1 Q: ∞ ∞ ∞ • Breitensuche / BFS:v O(|Vw | + |Ex|) r s 1 t 0 s t 0 ∞ Q: ∞ 1 ∞ y v w x u r s t 1 ∞ Q: Kapitel 9.3: Kürzeste Pfade ∞ s ∞ 2 w (p) = u r t 0 w r (u, v 2 V ) ist Summeund derv Gewichte y Beispiel: Ablauf Dijkstra-Algorithmus 1 ( u ∞ x 1 2 2 1 2 t x w x y v w x y r s t u r s t u 0 2 5 6 1 2 w x 2 3 5 Knoten 3 u y Q: ∞ 2 (x, 5) (u, 10) (v, ∞) 1 v u ∞ (y, ∞) s 5 6 s 5 x (u, 8) (v, ∞) 2 3 0 267 5 (y, 7) v 13 10 2 3 0 1 8 10 Q: 32 • entscheidendes Hilfsmittel: Priority Queue 8 31 5 6 y x y aus Menge aktueller • erweitere Pfad um kürzeste Kante heraus (s,0) (u, ∞) (v, ∞) (x, ∞) (y, ∞) v u y Q: s ∞ 2 x Q: min{w (p) : p Pfad von u nach v } Pfad existiert u v 1 1 sonst 10 ∞ 0 • Dijkstra Algoritmus: Greedy-Algorithmus, O(|E | log |V |) 7 7 5 • Voraussetzung: Kanten haben positives Gewicht 5 3 ∞ 2 3 ∞ 1 0 2 3 1 • Implementation mit Queue Q: x v u • Anwendungen: 2 1 2 ∞ 2 • Besuch von Knoten in Zusammenhangskomponente v w x y v • Berechnung Länge der kürzesten Pfade (d.h. Anzahl von Kanten) • Segmentierung von binären Bildern mit Nachbarschafts-Graph wmin (u, v ) = 10 v ∞ v v 10 sQ: ∞ 1 ∞ 0 ∞ w (vi , vi+1 ) i=1 • das Pfad Gewichtindes kürzesten PfadesGraph: zwischenPfad zwei Knoten u • Kürzester gewichtetem mit minimaler ∞ u 2 k 1 X 7 5 2 7 5 y x Q: 5 6 2 7 y (u, 8) (v, 13) 32 44 10/ _ B Kapitel 9.4: Minimale Spannbäume Kapitel 10: Numerische Algorithmen • Spannbaum: Teilgraph, der Baum ist und alle Knoten enthält • minimaler Spannbaum: Spannbaum mit minimalem Gewicht • Prim Algorithmus: Greedy-Algorithmus, O(|E | log |V |) • erweitere aktuelle Lösung um Kante mit minimalen Gewicht heraus aus Menge aktueller Knoten • entscheidendes Hilfsmittel: Priority Beispiel-Ablauf: PrimQueue Algorithmus 4 1 3 6 4 Kapitel 10.1: Matrizen 5 • Berechne: 3 3 3 6 6 5 6 17 • Lineare Gleichung: aT x = b q2 = (a21 + a22 ) · b11 • Lineares Gleichungssystem: Ax = b • Anzahl Lösungen: keine, eine oder unendlich viele b22 ) • Matrix-Operationen: q4 Addition, = a22 · (b21 Skalar-Multiplikation, b11 ) Matrix-Multiplikation q5 = (a11 + a12 ) · b22 • Lösen von linearen Systemen: • mit Inverser A−1 (numerisch nicht stabil) q6 = (a21 a11 ) · (b11 + b12 ) • Matrix-Multiplikation: • regulär: O(n3 ) q7 = (a12 a22 ) · (b21 + b22 ) • Strassen (Divide and Conquer): O(n2.807 ) • Dann ist: A·B = ✓ q1 + q4 q5 + q7 q3 + q5 q2 + q4 q1 + q3 q 2 + q 6 Kapitel 10.2: Lineare Gleichungen 6 q1 = (a11 + a22 ) · (b11 + b22 ) q3 = a11 · (b12 4 1 3 2 34 2 5 • Matrix als Element von Vektorraum, lineare Abbildung, Anordnung von Zahlen 4 2 6 2 33 1 4 1 6 6 5 3 6 Strassen-Algorithmus 3 2 4 1 2 5 10.5 Fast Fourier Transform 5 3 6 2 3 3 10.4 Least Squares Probleme 2 2 6 1 4 1 4 1 2 5 10.3 Die LUP-Zerlegung 2 5 3 6 10.2 Lineare Gleichungen 2 2 3 10.1 Matrizen • mit Gauss-Elimination (numerisch nicht stabil) • mit Zerlegung und Vorwärts-/Rückwärts-Substitution ◆ (stabil mit geeigneter Zerlegung) • mit iterativen Verfahren • Komplexität: ⇥(nlg 7 ) = ⇥(n2.807 ) 41 35 36 Kapitel 10.2: Lineare Gleichungen Kapitel 10.3: Die LUP-Zerlegung • Matrix-Zerlegungen: • Cholesky-Zerlegung für symm. pos. def. Matrizen 3 ( n3 • LU und LUP-Zerlegung • Permutationsmatrizen und Darstellung • Berechnung der LU- und LUP-Zerlegung: • rekursive Berechnung von Gauss-Eliminations-Schritten (Faktorisierung mittels Schur-Komplement) FLOPs) 3 • QR-Zerlegung für invertierbare Matrizen ( 2n3 FLOPs) 3 • LUP-Zerlegung für invertierbare Matrizen ( 2n3 FLOPs) • SVD-Zerlegung für beliebige Matrizen (2mn2 + 2n3 FLOPs) • partielles Pivoting zur Vermeiden von Division durch 0 und besserer Stabilität 37 Kapitel 10.4: Least squares Probleme 38 Kapitel 10.5: Fast Fourier Transform • minimiere Approximationsfehler ηj = F (xj ) − yj Least-squares Lösung P für Datenpunkte (xj , yj ) und Funktion F (x) = i ci fi (x) • Polynome in Koeffizientendarstellung: Least-squares Lösung Sei A 2 Rm⇥n , y 2 Rm mit m Minimierungs-Problems min kAc c yk A(x) = n. Eine Lösung c 2 Rn des or min kAc c aj x j j=0 y k2 • Operationen: • Auswertung: O(n) mit Horner-Schema heißt Least-squares Lösung. • Addition: O(n) • Normalengleichung: Anwendungs-Beispiele: • Multiplikation: O(n2 ) • Tracking von Objekten T mit Kameras T A Ac = A y • n−1 X • Faltung zweier Vektoren entspricht Polynom-Multiplikation • Kalibrierung von Kameras, Robotern, etc. • Iterative Rekonstruktion für Tomographie Pseudoinverse A+ = (AT A)−1 AT und Berechnung via QR/SVD Zerlegung 31 39 40 Kapitel 10.5: Fast Fourier Transform Kapitel 10.5: Fast Fourier Transform • Effiziente Faltung / Polynom-Multiplikation: • Polynome in Stützstellendarstellung: Koeffizientendarstellung A, B (x0 , y0 ), (x1 , y1 ), . . . , (xn−1 , yn−1 ) Multiplikation Zeit: Θ(n2) Koeffizientendarstellung C = AB Auswertung Zeit: Θ(n log n) • Operationen: • Addition: O(n) Stützstellendarstellung A, B • Multiplikation: O(n) • Konversion zwischen Darstellungen: • Koeffizienten → Stützstellen: Auswertung mit FFT O(n log n) Interpolation Zeit: Θ(n log n) Multiplikation Zeit: Θ(n) Stützstellendarstellung C = AB • Diskrete Fourier Transformation: Polynom-Auswertung an n-ten komplexen Einheitswurzeln, O(n2 ) • Stützstellen → Koeffizienten: Interpolation mit IFFT • Fast Fourier Transformation: DFT mit Divide and Conquer O(n log n) und Halbierungslemma, O(n log n) • Implementierung z.B. entrekursiviert mit Butterfly-Schema 41 Ausblick: Kapitel 11 und 12 42 Anwendungs-Szenarien in der Tomographie Nicht Klausur-relevant! 11 Datenkompression 11.1 11.2 11.3 11.4 11.5 12 Nicht Klausur-relevant! Einführung Grundlagen der Informationstheorie Huffman Codes LZ77 und LZ78 JPEG Kryptographie separate Präsentation 12.1 Einführung 12.2 Symmetrische Verschlüsselung 12.3 RSA 43 44