Programmierwettbewerbe sind Wettkämpfe, bei denen Aufgaben mit Hilfe von Computerprogrammen gelöst werden müssen. Dabei werden 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 und Mathematik werden mit dem Spaß am Programmieren verbunden.
Programmierwettbewerbe gibt es in unterschiedlichen Ausführungen und mit verschiedenen Schwerpunkten. Dieses Praktikum wird sich 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 lösen Gruppen von je bis zu drei Studierenden an einem Rechner in fünf Stunden etwa zehn Probleme. 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 wöchentlich wechselnden Themen erklärt. In der darauf folgenden Woche bearbeiten die Teilnehmer Aufgaben zu diesem Thema. Lösungen, Hinweise und verschiedene Ideen zu den gestellten Aufgaben werden in der jeweils folgenden Vorlesung vorgestellt. Die Aufgaben haben unterschiedliche Schwierigkeitsgrade, beginnend bei direkten Implementierungen der vorgestellten Algorithmen bis hin zu schwierigeren Aufgaben ähnlich zu Aufgaben in verschiedenen Wettbewerben. Zur Einreichung und Bewertung der Aufgaben werden wir mit dem TUMjudge einen Fork des gleichen Systems verwenden, das auch bei vielen Runden des International Collegiate Programming Contest (ICPC) eingesetzt wird.
Ziele der Veranstaltung sind
- ein tiefes Verständnis für weitverbreitete, wichtige Algorithmen und Datenstrukturen,
- das Kennenlernen spezialisierter und aus aktueller Forschung stammender Algorithmen,
- eine Vertiefung der Fähigkeiten im Problemlösen und in der Problemanalyse,
- das Üben des selbstständigen Erkennens benötigter Algorithmen für gegebene Probleme,
- eine Verbesserung der Teamfähigkeit durch die Teilnahme an Teamwettbewerben,
- die Anwendung wichtiger Methoden der Mathematik sowie
- die Vorbereitung der Teilnehmer auf Programierwettbewerbe.