University of Minnesota
Fall 19: CSci 5421 - Adv. Algorithms & Data Structures


In this course, we will discuss a variety of techniques for the design and analysis of efficient computer algorithms and data structures. Topics that we plan to cover include divide-and-conquer, dynamic programming, the greedy method, matroid theory, balanced search trees, augmented data structures, techniques for amortized analysis, design of amortized-efficient data structures, geometric problems, graph problems, approximation algorithms, and some randomized algorithms. We will explore the theoretical underpinnings of these methods and will illustrate their uses with examples drawn from a variety of problem domains.

To succeed in this course, you must be familiar with elementary data structures (lists, stacks, queues, heaps, trees, etc.), basic algorithms (sorting, binary search, etc.), standard analysis techniques (summations, recurrences, big-O notation, etc.), some basic probability theory (random variables, expected value, etc.), and standard proof methods (contradiction, induction, etc.). Such background can generally be obtained by taking, for instance, CSci 4041 and CSci 2011 and by reviewing Ch. 1-3, 5.1-5.3, and Appendices A, B, C.1-C.4 of the text. Additionally, you should read ahead for class, attend the lectures regularly and participate actively in them, work out as many problems as possible from the text, and avail of the assistance offered by the Instructor and TA.

Here's a detailed syllabus which includes information on the schedule, coursework, evaluation, class policies, and much more. Please read through it carefully.