https://studiegids.vu.nl/en/courses/2024-2025/XB_0043The goal of this course is to introduce Bachelor students enrolled in the target audience program to the basic concepts of data structures and algorithms. After taking this course, students will have gained (i) basic knowledge of data structures and algorithms, (ii) ability to analyse complexity of algorithms, and (iii) recognize trade-offs and choose an appropriate data structure and algorithm to solve a particular problem. Specifically, the student will have reached the following learning outcomes:Describe the basic data structures and algorithms that are used for common computational problems. [Dublin Descriptors]: Knowledge and understanding, Communication Explain the role of algorithm complexity (time and space) in addressing problems and make complexity judgements on simple programs. [Dublin Descriptors]: Applying knowledge and understanding, CommunicationExplain the rationale of the proposed solution and possibly apply appropriate techniques on a concrete problem instance. [Dublin Descriptors]: Applying knowledge and understanding, CommunicationIdentify and review pros and cons of proposed techniques for solving problems. [Dublin Descriptors]: Knowledge and understanding, Lifelong learning skillsThe content of the course is organised in weekly lectures, where the lecturer will cover the concepts of linear data structures (e.g., linked list, trees, graphs), basic notion of time and space complexity, which will be discussed on simple programs (e.g., sorting), and basic algorithms for traversing trees and graphs (e.g., search or decision trees). The introduced concepts will be accompanied by an explanation of the difference between solving the same problem by using a different method. More advanced topics will be covered towards the end of the course. The students will work on individual assignments during the weekly lab sessions which consist of practical programming challenges aimed to deepen their understanding of the topics covered during the lectures. The programming assignments will be automatically tested for correctness and efficiency, the latter being a determinant characteristic.The course is based on the following teaching methods: Weekly lectures introducing new topicsWeekly lab sessions where student TAs will supervise students working on practical exercisesAssignments in the form of programing challenges including analytical tasks describing the implemented solution to an algorithmic problemAssignments: 30% Theory + Practicum A: 35% Theory + Practicum B: 35% Assignments: Points will be assigned with the following grading scheme:5% assessment of the first lab assignment (A1)5% assessment of the second lab assignment (A2)10% assessment of the third lab assignment (A3)10% assessment of the fourth lab assignment (A4) Theory + Practicum:Part A (35%): There is a first exam (in person) assessing the material covered in the first half of the lectures and the first two assignments. This examination takes place at the end of September.Part B (35%): There is a second exam (in person) assessing the material covered in the second half of the lectures and the third and fourth assignments. This examination takes place at the end of the course. For multiple choice tests the university standard method of correction for the chances of random answers is applied. Resit: There is a single resit for the examinations Part A and Part B but not the assignments. Passing requirement: To pass the course, a student needs to pass (>5.5) on all components (assignments, theory, practicum) Plagiarism: The assignment submissions are automatically evaluated for plagiarism. If the submitted code (and not the boiler plate) is flagged for plagiarism the student will be reported to the Examination Board.Roughgarden, Tim. Algorithms Illuminated (selected chapters of Part I, Part II and Part III). Soundlikeyourself publishing, 2017.Bachelor Artificial Intelligence (Year 2)Introduction to programming (Python) (X_401096). Good working knowledge of Python is strongly advised and if not present, the student should be prepared to put extra effort for programming in Python.Some background in discrete mathematics and calculus is advised (polynomial and exponentials functions, logarithmic function, function compositions, simple series, factorial calculus, etc.)