Grundlagen: Algorithmen und Datenstrukturen - Sommersemester 2018 Tobias Lasser

Die Seite wird erstellt Alena Döring
 
WEITER LESEN
Grundlagen: Algorithmen und Datenstrukturen - Sommersemester 2018 Tobias Lasser
Grundlagen: Algorithmen und Datenstrukturen
             Sommersemester 2018

                  Tobias Lasser

           Computer Aided Medical Procedures
            Technische Universität München
Grundlagen: Algorithmen und Datenstrukturen - Sommersemester 2018 Tobias Lasser
Inhaltsverzeichnis

1 Organisation und Einführung
    Organisation: Vorlesung
    Organisation: Übung
    Übersicht Vorlesung
    Einführung: Begriffe
    Einführung: Beispiele

                                 1
Grundlagen: Algorithmen und Datenstrukturen - Sommersemester 2018 Tobias Lasser
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
Grundlagen: Algorithmen und Datenstrukturen - Sommersemester 2018 Tobias Lasser
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