Topic outline

  • General

    Course enrollment is via A+. Please log in to A+ using your Aalto credentials (username and password) and enroll in CS-E3190 (enrollment starts on the 29th of August).
    All information and the materials related to the course can be found in A+.

    An algorithm is a finite sequence of elementary instructions for accomplishing a well-defined task. A single CPU core today can easily execute billions of elementary instructions per second, which makes efficient algorithms both immensely powerful tools in practice and a subject of considerable mathematical intrigue: Which well-defined tasks can be solved efficiently? What is the most efficient algorithm to accomplish a particular task?

    This course will advance your understanding in the basic principles and fundamental challenges in computing.  We analyze problems, where we can rigorously argue that a certain algorithm design is good (or bad). The focus is on proving mathematically that certain approaches do (or do not) work. Furthermore, we learn mathematical principles that form the basis for a large number of algorithm designs and their analysis, as well as in select cases turn these into concrete algorithm implementations and measure their performance.

    There are no formal pre-requisites for the course, but basic knowledge in discrete mathematics as well as basic programming skills are essential. The course is suitable for students at all levels (bachelor, master, and doctoral) who are interested in expanding their knowledge in algorithms.

    Course staff

    Jara Uitto 

    Teaching assistants
    Mélanie Cambus (head TA)
    Etna Lindy
    Shreyas Pai
    Hossein Vahidi
    Mihai Macarie (C++ assistance)

    Course material

    The material of the course is based in the A+ system:

    Learning objectives

    1. Modeling: The students are able to derive mathematically well-defined problems from a given real-life problem.
    2. Design: The students are able to design algorithms using basic algorithmic tools.
    3. Analysis: The students are able to rigorously analyse the correctness and runtime of an algorithm.
    4. Implementation: The students are able to implement fundamental algorithms. The main focus of the course is in the first 3 items of this list. However, in the ideal case, a beautiful algorithm design is complemented by a great implementation.