ICPC-Proseminar
Contents
Geschickt Programmieren für den ICPC-Wettbewerb (Proseminar)
- Term
- Summer 12
- Advisor
- Bernhard Gatzhammer, M.Sc
- Time and Place
- in Arbeit
- Audience
- Informatik (Bachelor), Mathematik (Bachelor), Wirtschaftsinformatik (Bachelor); Modul IN0013 [1]
- Semesterwochenstunden / ECTS Credits
- 4
- TUMonline
- {{{tumonline}}}
Hintergrund und Zielsetzung
Jedes Jahr veranstaltet die Association for Computing Machinery (ACM) [2] den International Collegiate Programming Contest (ICPC) [3]. In diesem Wettbewerb lösen Dreierteams an einem Computer Programmieraufgaben innerhalb einer vorgegebenen Zeitspanne.
Die meisten Aufgaben basieren auf Abwandlungen von Standardalgorithmen, wie man sie in den Einführungsvorlesungen zur Informatik kennenlernt. Um erfolgreich bei einem solchen Wettbewerb teilzunehmen ist es daher entscheidend, die wichtigsten Algorithmen zu kennen und zu verstehen, so dass man sie schnell an ein neues Problem anpassen kann.
Vor diesem Hintergrund formt sich das thematische Ziel des Seminars. Das Kennenlernen von Standardalgorithmen und deren Übertragung und Anpassung auf individuelle Problemstellungen. Dies geschieht zum einen durch Einzelvorträge und schriftlicher Ausarbeitungen und zum anderen durch Bearbeitung von Programmieraufgaben aus dem ICPC-Umfeld.
Die weiteren Ziele des Seminars liegen im Erlernen von typischen Soft-Skill-Fertigkeiten: der selbständigen Erarbeitung eines Themengebiets, dessen Zusammenfassung und Erläuterung in Form einer Ausarbeitung, sowie der Erstellung und Abhalten einer Präsentation.
Das Seminar richtet sich dabei nicht nur an Studenten/innen, die am ICPC-Wettbewerb teilnehmen wollen, sondern bietet für alle die Möglichkeit die eigenen Programmierfähigkeiten im Hinblick auf konkrete algorithmische Problemstellungen zu verbessern und Übung im Schreiben sowie Präsentieren zu bekommen.
Zeitplan
Das Seminar beginnt mit einem Vorbereitungstreffen zum Semesterbeginn. Nach einer kurzen Vorbereitungszeit gibt es dann wöchentlich (~2) Vorträge und Programmieraufgaben.
Anmeldung & Vorbesprechung
Die Anmeldung läuft über TUMonline: https://campus.tum.de/tumonline/lv.detail?cperson_nr=84589&clvnr=950041043.
Die Vorbesprechung findet am 6.2. von 09:45 - 10:15 im Raum 02.07.023 statt.
Anforderungen
Die folgenden Aufgaben müssen von den Teilnehmern erfüllt werden um das Seminar erfolgreich abzuschließen:
- Eine Ausarbeitung (5 Seiten, A4, 12pt) zum eigenen Thema schreiben.
- Eine Präsentation (ca. 25min) zum eigenen Thema erstellen und halten.
- Programmieraufgaben zu den gegebenen Themen erfolgreich lösen.
- Teilnahme an den (meisten) Präsentationstreffen.
Während die Lösung der Programmieraufgaben und die Teilnahme an den Treffen eine Grundvoraussetzung für das erfolgreiche Bestehen des Seminars sind, wird die Endnote aus den Noten der Ausarbeitung und der Präsentation gebildet. Ein erfolgreiches Bestehen des Seminars ist 4 ECTS Credits wert.
Vorkenntnisse
Die Aufgaben müssen in C, C++ oder Java gelöst werden. Deshalb müssen Teilnehmer mindestens eine der Sprachen beherrschen. Zur Verfügung stehen die C-Math-Library, die Standard Template Library für C++ bzw. die Java-Standard-Bibliothek. Deren Verwendung kann vorteilhaft sein, insbesondere in Hinblick auf erweiterte Datenstrukturen wie Priorityqueues und Hashmaps. Andere Bibliotheken können nicht verwendet werden.
Themen
Methoden zum Entwurf von Algorithmen
Suchen
Sortieren
Kürzeste Pfade (Dijkstra, Bellman-Ford, Floyd-Warshall; Heaps)
Flussnetzwerke (Ford-Fulkerson, Matching)
Lineare Programmierung (Simplexalgorithmus)
Numerische Verfahren (iterative Verfahren, Intervallschachtelung, Newton- Verfahren, Fehlerverhalten, Auslöschung)
Wahrscheinlichkeitsrechnung (Permutationen, Binomialkoeffizienten etc.)
Zahlentheorie (Primzahltests, Primfaktorzerlegung, Modulo, GGT)
Geometrie 1 (Schnitte von Geraden/Ebenen, Satz von Pick, Space-Trees)
Geometrie 2 (Konvexe Hüllen, Punkt-in-Polygon, Closest Pair)
NP-Vollständigkeit (Backtracking)
Dynamische Programmierung (Longest Increasing Subsequence, Scheduling, Levenshteindistanz)
Patternmatching
Zusatzmaterial
Tutorials, eine Anleitung zum Finden der User-ID und die Übersicht über gelöste Aufgaben findet sich auf der Kursseite (in Arbeit).
Programmieraufgaben von 2011
Die ersten Programmieraufgaben für dieses Semester sind:
Sortieren
- Train Swapping (Problem 299)
- Ultra-QuickSort (Problem 10810)
Kürzeste Pfade
- Lift Hopping (Problem 10801)
- Wormholes (Problem 558)
Flussnetzwerke
- My T-shirt suits me (Problem 11045)
- Angry Programmer (Problem 11506)
Wahrscheinlichkeitsrechnung
- Binomial Showdown (Problem 530)
- What is the Probability? (Problem 10056)
- Urn-ball Probabilities! (Problem 10169)
Zahlentheorie
- Cantor Fractions (Problem 880)
- Fibonaccimal Base (Problem 948)
- Minimum Sum LCM (Problem 10791)
Geometrie 1
- Video Surveillance (Problem 588)
- The Silver Bullet (Problem 11227)
Geometrie 2
- SCUD Busters (Problem 109)
NP-Vollständigkeit
- Don't Get Rooked (Problem 639)
- e-Coins (Problem 10306)
Dynamisches Programmieren
- Travelling Salesman (Problem 10702)