Department of Computer Science | Institute of Theoretical Computer Science

CADMO - Center for Algorithms, Discrete Mathematics and Optimization

Algorithmen und Datenstrukturen de | en

Herbstsemester 2016, ETH Zürich

Dozenten: Prof. Peter Widmayer
Prof. Markus Püschel
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. Für Fragen und Kommentare haben wir ein Moodle-Forum eingerichtet.

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
22.09.2016

Einführung. Algorithmenentwurf. Güte von Algorithmen.

  • Begriff des Algorithmus. Rolle der Algorithmik innerhalb der Informatik
  • Beispiel des Algorithmenentwurfs: Schnelle Multiplikation ganzer Zahlen, Karatsuba/Ofman 1962. Star ermitteln durch Fragen
  • Einheitskostenmodell. O-Notation, Omega, Theta

Folien:
Organisation
Überblick

Buch:
Kapitel 1.1
Kapitel 1.2.3 (Multiplikation ganzer Zahlen)

29.09.2016

Mathematische Grundlagen.

  • Rekurrenzen und Induktion
  • Summenformeln und Rechenregeln
  • Herleitung von Summenformeln
  • Binomialkoeffizienten

Buch:
Concrete Mathematics:
  • Abschnitt 1.1, S. 1-4
    (Rekurrenzen und Induktion),
  • Abschnitt 2.3, S. 30-34
    (Summenformeln und Rechenregeln),
  • Abschnitt 2.5, S. 41-46
    (Herleitung von Summenformeln),
  • Abschnitt 5.1, S. 153-156
    (Binomialkoeffizienten).


06.10.2016

Maximum Subarray Sum Problem.

  • Problemdefinition
  • Naiver Algorithmus, Präfixsummen vorberechnen, Divide-and-Conquer-Algorithmus, induktiver Algorithmus
  • Untere Schranken, Problemkomplexität

Buch:
Kapitel 1.3
13.10.2016

Suchen und Sortieren.

  • Suchen: Lineare, binäre, exponentielle, Interpolationssuche. Untere Schranke.
  • Elementare Sortierverfahren: Bubblesort, Sortieren durch Auswahl, Sortieren durch Einfügen.

Buch:
Kapitel 3.2 und 2.1
20.10.2016

Sortieren II.

  • Heapsort, Heaps
  • Mergesort.

Buch:
Kapitel 2.3 und 2.4
27.10.2016

Sortieren III.

  • Quicksort. Analyse der Schlüsselvergleiche und -bewegungen im besten, schlechtesten Fall. Randomisiertes Quicksort. Extraplatz: Linear, logarithmisch, konstant.
  • Untere Schranke für vergleichsbasierte Sortierverfahren.

Buch:
Kapitel 2.2 und 2.8
03.11.2016

Dynamische Programmierung I.

  • Fibonacci-Zahlen.
  • Längste aufsteigende Teilfolge, längste gemeinsame Teilfolge, Editierdistanz.
  • Matrixkettenmultiplikation, Matrixmultiplikation nach Strassen.

Buch:
Kapitel 1.2.3, 7.1 und 7.4
Cormen et al.: Kapitel 15
10.11.2016

Dynamische Programmierung II.

  • Subset Sum Problem.
  • Rucksackproblem, Greedy-Algorithmus, zwei Lösungen mit dynamischer Programmierung, FPTAS.

Buch:
Kapitel 7.2 und 7.3
17.11.2016

Datenstrukturen für Wörterbücher I: Hashing, selbstanordnende lineare Listen.

  • Elementare abstrakte Datentypen: Stack, Queue, Priority Queue.
  • Prinzip des Hashing, Hashfunktionen, universelles Hashing.
  • Kollisionsauflösung durch Verkettung, offene Hashverfahren, Sondieren.
  • Selbstanordnung in linearen Listen: Move-to-Front mit Analyse.
  • Amortisierte Analyse.

Buch:
Kapitel 1.5, 3.3, 4.1 bis 4.3.2, 4.3.4
24.11.2016

Datenstrukturen für Wörterbücher II: Suchbäume.

  • Natürlicher binärer Suchbaum: Suchen, Einfügen, Entfernen.
  • Durchlaufordnungen für Suchbäume.
  • AVL-Bäume: Konzept, Einfügen.

Buch:
Kapitel 5.1, 5.2.1
01.12.2016

Graphenalgorithmen I.

  • Graphentheoretische Konzepte.
  • Adjazenzmatrix.
  • Berechnung der reflexiven und transitiven Hülle.

Buch:
Kapitel 9 (Anfang), 9.2.1
08.12.2016

Graphenalgorithmen II.

  • Adjazenzliste.
  • Durchlaufen von Graphen: Tiefen- und Breitensuche.
  • Zusammenhangskomponenten.
  • Topologische Sortierung.

Buch:
Kapitel 9.1, 9.3, 9.4.1
13.12.2016

Graphenalgorithmen III: Kürzeste Wege.

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

Buch:
Kapitel 9.5
20.12.2016

Graphenalgorithmen IV: Minimale Spannbäume (Vorschau).

  • Minimaler spannender Baum: Grundlage, Greedy-Verfahren.
  • Algorithmus von Kruskal, Union-Find-Strukturen.
  • Algorithmus von Prim/Dijkstra.

Handgeschriebene Notizen:
Graphenalgorithmen IV

Buch:
Kapitel 6.2 und 9.6

Literatur zur Vorlesung

Das Skript zur Vorlesung (Stand: 15. Dezember 2017) können Sie unter diesem Link herunterladen.

Das Buch zur Vorlesung ist Algorithmen und Datenstrukturen, T. Ottmann und P. Widmayer, 5. Auflage, Spektrum Verlag, 2012. 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 Freitag von 13:00 bis 16:00 Uhr, beziehungsweise am Montag von 9:00 bis 12:00 Uhr statt.
Verantwortlich für die Organisation der Übungen ist Thomas Tschager, CAB H39.1.

Erster Übungstermin ist Freitag, der 23. September, beziehungsweise Montag, der 26. September.

Übungsblätter Lösungen
Übungsblatt 1
Exercise sheet 1
Beispiellösung Blatt 1
Example solution for sheet 1
Übungsblatt 2
Exercise sheet 2
Beispiellösung Blatt 2
Example solution for sheet 2
Übungsblatt 3
Exercise sheet 3
Beispiellösung Blatt 3
Example solution for sheet 3
Übungsblatt 4
Programmieraufgaben P4
Vorlage P4.1
Vorlage P4.2
Lösung P4.1 einschicken
Lösung P4.2 einschicken

Exercise sheet 4
Programming exercises P4
Beispiellösung Blatt 4
Beispiellösung Programmieraufgaben P4
Lösung mit linearer Laufzeit für Aufgabe P4.2
Lösung mit quadratischer Laufzeit für Aufgabe P4.2
Lösung mit kubischer Laufzeit für Aufgabe P4.2

Example solution for sheet 4
Example solution for programming exercises P4
Übungsblatt 5
Programmieraufgabe P5
Vorlage P5.1
Lösung P5.1 einschicken

Exercise sheet 5
Programming exercise P5
Beispiellösung Blatt 5
Beispiellösung Programmieraufgabe P5
Nicht-rekursive Lösung für Aufgabe P5.1
Rekursive Lösung für Aufgabe P5.1

Example solution for sheet 5
Example solution for programming exercise P5
Übungsblatt 6
Programmieraufgabe P6
Vorlage P6.1
Lösung P6.1 einschicken

Exercise sheet 6
Programming exercise P6
Beispiellösung Blatt 6
Beispiellösung Programmieraufgabe P6
Lösung für Aufgabe P6.1

Example solution for sheet 6
Example solution for programming exercise P6
Übungsblatt 7
Programmieraufgabe P7
Vorlage P7.1
Lösung P7.1 einschicken

Exercise sheet 7
Programming exercise P7
Beispiellösung Blatt 7
Beispiellösung Programmieraufgabe P7
Lösung für Aufgabe P7.1

Example solution for sheet 7
Example solution for programming exercise P7
Übungsblatt 8
Programmieraufgabe P8
Vorlage P8.1
Lösung P8.1 einschicken

Exercise sheet 8
Programming exercise P8
Beispiellösung Blatt 8
Beispiellösung Programmieraufgabe P8
Lösung für Aufgabe P8.1
Lösung für Aufgabe P8.1 mit quadratischer Laufzeit

Example solution for sheet 8
Example solution for programming exercise P8
Übungsblatt 9
Programmieraufgabe P9
Vorlage P9.1
Lösung P9.1 einschicken

Exercise sheet 9
Programming exercise P9
Beispiellösung Blatt 9
Beispiellösung Programmieraufgabe P9
Lösung für Aufgabe P9.1

Example solution for sheet 9
Example solution for programming exercise P9
Übungsblatt 10
Programmieraufgabe P10
Vorlage P10.1
Lösung P10.1 einschicken

Exercise sheet 10
Programming exercise P10
Beispiellösung Blatt 10
Beispiellösung Programmieraufgabe P10
Lösung für Aufgabe P10.1

Example solution for sheet 10
Example solution for programming exercise P10
Übungsblatt 11
Programmieraufgabe P11
Vorlage P11.1
Lösung P11.1 einschicken

Exercise sheet 11
Programming exercise P11
Beispiellösung Blatt 11
Beispiellösung Programmieraufgabe P11
Lösung für Aufgabe P11.1

Example solution for sheet 11
Example solution for programming exercise P11
Übungsblatt 12
Programmieraufgabe P12
Vorlage P12.1
Lösung P12.1 einschicken

Exercise sheet 12
Programming exercise P12
Beispiellösung Blatt 12
Beispiellösung Programmieraufgabe P12
Lösung für Aufgabe P12.1

Example solution for sheet 12
Example solution for programming exercise P12
Übungsblatt 13
Programmieraufgabe P13
Vorlage P13.1
Lösung P13.1 einschicken

Exercise sheet 13
Programming exercise P13

Beispielprüfung
Test exam
Beispiellösung Blatt 13
Beispiellösung Programmieraufgabe P13
Lösung für Aufgabe P13.1

Example solution for sheet 13
Example solution for programming exercise P13

Lösung Beispielprüfung
Probeprüfung Aufgabe 1
Trial Examination Task 1
Vorlage Aufgabe 1
Lösung einschicken

Probeprüfung Aufgabe 2
Trial Examination Task 2
Vorlage Aufgabe 2
Lösung einschicken
Beispiellösung
Code für Aufgabe 1
Langsamer Code für Aufgabe 2
Effizienterer Code für Aufgabe 2
Prüfung
Exam

Vorlage Aufgabe P1
Lösung einschicken

Vorlage Aufgabe P2
Lösung einschicken
Beispiellösung
Code für Aufgabe P1
Code für Aufgabe P2

Einschreibung in die Übungsstunden

Melden Sie sich bei Fragen zur Gruppeneinteilung bitte umgehend bei Thomas Tschager.

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 donnerstags nach der Vorlesung auf dieser Seite ein Übungsblatt veröffentlicht. Ab Woche 4 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 der Vorlesung um 10 Uhr im Eingangsbereich vor ML D28 ab.

In der ersten Übungsstunde werden Sie einer Gruppen 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 die Korrektur bis zur darauffolgenden Übungsstunde bewerten. Wir werden ausserdem Beispiellösungen für alle Übungsblätter vorbereiten und auf dieser Webseite veröffentlichen.

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 das gemeinsame Lösen und Abgeben des Übungsblattes sowie 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. Dabei werden die zwei schlechtesten Resultate in jeder Kategorie (Lösen, Korrigieren, Programmmieren) nicht berücksichtigt. 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%).

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. Bitte beachten Sie:

Jeden Dienstag findet um 17:00 Uhr in der TI Bibliothek (CAB G 15.2) eine Fragestunde zu den Programmieraufgaben statt. Dort versuchen wir Fragen zur Aufgabenstellung, der Implementierung in Java und zum Online-Judge zu beantworten.

Jederzeit können Sie Ihre Fragen auch im Forum stellen (wenn möglich in englischer Sprache).