By definition an algorithm is an explicit, precise, unambiguous, mechanically-executable sequence of elementary instructions, usually intended to accomplish a specific purpose. Thus algorithms present the most fundamental way of how human thinking can be translated to machines. The description, design and analysis of algorithms form the basis of computer science and thus cannot be overlooked in any curriculum on engineering or numerical sciences.

In this module we learn the basic concepts of algorithm theory through simple problems and algorithmic solutions presented to them. These algorithmic solutions either serve as examples for techniques (e.g. recursion, dynamic programming) or as build up to the most common data structures (e.g. linked lists, binary trees). In these discussions we always raise the following questions,

What: A precise specification of the problem that the algorithm solves.

How: A precise description of the algorithm itself.

Why: A proof that the algorithm solves the problem it is supposed to solve.

How fast: An analysis of the running time of the algorithm.

focusing on the most interesting aspects.