Algorithms and Data Structures 2
Overall Course Objectives
To provide the student with an understanding of the techniques involved in the construction and analysis of advanced algorithms. To strengthen the student’s ability to construct algorithms.
See course description in Danish
Learning Objectives
- Describe an algorithm accurately, concise and unambiguous.
- Apply algorithms and data structures from the course on a given problem instance.
- Analyze algorithms and data structures, including being able to determine the worst case, expected, and amortized running time and space consumption in asymptotic notation.
- Argue for the correctness of algorithms.
- Identify and formulate the underlying algorithmic problem in a given problem.
- Analyze, evaluate, and compare algorithms / data structures and in the light of this, select an appropriate algorithm / data structure for solving a given problem.
- Apply algorithms and data structures from the course to solve a given problem.
- Modify algorithms and data structures from the course to solve a given problem.
- Compare different algorithmic paradigms (fx. divide-and-conquer, dynamic programming, randomized algorithms, and flow algorithms) and select an appropriate one for solving a given problem.
- Construct reductions between problems, fx. to prove hardness of a given problem.
- Implement and test data structures and algorithms.
- Argue for choices made when solving a problem.
Course Content
Flow algorithms. Data structures for indexing and partial sum (fx. hash tables, Fenwick trees). Algorithms for string matching. Techniques for the design and analysis of algorithms (dynamic programming, divide-and-conquer, randomized algorithms and data structures, analysis of expected running times, and amortized analysis). NP.
Recommended prerequisites
02105/02326, The course builds on 02105 Algorithms and Data Structures I. Students are expected to know the curriculum for 02105, which includes
Basic algorithm analysis, asymptotic notation.
Data structures: stacks, queues, linked lists, trees, heaps, priority queues, union-find, balanced binary search trees.
Searching and sorting: binary search, heap sort, insertion sort, merge-sort.
Graph algorithms: single source shortest paths (Dijkstra and SSSP in DAGs), Minimum spanning trees, topological sorting, Breadth first search, Depth first search, representation of graphs.
Teaching Method
Lectures and exercises.




