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
In MyTimetable, you can find all course and programme schedules, allowing you to create your personal timetable. Activities for which you have enrolled via MyStudyMap will automatically appear in your timetable.
Additionally, you can easily link MyTimetable to a calendar app on your phone, and schedule changes will be automatically updated in your calendar. You can also choose to receive email notifications about schedule changes. You can enable notifications in Settings after logging in.
Questions? Watch the video, read the instructions, or contact the ISSC helpdesk.
Note: Joint Degree students from Leiden/Delft need to combine information from both the Leiden and Delft MyTimetables to see a complete schedule. This video explains how to do it.
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
As a student, you are responsible for enrolling on time through MyStudyMap.
In this short video, you can see step-by-step how to enrol for courses in MyStudyMap.
Extensive information about the operation of MyStudyMap can be found here.
There are two enrolment periods per year:
Enrolment for the fall opens in July
Enrolment for the spring opens in December
See this page for more information about deadlines and enrolling for courses and exams.
Note:
It is mandatory to enrol for all activities of a course that you are going to follow.
Your enrolment is only complete when you submit your course planning in the ‘Ready for enrolment’ tab by clicking ‘Send’.
Not being enrolled for an exam/resit means that you are not allowed to participate in the exam/resit.
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.
Software
Starting from the 2024/2025 academic year, the Faculty of Science will use the software distribution platform Academic Software. Through this platform, you can access the software needed for specific courses in your studies. For some software, your laptop must meet certain system requirements, which will be specified with the software. It is important to install the software before the start of the course. More information about the laptop requirements can be found on the student website.