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 Doubly-linked lists
2 2 Algorithms for basic data structures MK
3 1 Trees (Binary trees) JH Red-Black Trees
3 2 More Trees (B+ Trees) JH
4 1 Graphs (Representation and Traversal) PK Graph algorithms
5 1 Graph algorithms (Topological sorting, Centrality) PK
5 1 Sorting JH Searching
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



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


[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.