Design principles of algorithms: Divide and conquer, greedy algorithms, dynamic programming. Algorithm analysis. Probabilistic algorithms. Approximation algorithms. Selected applications in sets, graphs, arithmetic and geometry. Implementation of algorithms.
Computability and complexity: Reductions. The complexity classes P (polynomial time), NP (non-deterministic polynomial time), PSPACE (polynomial space) and BPP (probabilistic polynomial time with bounded error). NP completeness and NP hardness reductions. Undecidable problems.
After passing the course, the student should be able to
- develop and implement algorithms and reductions, and analyse them with respect to correctness and efficiency
- compare alternative algorithms considering efficiency
- define and explain central concepts such as P, NP, NP-completeness and undecidability
- compare problems with respect to complexity by means of reductions
in order to
- independently be able to design computer programs that use time and memory efficiently and thereby can contribute to economically and environmentally sustainable development
- in professional life identify problems that are unrealistically resource demanding or not possible to solve on a computer.