Studiegids

nl en

Algorithms and Data Structures

Vak
2024-2025

Admission requirements

We assume that participants have good programming skills in Python (please ensure to follow the preceding programming courses).

Description

The main goal is to (further) develop the skill of algorithmic thinking. The student is expected to be able to create novel algorithms (using appropriate data structures) to novel problem types and implement these in a programming language (Python).

This course addresses several data structures and algorithmic methods for problem-solving, including various well-known algorithms, such as the binary search algorithm. We demonstrate these methods based on illustrative examples. Based on these illustrative examples, the students are expected to be able to develop new algorithms to solve novel problem definitions of increasing complexity. Furthermore, the students are expected to be able to analyse these algorithms.

Some examples of algorithmic methods that this course covers: state-space/tree traversal algorithms, brute force, exhaustive search, divide and conquer, backtracking, dynamic programming, greedy algorithms, branch and bound, and sorting. We also cover the basics of computational complexity. Some examples of data structures that are being used during the course: sets, lists, graphs, binary trees, binary search trees, union-find, multi-dimensional arrays, vectors, matrices, stacks, queues, and combinations of these data structures.

There will be programming assignment(s) in Python, in which one of the aforementioned algorithmic methods should be implemented. Good knowledge of programming in Python, as obtained by the preceding programming courses is required to successfully participate in this course.

Course objectives

  • apply existing algorithms on novel problem types

  • understand the aforementioned algorithm design techniques

  • understand algorithmic state-spaces and their relation to data structures

  • apply the aforementioned algorithm design techniques to design (small) algorithms (making use of appropriate data structures) for novel problem types

  • implementation of algorithms (making use of appropriate data structures) using a programming language (i.e. Python)

  • analyse the state-spaces of a given algorithm

  • analyse computational complexity aspects (both time and space) of algorithms

Timetable

You will find the timetables for all courses and degree programmes of Leiden University in the tool MyTimetable (login). Any teaching activities that you have sucessfully registered for in MyStudyMap will automatically be displayed in MyTimeTable. Any timetables that you add manually, will be saved and automatically displayed the next time you sign in.

MyTimetable allows you to integrate your timetable with your calendar apps such as Outlook, Google Calendar, Apple Calendar and other calendar apps on your smartphone. Any timetable changes will be automatically synced with your calendar. If you wish, you can also receive an email notification of the change. You can turn notifications on in ‘Settings’ (after login).

For more information, watch the video or go the the 'help-page' in MyTimetable. Please note: Joint Degree students Leiden/Delft have to merge their two different timetables into one. This video explains how to do this.

Mode of instruction

During the semester, the students will be provided with material and video lectures, which they study before the lecture. There will be weekly meetings in which we discuss the material, as well as practical sessions (organized by the team of the teaching assistants). There will be practical assignments.

Group work is an integral part of the course. You will be expected to complete the assignments together with a team mate.

Assessment method

Digital exam(s), in which both questions are answered as well as small programmable questions need to be programmed (70% of the grade). The programming assignment(s) will count in total for 30% of the grade. Attendance in the practical sessions is mandatory and required to be able to pass the course. Each individual component needs to have a passing grade to successfully pass the course. The use of generative AI is not permitted for any of the course components.

Reading list

Anany Levitin, Introduction to The Design and Analysis of Algorithms, third edition (Pearson, 2012, ISBN: 978-0-273-76411-3).

Registration

Every student has to register for courses with the enrollment tool MyStudyMap. There are two registration periods per year: registration for the fall semester opens in July and registration for the spring semester opens in December. Please see this page for more information.

Please note that it is compulsory to both preregister and confirm your participation for every exam and retake. Not being registered for a course means that you are not allowed to participate in the final exam of the course. Confirming your exam participation is possible until ten days before the exam.

Extensive FAQ's on MyStudymap can be found here.

Contact

Lecturers: dr. J.N. van Rijn and Kristoffer Kalavainen.

Remarks

More information will be available on the dedicated website for this course, hosted on BrightSpace.