Competitive Programming
Content
During the semester, algorithms and data structures will be presented that are used in programming competitions due to their efficiency and comparatively short implementation time.
The focus of the course is on the practical implementation of the algorithms learned in order to solve programming tasks under the given conditions (time and memory constraints). Algorithms known from other lectures (e.g., Introduction to Computer Science, Algorithms and Data Structures, etc.) will be explored in greater depth, modified if necessary, combined, and applied (even in atypical situations). By the end of the course, students should have broad experience in the practical application of algorithms and their design for previously unknown problems.
The challenge in solving the problems often lies not in the implementation, but rather in finding a correct and sufficiently fast algorithm.
The following topics will be covered:
Data structures and simple algorithms (e.g., binary/ternary search, fast exponentiation)
Efficient tree structures (Fenwick trees, segment trees, quad trees)
Greedy algorithms
Simple graph algorithms (shortest paths, minimum spanning trees, topological sorting, strong connected components, articulation nodes/bridges, 2-SAT)
Network flows and applications (Edmonds-Karp & Push-Relable, min-cost/max-flow, bipartite matching, modeling problems as flows)
Dynamic programming (basic principles, classical methods, non-classical examples, more complex dynamic programming in multiple dimensions)
Exponential algorithms for NP-complete problems (TSP, longest path)
Mathematical problems (number theory: modulo arithmetic, prime numbers, Chinese remainder theorem; combinatorics: basic concepts, Catalan numbers)
Geometry (2D and 3D geometry: CCW test, points, line segments and polygons and their intersections, convex hulls; geometry without floating point numbers; geometry on spheres)
String processing (suffix arrays, Aho-Corasick)
Combination of multiple algorithms
Prerequisites
Good practical programming skills in C++, Java, Python, or Haskell
Elementary algorithms, as taught in the Algorithms and Data Structures lecture
Exam
The module grade is calculated based on the work completed during the semester (i.e., weekly assignments that are directly assessed). There is no separate exam at the end of the semester.
Details will be announced in the first lecture.
Lecturer
Jannik Olbrich
responsible for this lecture:
Prof. Dr. Enno Ohlebusch
contact:
- Institute for Theoretical Computer Science
James-Franck-Ring O27/ Raum 533
89081 UlmPhone: +49 (0)731 50 24222
E-Mail: jannik.olbrich(at)uni-ulm.de