*This module is taught in English. This module is regularly offered every winter term.*

*This module was previously offered in the winter terms 2020/2021, 2021/2022, 2022/2023 and 2023/24.*

*Link to official module page*

#### Description

This module provides an introduction to mathematical modeling of computational problems. It covers the common algorithms, algorithmic paradigms, and data structures used to solve these problems. The module emphasizes the relationship between algorithms and programming, and introduces basic performance measures and analysis techniques for these problems.

#### Recommended prerequisites

We expect attendees to be proficient in the material from the following modules:

- Discrete Algebraic Structures
- Mathematics I
- Mathematics II

We further recommend basic knowledge of the following topics:

- Probability theory (probability spaces, expected value)
- Programming in Python, C++, C# or Java

#### Learning goals

In this module you will learn

- to measure and compare the efficiency of algorithms,
- to implement fundamental algorithms and data structures in Python,
- to design your own algorithms and data structures,
- and to prove their correctness and efficiency.

#### Setup

- Weekly lectures (in presence) and weekly tutorial session (in presence).
- Each week an assignment is handed out, which should be solved individually outside the classroom and then be submitted for grading. The assignment and its solutions are then discussed in the subsequent tutorial session. If sufficiently many points are awarded in the grading process (cumulative over all assignments of the term), then a bonus is given for the final exam at the end of the term.
- Final exam (written) for 90 minutes at the end of the term, whose outcome (together with a potential bonus from the assignment) determines the final grade for the module.

Overall module load: 6 ECTS credit points

#### Provided materials

- Lecture slides

- Lecture recordings

- Assignment sheets

- Python code bases

#### Recommended literature

- T. H. Cormen, C. E. Leiserson, R. Rivest and C. Stein: An Introduction to Algorithms. MIT Press, 3rd edition, 2009.
- T. H. Cormen, C. E. Leiserson, R. Rivest and C. Stein: Algorithmen — eine Einführung. Oldenbourg Wissenschaftsverlag, 3. Auflage, 2010.
- M. T. Goodrich and R. Tamassia: Data Structures and Algorithms in Java. Wiley, 5th edition, 2010.
- K. Mehlhorn and P. Sanders: Algorithms and Data Structures: The Basic Toolbox. Springer, 2008.