## 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:

• Understand, explain, and implement standard data structures.
• Understand, explain, and implement standard algorithms.
• Apply standard data structures and algorithms to solve programming tasks.
• Analyse and compare implementations with respect to their time and space complexity.
• Understand and explain advanced topics in algorithm design

## Course Organization

• 5 ECTS: This means that you need to devote at least 140 hours of study for this course.

• Lectures: The course consists of 14 2-hour lectures. You are not required, but you are strongly encouraged, to attend.

• Homework: In the homework assignments, you will have to write code or reply to open questions. Grading for coding questions is automatic on WebLab. All homework assignments are individual.

• Labs: 4 hours per week, designed to help you work together with other students and get support from teaching assistants.

• Teaching Assistants: Teaching assistants will be available during lab hours to help you with solving your assignments.

• Late submission: All submissions must be handed in time, with no exceptions. In case of provable sickness, please contact the course teacher to arrange a case-specific deadline.

## 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:

• Assignments (40%): Grade calculated as mean grade for all assignments. All individual assignments must have a passing grade.
• Computer Exam (60%)

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