Die Studenten lernen grundlegende Algorithmen und Datenstrukturen kennen. Sie sollen abschätzen, in welcher Situation spezifische und komplexe Datentypen eingesetzt werden, wie diese funktionieren und welchen Zeitaufwand sie besitzen. Sie können die Korrektheit von Algorithmen beweisen. In der Übung müssen Sie Ihre erlangten Kenntnisse anhand verschiedener Aufgaben anwenden. Sie erlernen theoretische Berechenbarkeitsmodelle und deren Grenzen.
Die Vorlesung gliedert sich in mehrere Teile, die inhaltlich aufeinander aufbauen:
Zusätzliche wöchentliche Übungsaufgaben für die Vor- und Nacharbeit der Vorlesungsinhalte und zur Prüfungsvorbereitung.
Einfache Aufgaben in der Vorlesung.
Die Studierenden vertiefen das in der Vorlesung erworbene Wissen, indem sie ausgewählte Algorithmen in Java implementieren und testen. Dazu verwenden sie jeweils Standard-Entwicklungsumgebungen.
Die zu implementierenden Algorithmen und Datenstrukturen werden in einer abschliessenden Aufgabe kulminiert eingesetzt.
Vorführen und Diskussioin der Lösungen in den Übungen.
Kern dieser Vorlesung ist die Vermittlung der Grenzen von heutigen Computern, die selbst bei unendlich viel vorhandenem Speicherplatz auftreten. Themen sind vor allem die Berechen- und Unentscheidbarkeit diverser Probleme. Ebenso wird eine Einführung in die Theorie hartnäckiger Probleme gegeben.
Die Lehrveranstaltung umfasst unter anderen die folgenden Gebiete der theoretischen Informatik: Elementare Berechnungsmodelle wie Turingmaschinen und WHILE-Programme, die Church-Turing-These, Unentscheidbarkeit, die Theorie der NP-Vollständigkeit und Zero-Knowledge-Beweise.
Für diese Lehrveranstaltung sind elementare Vorkenntnisse zur theoretischen Informatik notwendig (regulären Sprachen, endliche Automaten, O-Kalkül, usw.). Diese Kenntnisse können z.B. in der Vorlesung Theoretische Informatik I erworben werden.
Die Lehrveranstaltung findet als Vorlesung statt. Zahlreiche Übungsaufgaben vertiefen die vermittelten Gebiete und werden in evtl. zusätzlich angebotenen Tutorien diskutiert.