This course will introduce students to techniques for solving complex programming tasks arising in modern IT systems. The focus in the course is on algorithm design and analysis.
This course is the final course for the Algorithms specialisation. It gets students as close as possible to research in the field.
The course covers, among other topics, algorithms for numerical problems, algorithms for big data, optimization algorithms, randomized algorithms, lower bounds for computational problems, exponential-time and fixed-parameter tractable algorithms, and frameworks for parallel/distributed computation.
As this is the final course for the Algorithms specialisation, prior knowledge of the design and analysis of data structures and algorithms (divide and conquer, greedy algorithms, dynamic programming, and basic graph algorithms) is required. This is obtained by successful completion of the preceding Master course on Algorithm Design.
The course also requires familiarity with linear algebra and some experience with probability theory. This is obtained by successful completion of Linear Algebra and Probability.
Intended learning outcomes
After the course, the student should be able to:
- Design and analyze algorithms for basic numerical problems
- Use randomization in the design and analysis of efficient algorithms
- Efficiently solve optimization problems using approximation algorithms
- Solve problems on big data efficiently, also in frameworks for parallel and distributed computation
- Identify problems that are unlikely to admit efficient algorithms and argue for their difficulty via computational complexity theory
- Solve hard computational problems using efficient exponential-time algorithms
- Identify parameters in computational problems that enable efficient algorithms, design and analyze parameterized algorithms
Ordinary examExam type:
B: Oral exam, Internal (7-point scale)
B1I: Oral exam with time for preparation. In-house.