Department of Computer Science | Institute of Theoretical Computer Science

CADMO - Center for Algorithms, Discrete Mathematics and Optimization

Algorithmen und Datenstrukturen

Herbstsemester 2017, ETH Zürich

Dozenten: Prof. Peter Widmayer
Prof. Markus Püschel
Prof. David Steurer
Vorlesung: Donnerstag, 10:00 - 12:00 Uhr und 13:00 - 14:00 Uhr (jeweils in ML D28 und ML E12)

Weitere Informationen zur Vorlesung und verbindliche Informationen zur Prüfung finden Sie im Vorlesungsverzeichnis.

Wichtiger Hinweis für Studierende des Studiengangs "Computational Biology and Bioinformatics Master": Falls Ihr Studiensekretariat Ihnen den Kurs "Data Structures and Algorithms" zur Auflage gemacht hat, können Sie an diesem Kurs nicht teilnehmen. Stattdessen müssen Sie den Kurs zum Selbststudium, Nr. 252-0002-AAL, belegen. Weitere Informationen finden Sie im Vorlesungsverzeichnis.

Vorlesung

Die Inhaltsangaben zur Vorlesung, Angaben zu Literatur und Links werden auf dieser Seite laufend aktualisiert.

Hier finden Sie ausserdem eine Liste der Prüfungen der vergangenen Jahre.

Datum behandelte Themen Unterlagen
21.09.2017

Einführung. Algorithmenentwurf. Stabiles Heiraten.

  • Algorithmen in realen Anwendungen
  • Multiplicative Weights Method
  • Stabiles Heiraten: Konzept, Algorithmus von Gale und Shapley

Folien:
Algorithmen in realen Anwendungen
Stabiles Heiraten
Stabiles Heiraten (Beispiel)

Links:
Multiplicative Weights Method
Video: Evolution and Computation (nicht prüfungsrelevant)
28.09.2017

Graphentheorie.

  • Graphentheoretische Konzepte.
  • Färbungen von Graphen
  • Induktion

Folien:
Graphentheorie

Handgeschriebene Notizen:
Graphentheorie

Optionale Referenzen (Skript):
1.4.2, 1.4.2, 1.4.3, 5.1.1, 5.1.2
05.10.2017

Graphenalgorithmen I.

  • Graphentheoretische Konzepte: Topologische Sortierung, Bäume
  • Berechnungsmodell
  • O-Notation
  • Repräsentation von Graphen: Adjazenzmatrix, Adjazenzliste

Folien:
Graphenalgorithmen I

Handgeschriebene Notizen:
Graphenalgorithmen I

Optionale Referenzen (Skript):
1.3.1, 1.3.2, 5.1.3
12.10.2017

Graphenalgorithmen II.

  • Stapel und Schlange
  • Tiefensuchen
  • Breitensuchen

Folien:
Graphenalgorithmen II

Handgeschriebene Notizen:
Graphenalgorithmen II

Optionale Referenzen (Skript):
5.2, 5.3
19.10.2017 Maximum Subarray Sum Problem.
  • Problemdefinition
  • Naiver Algorithmus, Präfixsummen vorberechnen, Divide-and-Conquer-Algorithmus, induktiver Algorithmus
  • Untere Schranken, Problemkomplexität
Einheitskostenmodell.
  • O-Notation, Omega, Theta
Handgeschriebene Notizen:
Maximum Subarray Sum Problem.

Optionale Referenzen (Skript):
Maximum Subarray Sum: 1.5
Einheitskostenmodell: 1.3
(Die Terminologie ist ein bisschen anders)
26.10.2017 Suchen und Sortieren I.
  • Suchen: Lineare Suche, Binäre Suche, und Untere Schranke.
  • Elementare Sortierverfahren: Bubblesort, Sortieren durch Auswahl
  • Heapsort, Heaps
Material (Skript):
von 2.1. bis 2.4

Handgeschriebene Notizen (nicht vollständig):
Suchen und Sortieren I.

Video:
Amazing Crabs Shell Exchange

2.11.2017 Suchen und Sortieren II.
  • Mergesort.
  • Quicksort.
  • Untere Schranken für vegleichsbasierte Sortierverfahren.
Material (Skript):
von 2.5. bis 2.7
(Randomisiertes Quicksort ist nicht relevant und wird im nächsten Semester gelehrt.)
9.11.2017 Suchen und Sortieren III.
  • Median.
Dynamische Programmierung I.
  • Längste aufsteigende Teilfolge.
  • Längste gemeinsame Teilfolge.
Material:

Buch (Median):
3.1

Skript (Dynamische Programmierung):
von 3.1 bis 3.3

16.11.2017 Dynamische Programmierung II.
  • Minimale Editierdistanz.
  • Matrixkettenmultiplikation.
  • Subset Sum Problem
Material (Skript):
von 3.4 bis 3.6

23.11.2017 Dynamische Programmierung III.
  • Rucksackproblem.
  • Rundreiseproblem.
Material (Skript):
3.7

Handgeschriebene Notizen:
Rundreiseproblem.

Link:
Dynamische Programmierung.

30.11.2017 Datenstrukturen I.
  • Stapel, Schlange, und Prioritätswartecshlange.
  • Natürliche Suchbäume.
  • AVL-Bäume.
Material (Skript):
4.1, 4.4, 4.5

Handgeschriebene Notizen:
Datenstrukturen I.

7.12.2017

Graphenalgorithmen III: Kürzeste Wege

  • Algorithmus von Dijkstra.
  • Algorithmus von Bellman-Ford.

Material (Skript):
5.5.1, 5.5.2, 5.5.3,

Handgeschriebene Notizen:
Kürzeste Wege

14.12.2017

Graphenalgorithmen IV:

  • Kürzeste Wege
    • Algorithmus von Floyd-Warshall.
    • Algorithmus von Johnson.
  • Minimale Spannbäume
    • Grundlage, Greedy-Verfahren.
    • Algorithmus von Kruskal.

Kürzeste Wege:
Skript: 5.5.4

Minimale Spannbäume:
Buch: 9.6


Handgeschriebene Notizen:
Graphenalgorithmen IV

21.12.2017

Graphenalgorithmen V: Minimale Spannbäume

  • Union-Find-Strukturen.
  • Algorithmus von Prim.
  • Algorithmus von Borůvka.

Buch:
Union-Find-Strukturen: 6.2
Minimale Spannbäume: 9.6

Handgeschriebene Notizen:
Graphenalgorithmen V

Literatur zur Vorlesung

Das Buch zur Vorlesung ist Algorithmen und Datenstrukturen, T. Ottmann und P. Widmayer, 6. Auflage, Spektrum Verlag, 2017. Dieses können Sie bei der Polybuchhandlung beziehen oder innerhalb des ETH-Netzes als PDF-Datei herunterladen.

Weitere Literatur

Übungen

Die Übungen finden jeweils am Montag von 9:00 bis 12:00 Uhr statt.
Verantwortlich für die Organisation der Übungen ist Chih-Hung Liu, CAB H33.1.

Erster Übungstermin ist Montag, der 25. September.

Übungsblätter Lösungen
Übungsblatt 0 Beispiellösung Blatt 0
Übungsblatt 1 Beispiellösung Blatt 1
Übungsblatt 2 Beispiellösung Blatt 2
Übungsblatt 3 Beispiellösung Blatt 3
Übungsblatt 4 Beispiellösung Blatt 4
Übungsblatt 5
Programmieraufgaben P5
(last updated: 17:00, 23.10.2017)
Vorlage P5
Beispiellösung Blatt 5
Beispiellösung Programmieraufgabe P5
Übungsblatt 6
Beispiellösung Blatt 6
Übungsblatt 7
Programmieraufgaben P7
Vorlage P7
Beispiellösung Blatt 7
Beispiellösung Programmieraufgabe P7
Übungsblatt 8
Beispiellösung Blatt 8
Übungsblatt 9
Programmieraufgaben P9
Vorlage P9
Beispiellösung Blatt 9
Beispiellösung Programmieraufgabe P9
Übungsblatt 10
Beispiellösung Blatt 10
Übungsblatt 11
Programmieraufgaben P11
Vorlage P11
Beispiellösung Blatt 11
Beispiellösung Programmieraufgabe P11
Übungsblatt 12
Beispiellösung Blatt 12
Übungsblatt 13
Bonus Programmieraufgaben P13
Bonus Vorlage P13
Beispiellösung Blatt 13
Beispiellösung Programmieraufgabe P13
Probeprüfung Aufgabe
Vorlage der Probeprüfung Aufgabe

Fragen und Kommentare

Sie können Ihre Fragen im Forum auf Moodle stellen. Wir werden Ihre Beiträge lesen und die Fragen direkt im Forum beantworten, sodass auch andere Studierende von den Antworten profitieren können.

Organisation und Ablauf der Übungen

Jede Woche wird montags nach der Übung auf dieser Seite ein Übungsblatt veröffentlicht. In einigen Wochen werden zusätzlich Programmieraufgaben veröffentlicht.

Die wöchentlichen Übungsblätter sollen jeweils in Gruppen (von zwei bis drei Personen) gelöst werden. Bitte geben Sie eine gemeinsame Lösung (für die Gruppe) in der darauffolgenden Woche vor dem Beginn Ihrer Übungsgruppe ab.

In der ersten Übungsstunde werden Sie einer Gruppe von zwei bis drei Personen zugeteilt. Die Gruppen werden im Laufe des Semesters mehrmals neu eingeteilt.

In der Übungsstunde werden die Aufgaben besprochen. Anschliessend wird die eingereichte Lösung einer Gruppe von einer anderen Gruppe bewertet und mit Kommentaren versehen am Ende der Übungsstunde beim Assistenten abgegeben. Der Assistent wird sowohl das Blatt als auch die Korrektur bis zur darauffolgenden Übungsstunde bewerten. Wir werden ausserdem Beispiellösungen für alle Übungsblätter vorbereiten und auf dieser Webseite veröffentlichen.

Programmieraufgaben

Lösen Sie die Programmieraufgaben alleine (nicht in Gruppen). Die Programmieraufgaben werden online im sogenannten Judge abgegeben. Bei jeder Programmieraufgabe gibt es einen mit "Lösung einschicken / Submit solution" bezeichneten Link, mit dem der entsprechende Bereich des Judges erreicht werden kann.

Bonuspunkte

Sowohl für das Lösen eines Übungsblattes als auch für die Korrektur während der Übungsstunde können Bonuspunkte erarbeitet werden. Voraussetzung für das Erlangen von Bonuspunkten sind die Teilnahme an der Übungsgruppe sowie das gemeinsame Lösen und Abgeben des Übungsblattes und die Korrektur eines abgegebenen Übungsblattes in der Übungsstunde. In der zweiten Semesterhälfte können Sie weitere Bonuspunkte für das Lösen der Programmieraufgaben erlangen.

Am Ende des Semesters wird aus den Bonuspunkten eine Note für die Übungen berechnet. Die Note für die Übungen fliesst in die Endnote ein, sofern deren Berücksichtigung vorteilhaft ist. Die Endnote ist das Maximum aus der Note der Sessionsprüfung und dem gewichteten Mittel der Note für die Übungen (30%) und der Note der Sessionsprüfung (70%).