Grundlagen: Algorithmen und Datenstrukturen - Sommersemester 2018 Tobias Lasser
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Grundlagen: Algorithmen und Datenstrukturen Sommersemester 2018 Tobias Lasser Computer Aided Medical Procedures Technische Universität München
Inhaltsverzeichnis 1 Organisation und Einführung Organisation: Vorlesung Organisation: Übung Übersicht Vorlesung Einführung: Begriffe Einführung: Beispiele 1
Grundlagen: Algorithmen und Datenstrukturen (GAD) • IN0007, 3+2 SWS, 6 ECTS • Voraussetzungen: • IN0001 – Einführung in die Informatik 1 • IN0015 – Diskrete Strukturen Termine • Dienstag, 14:15 – 15:45 • Hörsaal MW 0001 • Video-Übertragung in Interims HS 2 • Mittwoch, 13:20 – 14:05 • Hörsaal MW 0001 • Video-Übertragung in Interims HS 1 2
Personen • Vorlesung: PD Dr. Tobias Lasser • Akademischer Rat am Lehrstuhl I16, Computer Aided Medical Procedures • Übungsleitung: • Christoph Baur • Hendrik Burwinkel • Rüdiger Göbl • Johanna Wald • wissenschaftliche Mitarbeiter am Lehrstuhl I16 3
Informationen online Vorlesungs-Webseite http://campar.in.tum.de/Chair/TeachingSs18GAD • Administratives, Informationen, Literatur Moodle-Kurs https://www.moodle.tum.de/course/view.php?id=40888 • aktuelle Nachrichten, Diskussionsforum • Vorlesungsaufzeichnungen, Vorlesungs-Folien • Übungsblätter und Hausaufgaben-Abgabe 4
Ablauf: Vorlesung • Folienvortrag • mit gelegentlichen Annotationen • kein Skript! • Folien als PDF zum Download in Moodle • https://www.moodle.tum.de/course/view.php?id=40888 • gelegentlich Live-Umfragen • via https://tum.onlineted.de • Eigene Notizen sind hilfreich! 5
Leistungsnachweis • Klausur am 25. Juli 2018 • schriftliche Prüfung • Dauer: 150 Minuten • erlaubtes Hilfsmittel: hand-beschriebenes DIN A4 Blatt • Wiederholungs-Klausur (voraussichtlich) am 6. Oktober 2018 • Vorbereitung durch aktive Teilnahme an Vorlesung und Übungsbetrieb • Notenbonus von 0,3 auf bestandene Klausur möglich durch Hausaufgaben 6
Inhaltsverzeichnis 1 Organisation und Einführung Organisation: Vorlesung Organisation: Übung Übersicht Vorlesung Einführung: Begriffe Einführung: Beispiele 7
Übung • jede Woche 2 SWS Übungen • 55 Gruppen (geplant) • jeweils 20-30 Teilnehmer • Beginn des Übungsbetriebs: Woche vom 16. April • Ablauf: • jede Woche ein Übungsblatt (üblicherweise Mittwochs) • Besprechung in den Übungsgruppen (in der Woche darauf) • Abgabe der Hausaufgaben (in der Woche darauf) • Korrektur und Bewertung der Hausaufgaben durch die Tutoren • Notenbonus (0,3) auf erfolgreich bestandene Klausur / Wiederholungsklausur bei Erreichen von 2/3 der Gesamtpunktzahl bei den Hausaufgaben 8
Was ist zu tun? • Anmeldung zur Vorlesung über TUMonline: https://campus.tum.de/ • Anmeldung zu den Übungsgruppen: • ab sofort bis Mittwoch, 11.04.2018, 15:00 über Matchingsystem: https://matching.in.tum.de/b/gehf9rr-ubungen-gad-ss18 • Ergebnisse ab 12.04.2018, automatische Übernahme in TUMonline • An- und Ummeldungen danach über TUMonline möglich • Einschreibung in Moodle-Kurs nur über Anmeldung zu den Übungsgruppen! • nur so erhalten Sie Zugriff auf Aufzeichnungen, Materialien und Hausaufgaben-Abgabe! 9
Übungsaufgaben • jedes Übungsblatt enthält Hausaufgaben (H) • theoretische Aufgaben und Programmieraufgaben • Bearbeitung der Übungen ist freiwillig, aber empfehlenswert! • für jedes Übungsblatt gibt es Punkte auf die Hausaufgaben • für 2/3 der Gesamtpunktzahl gibt es den Notenbonus (0,3) auf die erfolgreich bestandene Klausur (oder Wiederholungsklausur). • Die Hausaufgaben sind selbstständig anzufertigen! Nach Plagiaten wird automatisiert und manuell gesucht. 10
Kontakt und Feedback • Erste Anlaufstelle • der/die Tutor(in) Ihrer Übungsgruppe • Diskussionsforum • https://www.moodle.tum.de/mod/forum/view.php?id=720683 • Email • gad@mailnavab.in.tum.de • Sprechstunde • nach Vereinbarung Feedback Feedback zur Vorlesung und Übung ist jederzeit willkommen! 11
Nicht vergessen! • Anmeldung zu den Übungsgruppen: • ab sofort bis Mittwoch, 11.04.2018, 15:00 über Matchingsystem: https://matching.in.tum.de/b/gehf9rr-ubungen-gad-ss18 12
Inhaltsverzeichnis 1 Organisation und Einführung Organisation: Vorlesung Organisation: Übung Übersicht Vorlesung Einführung: Begriffe Einführung: Beispiele 13
Zielgruppe • Bachelor Informatik • Bachelor Wirtschaftsinformatik • Bachelor Bioinformatik • Bachelor Informatik: Games Engineering • Andere Studiengänge mit Neben-/Zweitfach Informatik • Masterstudiengang Angewandte Informatik • Aufbaustudium Informatik • Schülerstudium 14
Ziele der Vorlesung Wissen: • Algorithmische Prinzipien verstehen und anwenden • Grundlegende Algorithmen kennen lernen und anwenden • Grundlegende Datenstrukturen kennen lernen und anwenden • Bewertung von Komplexität lernen Methodenkompetenz: • für Entwurf und Anwendung von effizienten Algorithmen • zur Analyse von Algorithmen 15
Übersicht der Inhalte 1 Organisation und Einführung Begriffe und Beispiele 2 Komplexitätsanalyse Effizienzmaße, Landau-Symbole, Maschinenmodell 3 Datenstrukturen für Sequenzen Arrays, Listen, Stacks, Queues 4 Hashing Verkettung, universelles Hashing, Sondierverfahren, perfektes Hashing 5 Sortieren Einfache Verfahren, MergeSort, QuickSort, untere Schranke, Rang-Selektion, RadixSort, externes Sortieren 16
Übersicht der Inhalte 6 Priority Queues Binäre Heaps, Binomialheaps 7 Suchstrukturen Binäre Suchbäume, AVL-Bäume, (a,b)-Bäume 8 Graphen Repräsentation, Traversierung, Zusammenhang, kürzeste Wege, minimale Spannbäume 9 Pattern Matching Naive Suche, KMP Algorithmus 10 Datenkompression Huffman Codes, Lempel-Ziv Verfahren 17
Literatur • Inhalt der Vorlesung basiert auf dem Buch K. Mehlhorn, P. Sanders: (Springer, 2008) Algorithms and Data Structures – The Basic Toolbox http://people.mpi-inf.mpg.de/˜mehlhorn/Toolbox.html • Vorlagen für die Folien: GAD SS’08: Prof. Dr. Christian Scheideler GAD SS’09: Prof. Dr. Helmut Seidl GAD SS’14: Dr. Hanjo Täubig GAD SS’16: Prof. Dr. Helmut Seidl Skript Alg. Bioinf.: Prof. Dr. Volker Heun 18
Ergänzende Literatur • Cormen, Leiserson, Rivest, Stein: (Oldenbourg, 2010) Algorithmen — Eine Einführung • Goodrich, Tamassia: (John Wiley & Sons, 2003) Algorithm Design: Foundations, Analysis, and Internet Examples • Heun: (Vieweg+Teubner, 2003) Grundlegende Algorithmen – Einführung in den Entwurf und die Analyse effizienter Algorithmen • Kleinberg, Tardos: (Pearson Education, 2013) Algorithm Design • Schöning: (Spektrum, 2011) Algorithmik • Sedgewick: (Pearson Studium, 2003) Algorithmen in Java. Teil 1-4 19
Inhaltsverzeichnis 1 Organisation und Einführung Organisation: Vorlesung Organisation: Übung Übersicht Vorlesung Einführung: Begriffe Einführung: Beispiele 20
Was ist ein Algorithmus? Duden online: Rechenvorgang nach einem bestimmten (sich wiederholenden) ” Schema“ • benannt nach dem Mathematiker Al’Khwarizmi (ca. 780 – 850) aus Persien, tätig im Haus der Weisheit“ in Baghdad ” • Beispiele für Algorithmen bereits in der Antike, etwa der Euklidsche Algorithmus zur Berechnung des ggT: Wenn CD aber AB nicht misst, und man nimmt bei AB, CD ” abwechselnd immer das kleinere vom größeren weg, dann muss (schließlich) eine Zahl übrig bleiben, die die vorangehende misst.“ aus Euklid: Die Elemente, Buch VII (Clemens Thaer) 21
Was ist ein Algorithmus? H. Rogers: Theory of Recursive Functions and Effective Computability Ein Algorithmus ist eine ” • deterministische Handlungsvorschrift, • die auf eine bestimmte Klasse von Eingaben angewendet werden kann, • und für jede dieser Eingaben eine korrespondierende Ausgabe liefert.“ Im weiteren Verlauf des Buches wird mathematische Theorie zur Berechenbarkeit entwickelt −→ theoretische Informatik 22
Was ist ein Algorithmus? Mathematische Definition Algorithmus Eine Berechnungsvorschrift zur Lösung eines Problems heißt Algorithmus genau dann, wenn • eine zu dieser Berechnungsvorschrift äquivalente Turingmaschine exisitiert, • die für jede Eingabe, die eine Lösung besitzt, terminiert. Alan Turing (1936): Turingmaschine als mathematisches Modell eines Computers −→ theoretische Informatik 23
Was ist ein Algorithmus? M. Broy: Informatik: Eine grundlegende Einführung Ein Algorithmus ist ein Verfahren ” • mit einer präzisen (d.h. in einer genau festgelegten Sprache abgefassten), • endlichen Beschreibung, • unter Verwendung • effektiver (d.h. tatsächlich ausführbarer), • elementarer (Verarbeitungs-) Schritte.“ Diese Beschreibung ist für unsere Zwecke ausreichend. 24
Beispiel Algorithmus Euklidscher Algorithmus Input: natürliche Zahlen a, b Output: größter gemeinsamer Teiler von a, b 1 Setze m := a und n := b 2 Falls m < n vertausche m und n 3 Berechne r := m − n 4 Setze m := n und n := r 5 Falls r > 0, gehe zu Schritt 2 6 Der Output ist m 25
Beispiel Kochrezept Rührei Input: Eier, Salz, Pfeffer Output: Rührei 1 Butter in Pfanne zerlaufen lassen 2 Eier in Pfanne hauen 3 Prise Salz und Pfeffer hinzufügen und gut durchrühren 4 In Pfanne brutzeln lassen und umrühren bis die Eier durch sind −→ dies ist kein Algorithmus! 26
Abstrakter Datentyp und Datenstruktur Abstrakter Datentyp • legt fest, welche Operationen was tun (Semantik), • aber nicht wie (konkrete Implementierung) ⇒ Kapselung/Abstraktion durch Definition einer Schnittstelle Beispiel: PriorityQueue mit Operationen insert und deleteMin Datenstruktur: formalisiertes Objekt zur • Speicherung, • Verwaltung von bzw. • Zugriff auf Daten, die dabei geeignet angeordnet, kodiert und verknüpft werden. Beispiel: BinaryHeap als konkrete Implementierung von PriorityQueue 27
Softwareentwicklung Problem ⇓ Modellierung ⇓ Algorithmen und Datenstrukturen ⇓ Implementierung • Abstraktion vom genauen Problem (Vereinfachung) • geeignete Auswahl von Algorithmen / Datenstrukturen • Grundsätzliche Probleme: Korrektheit, Komplexität, Robustheit / Sicherheit, aber vor allem Effizienz 28
Effizienz im Sinne von • Laufzeit • Speicheraufwand • Festplattenzugriffe • Energieverbrauch Kritische Beispiele: • Riesige Datenmengen (Medizininformatik, Bioinformatik) • Echtzeitanwendungen (Medizinische Geräte, Spiele) Ziel der Vorlesung: • Grundstock an effizienten Algorithmen und Datenstrukturen für Standardprobleme • Methoden zur Analyse von Algorithmen 29
Inhaltsverzeichnis 1 Organisation und Einführung Organisation: Vorlesung Organisation: Übung Übersicht Vorlesung Einführung: Begriffe Einführung: Beispiele 30
Algorithmen-Beispiele • Rolf Klein und Tom Kamphans: Der Pledge-Algorithmus: Wie man im Dunkeln aus einem Labyrinth entkommt • Dominik Sibbing und Leif Kobbelt: Kreise zeichnen mit Turbo • Arno Eigenwillig und Kurt Mehlhorn: Multiplikation langer Zahlen (schneller als in der Schule) • Diese und weitere Beispiele: Taschenbuch der Algorithmen (Springer, 2008) 31
Weg aus dem Labyrinth Problem: Es ist dunkel! 32
Weg aus dem Labyrinth 1. Versuch: mit einer Hand immer an der Wand lang 33
Weg aus dem Labyrinth Problem: Inseln werden endlos umkreist 34
Weg aus dem Labyrinth 2. Versuch: gerade bis zur Wand, der Wand folgen bis man wieder in dieselbe Richtung läuft, dann wieder gerade bis zur Wand usw. 35
Weg aus dem Labyrinth Problem: Jetzt laufen wir im ersten Beispiel im Kreis 36
Pledge-Algorithmus Algorithmus Labyrinth: findet einen Ausgang Setze Umdrehungszähler auf 0; repeat repeat Gehe geradeaus; until Wand erreicht; Drehe nach rechts; Inkrementiere Umdrehungszähler; repeat Folge dem Hindernis mit einer Hand; dabei: je nach Drehrichtung Umdrehungszähler inkrementieren / dekrementieren; until Umdrehungszähler=0; until Ausgang erreicht; 37
Weg aus dem Labyrinth +1 +2 +3 +2 +1 +2 +4 0 +3 +1 1. Beispiel funktioniert 38
Weg aus dem Labyrinth +1 +2 0 +1 0 2. Beispiel funktioniert auch 39
Kreis zeichnen Wie kann ein Computer einen Kreis zeichnen? 40
Kreis zeichnen: mit Winkelfunktionen Naiver Ansatz: eine Runde wie mit dem Zirkel y=R sin(α) α x=R cos(α) −R R Verwendung von sin() und cos() für α = 0 . . . 2π 41
Kreis zeichnen: mit Winkelfunktionen Algorithmus Kreis1: zeichnet Kreis mit Radius R aus n Pixeln Eingabe : Radius R Pixelanzahl n for i = 0; i < n; i++ do plot(R ∗ cos(2π ∗ i/n), R ∗ sin(2π ∗ i/n)); Kreisumfang: u = 2π · R ⇒ Bei Pixelbreite von 1 Einheit reicht n = d2πRe. Problem: sin() und cos() sind teuer! 42
Kreis zeichnen: mit Wurzelfunktion √ Schnellerer Ansatz: x2 + y2 = R2 bzw. y = ± R2 − x2 y R x −R R −y 1 Pixel pro Spalte für oberen / unteren Halbkreis 43
Kreis zeichnen: mit Wurzelfunktion Algorithmus Kreis2: zeichnet Kreis mit Radius R Eingabe : Radius R for x = −R; x ≤ R; x++ do y = sqrt(R ∗ R − x ∗ x); plot(x, y); plot(x, -y); Problem: sqrt() ist auch noch relativ teuer! 44
Kreis zeichnen: mit Multiplikation Besserer Ansatz: Ausnutzung von Spiegelachsen (−x,y) (x,y) (−y,x) (y,x) −R R (−y,−x) (y,−x) (−x,−y) (x,−y) 45
Kreis zeichnen: mit Multiplikation • betrachtetes Kreissegment: Anstieg zwischen 0 und −1 • 2 Fälle für nächstes Pixel: nur rechts oder rechts unten • Entscheidungskriterium: Grundlinienmittelpunkt des rechten Nachbarpixels innerhalb vom Kreis? ja: x++ nein: x++; y−− 46
Kreis zeichnen: mit Multiplikation • Test, ob (x, y) innerhalb des Kreises: F(x, y) := x 2 + y 2 − R 2 < 0 • Mittelpunkt des ersten Quadrats: (x, y) = (0, R) • Position seines Grundlinienmittelpunkts: (0, R − 12 ) • Grundlinienmittelpunkt für Pixel rechts daneben: F(1, R − 12 ) = 12 + (R − 12 )2 − R 2 = 5 4 − R < 0? • Update: F(x + 1, y) = (x + 1)2 + y 2 − R 2 = (x 2 + 2x + 1) + y 2 − R 2 F(x + 1, y) = F(x, y) + 2x + 1 F(x + 1, y − 1) = (x + 1)2 + (y − 1)2 − R 2 = (x 2 + 2x + 1) + (y 2 − 2y + 1) − R 2 F(x + 1, y − 1) = F(x, y) + 2x − 2y + 2 47
Kreis zeichnen: mit Multiplikation Algorithmus Bresenham1: zeichnet Kreis mit Radius R x = 0; y = R; plot(0, R); plot(R, 0); plot(0, −R); plot(−R, 0); F = 54 − R; while x < y do if F < 0 then F = F + 2 ∗ x + 1; else F = F + 2 ∗ x − 2 ∗ y + 2; y = y − 1; x = x + 1; plot(x, y); plot(−x, y); plot(−y, x); plot(−y, −x); plot(y, x); plot(y, −x); plot(x, −y); plot(−x, −y); Es geht sogar noch etwas schneller! 48
Kreis zeichnen: mit Addition / Subtraktion • Ersetzung der Korrekturterme für F: F = F + 2x + 1 → F = F + dE F = F + 2x − 2y + 2 → F = F + dSE mit dE = 2x + 1 und dSE = 2x − 2y + 2 • Anfangswerte: dE (0, R) = 2 · 0 + 1 = 1 dSE (0, R) = 2 · 0 − 2 · R + 2 = 2 − 2 · R • Updates nach rechts (E) und nach unten rechts (SE): dE (x + 1, y) = 2 · (x + 1) + 1 = dE (x, y) + 2 dSE (x + 1, y) = 2 · (x + 1) − 2 · y + 2 = dSE (x, y) + 2 dE (x + 1, y − 1) = 2 · (x + 1) + 1 = dE (x, y) + 2 dSE (x + 1, y − 1) = 2 · (x + 1) − 2 · (y − 1) + 2 = dSE (x, y) + 4 49
Kreis zeichnen: mit Addition / Subtraktion • Der Bruch 54 kann durch 1 ersetzt werden, weil sich F immer um eine ganze Zahl ändert. • D.h. 5 F= −R +k
Kreis zeichnen: mit Addition / Subtraktion Algorithmus Bresenham2: zeichnet Kreis mit Radius R x = 0; y = R; plot(0, R); plot(R, 0); plot(0, −R); plot(−R, 0); F = 1 − R; dE = 1; dSE = 2 − R − R; while x < y do if F < 0 then F = F + dE ; dSE = dSE + 2; else F = F + dSE ; y = y − 1; dSE = dSE + 4; x = x + 1; dE = dE + 2; plot(x, y); plot(−x, y); plot(−y, x); plot(−y, −x); plot(y, x); plot(y, −x); plot(x, −y); plot(−x, −y); 51
Bresenham-Algorithmus • Seit Anfang der 1960er Jahre hat Jack Bresenham Algorithmen zur Linien- und Kreis-Darstellung entwickelt. • Diese verwenden nur einfache Additionen ganzer Zahlen. • Sie sind damit deutlich schneller als die naiven Ansätze. • Daher sind sie auch nach wie vor aktiv im Einsatz. 52
Sie können auch lesen