An emphasis on the creative side of algorithms design is the leitmotiv of this book. The author attempts successfully to explain algorithms through a creative process, following the steps leading to their development (sometimes including wrong steps), rather than as finished products. The creative process relies on analogy between proving mathematical theorems by induction and designing algorithms. This approach of using induction in designing and explaining algorithms is the central theme of the book. The induction approach is presented formally in Chapter 5 (titled ``Design of algorithms by induction''). According to the author: ``If you read only one chapter in this book, read Chapter 5.'' Chapter 2, on mathematical induction, is also recommended by this reviewer. It illustrates induction through a series of examples—algorithmic and mathematical—usually not found in textbooks on algorithms. These two chapters will form nice supplementary reading for any algorithms course based on any book. This book also contains a chapter (Chapter 10) on reductions among problems. This serves as a lead-in to Chapter 11 on NP-completeness. Chapter 12 gives a delightful introductory flavor of parallel algorithms. In addition, there are chapters on graph algorithms, algebraic and numerical algorithms, and algorithms involving sequences and sets. Each chapter contains a good collection of exercises divided into ``drill'' and ``creative'' categories. In all, the book contains over 500 problems with sketches of solutions to about a quarter of them. Many of the exercises introduce important problems and ideas. This collection of problems is one of the strengths of the book. Breadth of coverage is also good for an introductory book. The author's lucid style makes the book enjoyable reading. The main drawback to the induction methodology (admitted by the author) is that it does not cover all possible ways of designing algorithms. The book also does not cover some well-known algorithms, such as linear-time selection, recently developed network flow algorithms, and some of the interesting advanced data structures. While it will serve nicely as a textbook in a first undergraduate course on algorithms, for a more advanced course material would have to supplemented from other sources. In summary, this is a noteworthy addition to the growing list of introductory books on algorithms.
Reviewer: Deo, Narsingh [form MathSciNet]