This page contains an annotated bibliography of books that may be helpful for people taking Data Structures & Algorithms. Entries followed by a Library of Congress call number can be found in the Guggenheim Library.

Bentley, Jon L., *Programming Pearls*, Addison-Wesley, Reading, Mass.,
1986. QA 76.6 B453

Bentley, Jon L., *More Programming Pearls: Confessions of a Coder*,
Addison-Wesley, Reading, Mass., 1990. QA 76.6 B452

These books collect Bently's Programming Pearls column that ran in theCommunications of the ACM. Every working programmer should at least read (and understand) both volumes; after that you can decide whether or not you should buy them (I did). Bently is particularly strong on what you do after you've designed and implemented your algorithms, that is, on performance measurement, analysis, and improvement.

Brassard, Gilles and Paul Bratly, *Algorithmics: Theory and Practice*,
Prentice Hall, Englewood Cliffs, New Jersey, 1988. QA 9.6 B73

Written for upper-level undergraduates, this book provides a good, general purpose introduction to algorithms.

Cormen, Thomas H., Charles E. Lieserson, and Ronald L. Rivest, *Introduction
to Algorithms*, MIT Press, Cambridge, Mass., 1993.

An excellent book, thorough in both the theory and practice of algorithm design and analysis. This book serves well both the student and the working programmer.

Dasgupta, Sanjoy, Christos Papadimitriu, and Umesh Vazirani, *Algorithms*, McGraw-Hill, 2008.

An informal presentations covering the usual suspects, along with quantum algorithms. A pre-publication draft of this book is available.

Garham, Ronald. L., Donald E. Knuth, and Oren Patashnik, *Concrete
Mathematics*, Addison-Wesley, Reading, Mass., 1989. QA 39.2 G733

A rigorous and detailed presentation of the mathematics behind algorithm analysis. Written for advanced graduate students, this is not a book for the faint of heart (or brain).

Horowitz E. and S. Sahni, *Fundamentals of Computer Algorithms*, Computer
Science Press, Rockville, Maryland, 1978.

This book has the distinction of being the worst algorithms book I ever used. The algorithms are presented an a short and unhelpful fashion (all variable names are single letter and un-mnemonic, for example), and the algorithm descriptions are terse and not well keyed to the algorithms themselves.

Knuth, Donald E., *The Art of Computer Programming, Volume 1: Fundamental
Algorithms*, Second Edition, Addison-Wesley, Reading, Mass., 1973. QA 76.6
K64 v.1

Knuth, Donald E., *The Art of Computer Programming, Volume 2: Seminumerical
Algorithms*, Second Edition, Addison-Wesley, Reading, Mass., 1981.
QA 76.6 K64 v.2

Knuth, Donald E., *The Art of Computer Programming, Volume 3: Sorting and
Searching*, Addison-Wesley, Reading, Mass., 1973.
QA 76.6 K64 v.3

Even though Bill Gates has blurbs on the dust jackets of the second editions, these are still the books to have for algorithms, their design, and their analysis. Buy them, read them, use them in your work, and savagely ridicule code produced by programmers that have done none of these things.

Metha, Dinesh P. and Sartaj Sahni (eds), *Handbook of Data Structures and
Applications*, Chapman & Hall/CRC, Boca Raton, Florida, 2005.

A thick (three inch) book with 64 chapters on data structures (fundamental ones, priority queues, dictionary structures, multidimensional and spatial structures), libraries and applications.

Rawlins, Gregory, * Compared to What?*, Computer Science Press, New York,
New York, 1992.

A good introduction to algorithms, pitched to upper-level undergraduates. Has a good, informal presentation on asymptotic analysis (big-oh analysis) and its pitfalls.

Wirth, Nicklaus, *Algorithms + Data Structures = Programs*, Addison-Wesley,
Reading, Mass., 1976. QA 76.6 W56

Another classic, aimed at lower-level undergraduates. A book to recommend to your kid sister or brother.