Programmierwettbewerbe sind Wettkämpfe, bei denen Aufgaben in einer festen Zeit mit Hilfe von Computerprogrammen gelöst werden müssen. Dabei wird die Verwendung verschiedener Algorithmen und Datenstrukturen sowie Fähigkeiten in Problemanalyse, Softwareentwicklung und Teamarbeit auf eine spielerische Art und Weise geübt. Wichtige Themen der theoretischen Informatik werden mit dem Spaß am Programmieren verbunden.
Im Praktikum werden wir verschiedene grundlegende Algorithmen und Datenstrukturen kennenlernen, die häufig in Programmierwettbewerben genutzt werden. Es haben sich inzwischen sehr viele Wettbewerbe mit verschiedenen Modi und Schwerpunkten entwickelt. Die Übungsaufgaben in diesem Praktikum werden sich dabei am International Collegiate Programming Contest (ICPC) orientieren, einem internationalen Programmierwettbewerb für Universitätsstudierende, der seit den 1970er Jahren von der Association for Computing Machinery (ACM) veranstaltet wird.
In diesem Wettbewerb müssen Gruppen von je drei Studierenden an einem Rechner in meist fünf Stunden etwa acht bis zehn Probleme lösen. Das Turnier wird dabei in mehreren lokalen Runden ausgetragen bis sich die besten Teams am Ende bei den World Finals messen. Die Fakultät für Informatik der TU München nimmt seit einigen Jahren mit mehreren Mannschaften am ICPC teil. Einen Eindruck der Aufgaben, die in ähnlicher Form im Praktikum bearbeitet werden, vermitteln ausgewählte Aufgaben aus dem German Collegiate Programming Contest (GCPC) 2012.
Im Rahmen einer wöchentlichen Praktikumsvorlesung werden benötigte Algorithmen und notwendige Grundlagen zu einem wöchentlich wechselnden Thema erklärt. In der darauf folgenden Woche werden die Teilnehmer Aufgaben zu diesem Thema bearbeiten. Lösungen, Hinweise und verschiedene Ideen zu den gestellten Aufgaben werden in der darauf folgenden Vorlesung vorgestellt. Die Aufgaben werden dabei verschiedene Schwierigkeitsgrade haben, beginnend bei direkten Implementierungen der vorgestellten Algorithmen bis hin zu schwierigeren Original-Aufgaben aus verschiedenen Wettbewerben. Zur Einreichung und Bewertung der Aufgaben werden wir das gleiche System verwenden, das auch bei fast allen Runden des ICPC eingesetzt wird.
Ziel der Veranstaltung ist ein tieferes Verständnis für weitverbreitete, wichtige Algorithmen und Datenstrukturen, das Kennenlernen spezialisierter Algorithmen sowie die Vorbereitung der Teilnehmer auf Programierwettbewerbe. Am Ende des Semesters besteht die Möglichkeit am GCPC teilzunehmen, der deutschen Regionalrunde des ICPC.