Algorithms and Complexity
In this course you will learn to develop and implement algorithms and analyze them with respect to correctness and efficiency; define the concepts P, NP, NP-completeness, undecidability, etc, to be able to identify and attack problems that are unrealistically resource demanding or not possible to solve, and to construct computer programs that use time and memory efficiently.
Course contents:
- Principles for construction of algorithms: Decomposition, greedy algorithms, dynamic programming, local and total search. Algorithm analysis. Approximation, algorithms and heuristics. Selected applications to sets, graphs, arithmetic, and geometry. Implementation of algorithms.
- Data structures: Repetition of hash tables and heaps; balanced trees and randomised data structures. Use and implementation of data structures.
- Computability and complexity: Reduction. Complexity classes P (polynomial time) and NP (non-deterministic polynomial time). NP-complete problems. Undecidable problems. Coping with untractable problems.
The course consists of three elements; theory, individual assignment and practical exercises.
Teaching Format
The education consists of lectures, exercises, and practical exercises.
Assessment
The course is assessed through written examination, written and oral presentation of the practical exercises, and a home assignment and oral presentation of the assignment.
Examiner
A list of examiners can be found on
Cormen, Leiserson, Rivest, and Stein: Introduction to algorithms.





