(Created 2009-08-11.)

ALGORITHMS, DATA STRUCTURES AND COMPLEXITY | EDAF05 |

**Aim**

Algorithms and data structures are fundamental in computer science. Data structures are used to model reality and the choice of data structures affects the efficiency of algorithms. One aim with this course is to give the students knowledge of advanced data structures for some of the abstract models included in previous courses and also of a number of data structures used to represent further models, such as graphs. Another aim is to give improved knowledge of algorithms, particularily graph algorithms. The course will also give the students knowledge of techniques for analysing algorithms with resspect to performance.

*Knowledge and understanding*

For a passing grade the student must

- be able to describe data structures which can be used to represtent graphs
- be able to describe a number of different problem solving strategies, such as divide and conquer and greedy algorithms
- master a number of techniques for analysing algorithm performance
- be familiar with concepts such as lower bounds, complexity classes and undecidable problems

*Skills and abilities*

For a passing grade the student must

- from a given problem, be able to identify algorithms and data structures which can be used to implement a solution
- be able to implement the data structures included in the course in an object-oriented language
- be able to apply different problem solving strategies on new problems
- be able to apply techniques for analysing the time complexity of algorithms and be able to use the notations for asymptotic time complexity

*Judgement and approach*

For a passing grade the student must

- be able to evaluate proposed solutions and data representations for given problems with respect to suitability and efficiency
- understand that there are problems for which it is unknown whether or not efficient algorithms exist

**Contents**

Graphs and graph algorithms. Data structures for graphs. Problem solving strategies such as divide and conquer, greedy algorithms and brute force. Techniques for analysing the time complexity of algorithms. Introduction to the complexity classes P and NP, computability and the Church-Turing thesis.

**Literature**

Kleinberg J, Tardos E: Algorithm Design. Addison-Wesley 2005.

ISBN: 0321295358

**Code: **0109.
**Name: **Written Examination.

**Higher education credits: ** 3.
**Grading scale: **TH.
**Assessment:** The final grade of the course is based on the result of the written exam.

**Code: **0209.
**Name: **Compulsory Course Items.

**Higher education credits: ** 2.
**Grading scale: **UG.
**Assessment:** For a passing grade, the compulsory course items must be completed.
**Contents:** Laboratory work and a hand-in assignment.