#### Official course description:

Full info last published 15/02-23
##### Course info
Language:
English
ECTS points:
7.5
Course code:
KSALDES1KU
Participants max:
142
Offered to guest students:
yes
Offered to exchange students:
yes
Offered as a single subject:
yes
Price for EU/EEA citizens (Single Subject):
10625 DKK
##### Programme
Level:
MSc. Master
Programme:
MSc in Computer Science
##### Staff
Course manager
Teacher
Associate Professor
Semester
Efterår 2022
Start
29 August 2022
End
31 January 2023
##### Abstract

This course is an advanced course on algorithms which builds on top of an introductory course on algorithms and data structures. The course focuses on advanced techniques for identifying and solving computationally hard problems and on how to adapt such techniques to real-world scenarios.

##### Description

This course introduces students to techniques for solving complex programming tasks arising in modern IT systems. The student taking this course will be able to quickly identify and solve a certain class of problems that can arise among the tasks that a skilled programmer must solve.

Focus in the course is on algorithm design and identification of computationally hard problems. The course contains both theoretical and analysis and implementation exercises.

Contents of lectures includes: Formulating an algorithmic problem, greedy algorithms, graph algorithms, divide and conquer, dynamic programming, network flow, reductions.

##### Formal prerequisites
Before the course, the student should be able to: 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). This can be achieved, for example, by taking the courses "Foundations of Computing - Algorithms and Data Structures" or "Algorithms and Data Structures" (BADS).
##### Intended learning outcomes

After the course, the student should be able to:

• Solve a wide range of real-life programming problems in a scalable way by employing algorithmic design techniques and tools.
• Identify and formulate precisely (if possible) the algorithmic problem underlying in a given programming task.
• Apply the following algorithmic techniques when solving a problem: Greedy, divide and conquer, dynamic programming, reduction to network flow.
• Look up suitable NP hardness results in a compendium, and perform simple reductions from such problems to establish NP hardness.
##### Learning activities

Teaching consists of a mix of lectures and exercises.

##### Mandatory activities
12 mandatory programming assignments must be approved to qualify for the exam.

The student will receive the grade NA (not approved) at the ordinary exam, if the mandatory activities are not approved and the student will use an exam attempt.

##### Course literature

The course literature is published in the course page in LearnIT.

##### Student Activity Budget
Estimated distribution of learning activities for the typical student
• Preparation for lectures and exercises: 25%
• Lectures: 15%
• Exercises: 25%
• Assignments: 25%
• Exam with preparation: 10%
##### Ordinary exam
Exam type:
A: Written exam on premises, External (7-point scale)
Exam variation:
A33: Written exam on premises on paper with restrictions
Exam duration:
4 hours
Aids allowed for the exam:
Written and printed books and notes
Pen

##### reexam
Exam type:
A: Written exam on premises, External (7-point scale)
Exam variation:
A33: Written exam on premises on paper with restrictions
Exam duration:
4 hours
Aids allowed for the exam:
Written and printed books and notes
Pen