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()
## 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

Contents

Week Lecture Topic Homework
1 1 Course introduction, Recursion
1 1 Algorithm Analysis
2 1 Basic Data Structures (Lists, Stacks, Sets)
2 2 Algorithms for basic data structures
3 1 Trees (Binary trees)
3 2 More Trees (B+ Trees)
4 1 Graphs (Representation and Traversal)
4 1 Graph algorithms (Topological sorting, Routing)
5 1 Sorting
5 2 Searching
6 1 Hashing
6 2 Strings and string search
7 1 Dynamic programming (Memoization, Shortest paths)
7 2 Genetic algorithms

Assessment

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

Bibliography

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.