General description

Algorithms and data structures are fundamental notions in computer science. This course will teach you how to use data structures to represent data and algorithms to process them in efficient ways. The course uses the Python programming language.

def hello():
  print "Hello World"

## Hello World

The course examines the implementation of basic data structures, such as arrays, lists, stacks, sets, trees and graphs along with algorithms for efficiently creating, storing, searching and traversing them. It also touches upon more advanced topics such as genetic algorithms and dynamic programming.

Each week, the students will have to do an assessment, consisting mostly of coding exercises. For the assessment, we will use WebLab, an online assessment IDE.

Learning Objectives

This course enables the student to:

Course Organization


Week Lecture Topic Lecturer Homework
1 1 Course introduction, Recursion GG
1 1 Algorithm Analysis GG
2 1 Basic Data Structures (Lists, Stacks, Sets) MK
2 2 Algorithms for basic data structures MK
3 1 Trees (Binary trees) JH
3 2 More Trees (B+ Trees) JH
4 1 Graphs (Representation and Traversal) PK
5 1 Graph algorithms (Topological sorting, Centrality) PK
5 1 Sorting JH
5 2 Searching JH
6 1 Strings and string search GG
6 2 Genetic algorithms MS
7 1 Overall Q/A GG
7 2 No lecture

Lecturers * GG: Georgios Gousios * PV: Pavel Kucherbaev * JH: Joseph Hejderup * MK: Maria Kechagia * MS: Mozhan Soltani


In order to pass the course, you must obtain a passing grade (6+) to all the assessment criteria specified below:


If you would like to get an in-depth treatment of the subject, I recommend investing in the following books:

[1] T. H. Cormen, C. E. Leiserson, Ronald L. Rivest, and C. Stein, Introduction to algorithms (3rd ed.). MIT press, 2009.

[2] P. Louridas, Real world algorithms. MIT press, 2017.