From the course catalog:

This course investigates methods for designing efficient and reliable algorithms. By carefully analyzing the structure of a problem within a mathematical framework, it is often possible to dramatically decrease the computational resources needed to find a solution. In addition, analysis provides a method for verifying the correctness of an algorithm and accurately estimating its running time and space requirements. We will study several algorithm design strategies that build on data structures and programming techniques introduced in Computer Science 136. These include induction, divide-and-conquer, dynamic programming, and greedy algorithms. Particular topics of study include graph theory, hashing, network flow, and advanced data structures.

We all have problems. This course is not only about finding solutions to the problems, but rather, good solutions--even provably good solutions. We begin by developing techniques for algorithm analysis--mathematical methods for putting bounds on time and space complexity. We'll study asymptotic analysis, recurrence relations, and some probability theory. Next, we'll delve into problem solving strategies like divide and conquer, randomization, and implicit data structures. We'll highlight these techniques with specific sorting algorithms including mergesort, quicksort, and heapsort. Now that we've got some practice solving problems and analyzing our solutions, we'll try our hand at some algorithms on advanced data structures like graphs and balanced trees. Probing further we'll learn some advanced algorithm design techniques like dynamic programming, linear programming, and maybe even fast Fourier transforms. Finally, we'll look at a set of problems for which no known polynomial time solutions exist. We'll talk about ways of identifying these seemingly different problems, and proving that they are all, in some way, intimately related.

Ten homework assignments each worth 5% of your grade. I'll drop the lowest score expecting this covers all extenuating circumstances such as illness and natural disasters. Six pop quizzes (lowest score dropped) each contributing 1% to your grade; 5% for class participation; a take-home midterm worth 25% of your grade and a 24-hour, cumulative final worth another 20% of your grade.

Some points of clarification:- The teaching assistant will give provisional grades on your assignments based on sample solutions I provide. In addition, I'll examine every problem set so that I know what topics you've individually mastered. On many problem sets, I'll exclusively correct one of the problems, paying particular attention to your style and prose. I will also adjust the provisional grades when appropriate.
- The homework counts significantly toward your grade. I expect you
will discuss the problems with members of the class, but I expect you
will not discuss the solutions, nor will you write up solutions
together. Deviation is considered an honor code violation.
**Insightful discussion with others must be cited in your homework solution**. You will not lose points for citations, nor will you fall from my good graces; quite the contrary, citation gives credit where credit is due. However, failure to cite properly is considered an honor code violation. Your understanding of the problems should be sufficient enough to recount the key arguments of the solution by yourself. - Late homework will not be accepted.
- Homework is due at the beginning of class. Homework cannot be turned in via proxy (e.g., via an email attachment or a friend).
- Homework should be written clearly and concisely. Rewrite your proofs if they do not flow well. If your handwriting is messy, consider using LaTeX. If your handwriting is not messy, still consider using LaTeX.
- Each homework question will be graded on a 5 point scale. Here's
the breakdown:
- 5: The solution is clear and correct. This solution would easily find a home in a research paper.
- 4: The solution contains a few mistakes, but they are mostly arithmetic or of little significance to the overall argument.
- 3: The solution hits on the main points, but has at least one logical gap.
- 2: The solution contains several logical mistakes, but parts of it are salvageable.
- 1: The solution is just plain wrong.
- 0: No attempt is made at solving the problem.

- The midterm will be take home. You may only use your course notes, course text, homework, and homework solutions.
- The midterm will be very similar to a problem set.
- It will be assigned Friday, 07 March 2008 at 11.50 and due at 17.00 on Monday, 10 March 2008.
- No collaboration is allowed.
- I will be available on Saturday and Sunday, 08 and 09 March 2008, for questions.

- 11.38 03 February 2008. Chapter 1 of the text is available online in case you haven't gotten ahold of a copy of the book.
- 15.24 29 January 2008. In case you are interested in fancy headers for LaTeX -- the kind I use on the homework -- check out the fancyhdr package. Here is my header.tex file in case you want an example of what to include.

- Introduction to Algorithm Design and Analysis
- Lecture 01 :: 01 February 2008 :: Stable Matchings :: Reading: Chapter 1 of KT including the Solved Exercises [Pages 1-21] :: Wikipedia entry on Stable Matchings.
- Lecture 02 :: 04 February 2008 :: Choosing the right data structures and the Largest Sum Subinterval :: Reading : Chapter 2 of KT
- Lecture 03 :: 06 February 2008 :: Asymptotic analysis :: Reading : Chapter 2 of KT

- Graphs
- Lecture 04 :: 08 February 2008 :: Definitions and problems
- Lecture 05 :: 11 February 2008 :: Traversals :: Reading: Chapter 3 of KT
- Greedy Algorithms
- Lecture 06 :: 13 February 2008 :: Minimum spanning trees :: Readings: Chapter 4 pages 115-116,142-151
- Lecture 07 :: 18 February 2008 :: Shortest Path :: Readings: Chapter 4 pages 137-141
- Lecture 08 :: 20 February 2008 :: Union Find and Amortized Analysis :: Readings: Chapter 4 pages 151-161
- Lecture 09 :: 22 February 2008 :: Interval Scheduling :: Readings: Chapter 4 pages 116-131
- Dynamic Programming
- Lecture 10 :: 25 February 2008 :: Matrix Parenthesization
- Lecture 11 :: 27 February 2008 :: Stressful jobs and other DP :: Readings Chapter 6 pages 251-307
- Lecture 12 :: 29 February 2008 :: Bitonic Tours
- Divide and Conquer
- Lecture 13 :: 03 March 2008 :: Integer and Matrix Multiplication :: Readings Chapter 5
- Lecture 14 :: 05 March 2008 :: Fast Fourier Transforms
- Lecture 15 :: 07 March 2008 :: Fast Fourier Transforms
- Randomization
- Lecture 16 :: 10 March 2008 :: Randomized median :: Readings: 727-734
- Lecture 17 :: 12 March 2008 :: Randomized quicksort and deterministic median.
- Tangent Lecture
- Lecture 18 :: 14 March 2008 :: Approximating Binary Decision Trees
- Network Flow
- Lecture 19 :: 31 March 2008 :: Network Flows / Max Flow / Ford-Fulkerson :: History of Flow Networks
- Lecture 20 :: 02 April 2008 :: Network Flow / Max Flow - Min Cut
- Lecture 21 :: 04 April 2008 :: Network Flow / Applications
- Lecture 22 :: 07 April 2008 :: Baseball Elimination
- Lecture 23 :: 09 April 2008 :: Problems affording network flow solutions
- Lecture 24 :: 11 April 2008 :: TBD
- Hashing
- Lecture 25 :: 14 April 2008 :: Universal Hashing
- Lecture 26 :: 16 April 2008 :: (A tangent into Karp-Hopcroft for bipartite matching)
- Lecture 27 :: 18 April 2008 :: Closest pairs of points in the plane
- Advanced Data Structures
- Lecture 28 :: 21 April 2008 :: Skip Lists
- Lecture 29 :: 23 April 2008 :: Suffix Trees :: guest lecture by Daniel Aalberts
- Lecture 30 :: 25 April 2008 :: Models of Parallel Computation :: guest lecture by Duane Bailey
- Lecture 31 :: 28 April 2008 :: no class
- Dealing with Intractability
- Lecture 32 :: 30 April 2008 :: The complexity classes P and NP
- Lecture 33 :: 02 May 2008 :: Reductions
- Lecture 34 :: 05 May 2008 :: Approximation Algorithms
- Lecture 35 :: 07 May 2008 :: Linear Programming
- Lecture 36 :: 09 May 2008 :: Computational Geometry

- Homework 0 (ungraded) [TeX] :: Assigned: 11.00 EST 01 February 2008 :: Due: 11.00 EST 06 February 2008
- Homework 1 [TeX] :: Assigned: 11.00 EST 06 February 2008 :: Due: 11.00 EST 13 September 2008
- Homework 2 [TeX] :: Assigned: 11.00 EST 13 February 2008 :: Due: 11.00 EST 20 Feburary 2008
- Homework 3 [TeX] :: Assigned: 11.00 EST 20 Feburary 2008 :: Due: 11.00 EST 27 Feburary 2008 :: This is the LaTeX assignment. You must typeset your solutions in LaTeX
- Homework 4 [TeX] :: Assigned: 11.00 EST 27 Feburary 2008 :: Due: 11.00 EST 05 March 2008
- Homework 5 [TeX] :: Assigned: 11.00 EDT 10 March 2008 :: Due: 11.00 EDT 14 March 2008
- Homework 6 [TeX] :: Assigned: 11.00 EDT 02 April 2008 :: Due: 11.00 EDT 09 April 2008
- Homework 7 [TeX] :: Assigned: 21.00 EDT 09 April 2008 :: Due: 11.00 EDT 16 April 2008
- Homework 8 [TeX] :: Assigned: 22.14 EDT 16 April 2008 :: Due: 11.00 EDT 23 April 2008
- Homework 9 [TeX] :: Assigned: 11.00 EDT 23 April 2008 :: Due: 11.00 EDT 30 April 2008 :: SkipList.java
- Homework 10 [TeX] :: Assigned: 11.00 EDT 30 April 2008 :: Due: 17.00 EDT 09 May 2008

- Computer Science Cheat Sheet [pdf]
- Complexity Zoo
- Theoretical Computer Science Blogs

- Computational Complexity :: Lance Fortnow and Bill Gasarch
- WebDiarios de Motocicleta :: Mihai Pătraşcu
- My Biased Coin :: Michael Mitzenmacher
- Andy's Research :: Andy Drucker
- In Theory :: Luca Trevisan
- The Geomblog :: Suresh Venkatasubramanian
- 0xDE :: David Eppstein