Topic outline

  • This course will be held completely online. 
    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 2nd of September).
    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 analyse 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

    Lecturer
    Jara Uitto     http://jarauitto.com 

    Teaching assistants
    Sander Aarts
    Alexander Nikitin
    Jan Pisl
    Minoo Zarsav
    Marzieh Kakavand
    Negin Karimi

    Course material

    The material of the course is based in the A+ system: https://plus.cs.aalto.fi/CS-E3190/2020/

    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.