Summary
This is a second course on the general principles of algorithm design and analysis. Our aim is touch upon various branches of the study of algorithms - a consequence is that we will not linger too long on any one of them. Our hope is that this course will confer:
-
some familiarity with several of the main thrusts of work in algorithms - sufficient to give you some context for formulating and seeking known solutions to an algorithmic problem;
-
sufficient background and facility to let one read current research publications in the area of algorithms;
-
a set of tools for design and analysis of new algorithms for new problems that you encounter.
Lecturer
Prof. David Karger
Content
The goal is for the course to be broad rather than deep. Our plan (unlikely to survive contact with reality intact) is to touch upon the following areas. This is a tentative list of topics that might be covered in the course; I will select material adaptively based on our background, interests, and rate of progress.
Data Structures
More advanced solutions to basic structuring problems: Fibonacci Heaps and Radix Heaps for priority queues. Splay trees for searching ordered sets. Least common ancestors. Dynamic data structures for connectivity and/or reachability. Persistent data structures.
String Algorithms
Knuth-Morris-Pratt and Boyer Moore algorithms for string searching. Suffix trees.
Maximum Flows
Maximum flows. Augmenting paths and push-relabel methods. Minimum cost flows. Bipartite matching and assignment problems.
Linear Programming
Formulation of problems as linear programs. Duality. Simplex, interior point, and ellipsoid algorithms.
Online Algorithms
Paging. k-server problem.
Approximation Algorithms
Vertex cover. Set cover. Bin Packing. Maximum cut. Graph coloring. Greedy approximation algorithms. Linear and semidefinite programming relaxations. Randomized Rounding.
Scheduling
Exact and approximate algorithms for scheduling tasks that compete for scarce resources.
External Memory Algorithms
Algorithms that account for the cost of accessing data from slow memory.
Prerequisites
We assume that the reader has had an undergraduate course in Algorithms (6.046J) and some exposure to probability (6.041 or 6.042 are more than sufficient). Complexity Theory (6.045) is a bonus.
Requirements
Scribing, problem sets, take home midterm and final, reading and/or implementation and/or research project.
Scribing (%5)
Last time there was a lot of request for scribed notes. You get to meet it.
Homework (%65)
Homework assignments will be handed out weekly.
Exams (%15)
The take-home midterm and final will be much like the homeworks but must be solved without collaborators (they will be easier to make up for this). Their primary objective is to make sure that you have internalized the material so you can understand it without the help of others.
Reading/Research/Implementation Project (%15)
You will read a new (not yet textbook) algorithm from the recent research literature, and improve upon it in via some mixture of the following:
-
Write a description of greater clarity than the original publication, or
-
Devise an improved solution to the problem under consideration, and write up your improvement (with appropriate discussion of the original algorithm).
-
Implement the algorithm in order to study its performance in practice. Considerations include choice of algorithm, design of good tests, interpretation of results, and design and analysis of heuristics for improving performance in practice.
Ideally, the algorithm you choose will be motivated by a computational problem you need to solve. If the project is large, it may be tackled by a group.
Collaboration Policy
Collaboration is encouraged on all aspects of the class, except where explicitly forbidden. Note:
-
All collaboration (who and what) must be clearly indicated in writing on anything turned in.
-
Homeworks may be solved collaboratively, but solutions must be written up independently.
-
Every collaborator must contribute significantly to reading, implementation, and writeup in the projects. To allow this, project groups should limit their size to 3 unless the project is unusually large.
Textbooks
There are no textbooks covering a majority portion of the material we will be studying in this course. Roughly 40% of the material is covered in Goemans' lecture notes (see below). My lectures will often draw from the following (optional) texts, all of which I consider nice to have.
Goemans, Michel. Course notes for Advanced Algorithms.
The source for the plurality of material for this course.
Cormen, Leiserson, and Rivest. Introduction to Algorithms. Cambridge, MA: MIT Press, 1990. ISBN: 0262031418.
Some of each of data structures, string algorithms, network flow.
Ahuja, Magnanti, and Orlin. Network Flows. Upper Saddle River, NJ: Prentice Hall, 1993. ISBN: 013617549X.
Motwani, and Raghavan. Randomized Algorithms. Cambridge, UK: Cambridge University Press, 1995. ISBN: 0521474655.
Crochemore, and Rytter. Text Algorithms. New York, NY: Oxford University Press, 1994. ISBN: 0195086090.