An introduction to the analysis of algorithms (1996)

by Robert Sedgewick, Philippe Flajolet