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.