Perform basic analysis of algorithm correctness and complexity, using invariants and big-O notation.

Use basic algorithms and data structures when programming (e.g., lists, queues, stacks, search trees, hashing, sorting algorithms, and basic graph algorithms).

Use basic algorithmic techniques to design algorithms for a given problem (e.g. greedy, divide and conquer, dynamic programming)

This can be achieved, for example, by taking the courses "Foundations of Computing - Algorithms and Data Structures" and "Algorithm Design".

Læringsmål:

After the course, the student should be able to solve a wider range of real-life programming problems in a scalable way, by employing algorithmic design techniques and tools. In particular, the student should be able to:

- Identify and formulate precisely (if possible) the algorithmic problem hidden in a given programming task.
- Theoretically analyze the performance of a given algorithmic solution
- Plan and carry out a small-scale investigation of an algorithmic research problem. This investigation could be theoretical, experimental, or both.
- Find, extract and explain results in the algorithms research literature relevant to a given problem.

Fagligt indhold:

This course will introduce students to techniques for solving complex programming tasks arising in modern IT systems. The focus in the course is on algorithm design and analysis.

Content of lectures includes: Approximation algorithms, randomized algorithms, algorithms for data streams, algorithms for big data, and frameworks for parallel/distributed computation. Lectures will also include techniques for background research, such as how to read and analyze research papers.

On top of that, the course will give an overview of possible thesis subjects in this area and offer a possibility of matching students to supervisors.

Læringsaktiviteter:

Students will work in groups of approximately 3-4 students on a semester-long project on a chosen algorithmic problem. Students must implement a solution to the problem, along with a report documenting their progress over the course of the semester. In particular, the report should include an analysis of the problem (including relevant algorithmic literature) and a summary of the group's solution.

Teaching will consist of a mixture of lectures and group activities. Lectures will give students background information on associated topics. During group activities students will work on their projects, with instructors available for help. The majority of the lectures will take place closer to the beginning of the course to give students background, while the end of the course will focus much more on group sessions.

Groups will have the opportunity to present their progress in class and receive peer and instructor feedback.

Obligatoriske aktivititer:

Der er ingen obligatoriske aktiviteter. Vær venlig KUN at ændre denne tekst når der er obligatoriske aktiviteter.
There are no mandatory activities. Please, change this text ONLY when there are mandatory activities.

Eksamensform og -beskrivelse:

D2G Aflevering med mundtlig eksamen der supplerer projekt. Delt ansvar for projekt., (7-scale, external exam)

The exam will consist of three parts: the project code (if applicable), a written report, and an oral exam. The project itself (the code and report) will be graded as a group. The written report is expected to explain the solution ideas, and show mastery of the learning outcomes. The oral exam tests each student's knowledge of the project, and is graded individually. Students should have a mastery of their contributions to the project, and should be familiar with all other parts of the project.

Size of groups: 3-4 students.

Duration of oral exam: 30 minutes including a 10 minutes group presentation.

Form of group exam: Mixed exam 1
See Study Guide -> Exams -> Course Exams -> Exam Forms for more information.

Litteratur udover forskningsartikler:

Algorithm Design, by Eva Tardos and Jon Kleinberg, Addison-Wesley, 2005. ISBN-10: 0321372913, ISBN-13: 978-0321372918.