Principles for construction of algorithms: Divide and conquer, greedy algorithms, dynamic programming, local and exhaustive search. Algorithm analysis. Approximation algorithms and heuristics. Selected applications to sets, graphs, arithmetic, and geometry.
Data structures: Review of hash tables and heaps; balanced trees and Bloom filters. Use and implementation of data structures.
Computability and complexity: Reductions. Complexity classes P (polynomial time) and NP (non-deterministic polynomial time). NP-complete problems. Undecidable problems. Coping with untractable problems.
Terminology in Swedish and English.
On completion of the course, the students should be able to:
- develop and implement algorithms with data structures and analyze them with respect to correctness and efficiency,
- compare alternative algorithms and data structures with respect to efficiency and reliability,
- define and translate central concepts such as P, NP, NP-completeness and undecidability,
- compare problems with respect to complexity using reductions,
- explain how problems of high complexity can be handled
so that they will be able to
- independently construct computer programs that use time and memory efficiently,
- in professional life identify and attack problems that are unrealistically resource demanding or not possible to solve on a computer.