https://studiegids.vu.nl/en/courses/2025-2026/E_EDS2_DSAData Structures and Algorithms are essential building blocks for processing, storing, and analysing data. A data structure defines how data is stored and which operations can be applied to this structure and the data contained therein. An algorithm is a well-defined procedure that solves a computational problem (e.g. sorting data), by taking a set of inputs and transforming them to a set of outputs. Importantly, data structures and algorithms go hand in hand. For example, an array (i.e. data structure) can be sorted in many different ways (i.e. different algorithms), some of which are more efficient than others. Moreover, which data structures and which algorithms to use depends to a large degree on the context (i.e. the type of data we have, and the type of analysis we wish to perform). Clearly, we have to combine appropriate data structures with efficient and correct algorithms. Therefore, this course offers a comprehensive treatment of algorithms and data structures. Having a solid understanding of these topics is crucial for developing and analysing more complex procedures in econometrics and machine learning. In this course, you will learn about the most important algorithm design paradigms (divide-and-conquer, randomisation, dynamic programming, greedy approaches, and parallelisation) as well as the mathematical tools that are needed (1) to prove an algorithm is correct and (2) to analyse its asymptotic complexity. In addition, we will cover essential data structures (stacks, queues, linked lists, hash tables, binary search trees, and red-black trees) and discuss algorithms that solve common computational problems in econometrics and machine learning. Finally, you will get hands-on experience with implementing algorithms and data structures using Python.By the end of this course, you candefine and explain core concepts in algorithms and data structures;describe and apply design paradigms for algorithms and essential data structures;prove the correctness and analyse the complexity of algorithms;develop and implement new algorithms and data structures;recognise which data structures and/or algorithms are appropriate in which context; andcommunicate the core idea of a given algorithm or data structure to a non-expert audience.Lectures (4 hours a week) and tutorials (2 hours a week).Written or digital exam and group assignments.Mandatory literature:Cormen, T. H., Leiserson, C. E., Rivest, R. L., and Stein, C. (2009). Introduction to Algorithms (3rd edition; ISBN 978-0-262-03384-8). MIT Press 2009.Recommended literature:Roughgarden, Tim (2017). Algorithms Illuminated, Part I-III. Soundlikeyourself publishing, https://www.algorithmsilluminated.org/We welcome students (including exchange students) from any programme, provided (1) they have completed at least one programming course at the bachelor level, with some exposure to core concepts in Objected-Oriented Programming (OOP), (2) they are familiar with several proving techniques in mathematics (i.e. direct proof, proof by contradiction, and induction), and (3) they are familiar with probability theory and statistics. Please only sign up if you feel reasonably comfortable with these topics.Please note that this course is part of an entry requirement for Data Science Practical (part of the BSc in Econometrics and Data Science).Basics of Programming;Familiarity with core concepts in Objected-Oriented Programming (OOP);Probability Theory; andStatistics.