One of the most appealing characteristics of this book is the small size. Textbooks in algorithms are similar to those of other fields in that they have continued to increase in girth over the years. At 320 pages, this book is a relative midget.
However, that does not in any way mean that it is weak in content, there is plenty of material for a one-semester course in algorithms. The chapters are:
*) Prologue - a bit of history and the big-O notation
*) Algorithms with numbers - basic and modular arithmetic, primality testing and cryptography
*) Divide-and-conquer algorithms - multiplication, recurrence relations, mergesort, matrix multiplication and the Fast Fourier Transform (FFT).
*) Decomposition of graphs - the fundamental definition of directed and undirected graphs and performing depth-first searches.
*) Paths in graphs- basic algorithms used in graph searches
*) Greedy algorithms - some fundamental greedy algorithms and their basic level of performance
*) Dynamic programming - shortest paths, knapsack optimization and independent sets in trees
*) Linear programming and reductions - the definition of linear programming and some of the standard problems that it can be used to solve
*) NP-complete problems - definition of NP-complete, some examples and reduction strategies used to show NP equivalence
*) Coping with NP-completeness - intelligent search, approximation and random algorithms
*) Quantum algorithms - a brief foray into a possible revolution in computing. Explanations of how data may be stored and processed at the quantum level.
The explanations are brief yet thorough enough for advanced computer science students, the algorithms are presented in a generic pseudocode. A large set of exercises are included at the end of the chapters, the expectation is that the solutions will be expressed in pseudocode.
Despite the compactness of the presentation, this book is a worthy choice for the textbook in an algorithms course for upper level computer science majors.