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ünchenInhaltsverzeichnis
1 Organisation und Einführung
Organisation: Vorlesung
Organisation: Übung
Übersicht Vorlesung
Einführung: Begriffe
Einführung: Beispiele
1Grundlagen: 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
2Personen
• 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
3Informationen 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
4Ablauf: 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!
5Leistungsnachweis
• 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
6Inhaltsverzeichnis
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
8Was 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.
10Kontakt 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!
11Nicht 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
12Inhaltsverzeichnis
1 Organisation und Einführung
Organisation: Vorlesung
Organisation: Übung
Übersicht Vorlesung
Einführung: Begriffe
Einführung: Beispiele
13Zielgruppe
• Bachelor Informatik
• Bachelor Wirtschaftsinformatik
• Bachelor Bioinformatik
• Bachelor Informatik: Games Engineering
• Andere Studiengänge mit Neben-/Zweitfach Informatik
• Masterstudiengang Angewandte Informatik
• Aufbaustudium Informatik
• Schülerstudium
14Ziele 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
17Literatur
• 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
18Ergä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
19Inhaltsverzeichnis
1 Organisation und Einführung
Organisation: Vorlesung
Organisation: Übung
Übersicht Vorlesung
Einführung: Begriffe
Einführung: Beispiele
20Was 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)
21Was 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
22Was 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
23Was 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.
24Beispiel 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
25Beispiel 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!
26Abstrakter 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
27Softwareentwicklung
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
28Effizienz
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
29Inhaltsverzeichnis
1 Organisation und Einführung
Organisation: Vorlesung
Organisation: Übung
Übersicht Vorlesung
Einführung: Begriffe
Einführung: Beispiele
30Algorithmen-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)
31Weg aus dem Labyrinth
Problem: Es ist dunkel!
32Weg aus dem Labyrinth
1. Versuch: mit einer Hand immer an der Wand lang
33Weg aus dem Labyrinth
Problem: Inseln werden endlos umkreist
34Weg 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.
35Weg aus dem Labyrinth
Problem: Jetzt laufen wir im ersten Beispiel im Kreis
36Pledge-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;
37Weg aus dem Labyrinth
+1
+2
+3
+2
+1
+2 +4
0 +3
+1
1. Beispiel funktioniert
38Weg aus dem Labyrinth
+1
+2
0
+1
0
2. Beispiel funktioniert auch
39Kreis zeichnen
Wie kann ein Computer einen Kreis zeichnen?
40Kreis 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π
41Kreis 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!
42Kreis 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
43Kreis 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!
44Kreis 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)
45Kreis 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−−
46Kreis 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
47Kreis 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!
48Kreis 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
49Kreis 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 +kKreis 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);
51Bresenham-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.
52Sie können auch lesen