Readings

For reading assignments associated with each lecture, see the Calendar section.

The following books are additional references.

Texts on Algorithms

Dasgupta, Sanjoy, Christos Papadimitriou, and Umesh Vazirani. Algorithms. McGraw-Hill, 2006. ISBN: 9780073523408.

Kleinberg, Jon, and Eva Tardos. Algorithm Design. Addison-Wesley, 2005. ISBN: 9780321295354.

Algorithms and Programming

Bentley, Jon. Programming Pearls. Association for Computing Machinery, 1986. ISBN: 9780201103311.
Applications of algorithm design techniques to software engineering.

———. More Programming Pearls: Confessions of a Coder. Addison-Wesley, 1988. ISBN: 9780201118896.
More applications of algorithm design techniques to software engineering.

———. Writing Efficient Programs. Prentice-Hall, 1982. ISBN: 9780139702518.
Performance hacking extraordinaire.

Skiena, Steven. The Algorithm Design Manual. Springer, 1997. ISBN: 9780387948607. [Preview with Google Books]

Gonnet, Gaston. Handbook of Algorithms and Data Structures: Coded in Pascal and C. Addison-Wesley, 1984. ISBN: 9780201142181.
Pascal and C code, comparisons of actual running times, and pointers to analysis in research papers.

Advanced Topics

Even, Shimon. Graph Algorithms. Computer Science Press, 1979. ISBN: 9780914894216.
Broad treatment of graph algorithms, including network flow and planarity.

Garey, Michael, and David Johnson. Computers and Intractability: A Guide to the Theory of NP-Completeness. W. H. Freeman, 1979. ISBN: 9780716710455.
Reference book devoted to NP-completeness. Second half contains an extensive list of NP-complete problems and references to algorithms in the literature for polynomial-time special cases.

Gusfield, Dan. Algorithms on Strings, Trees, and Sequences: Computer Science and Computational Biology. Cambridge University Press, 1997. ISBN: 9780521585194. [Preview with Google Books]
General treatment of algorithms that operate on character strings and sequences.

Lawler, Eugene. Combinatorial Optimization: Networks and Matroids. Holt, Rinehart, and Winston, 1976.
Dense graph algorithms, network flows, and linear programming. First few chapters are excellent.

Papadimitriou, Christos, and Kenneth Steiglitz. Combinatorial Optimization: Algorithms and Complexity. Prentice-Hall, 1981. ISBN: 9780131524620.
Linear programming and its variants.

Sipser, Michael. Introduction to the Theory of Computation. PWS, 1997.
A good text on computability and complexity theory, with proof ideas to kick off each proof.

Tarjan, Robert. Data Structures and Network Algorithms. Society for Industrial and Applied Mathematics, 1985. [Preview with Google Books]
An advanced book with tons of good stuff.

Background Mathematics

Chung, Kai. Elementary Probability Theory with Stochastic Processes. Springer, 1974.
Intuitive introduction to probability.

Feller, William. An Introduction to Probability Theory and Its Applications. Wiley, 1968 (Volume 1), 1971 (Volume 2). ISBN: 9780471257080.
Excellent reference for probability theory.

Liu, Chung. Introduction to Combinatorial Mathematics. McGraw-Hill College, 1968. ISBN: 9780070381247.
Combinatorial mathematics relevant to computer science. Excellent problems.

Niven, Ivan, and Herbert Zuckerman. An Introduction to the Theory of Numbers. John Wiley & Sons, 1991. ISBN: 9789971513016.
Readable introduction to number theory.