Algorithms have been around for a long time, for example, the Euclidean algorithm to find the maximum common divisor of two integers is about 2400 years old. Nowadays, though, “algorithm” refers to instructions executed by computers. Algorithm research is an extremely active and fruitful area; thus, an updated edition of this book is justified.

*The algorithm design manual* is intended for two audiences: students taking a course in algorithms, and computer professionals. Readers are expected to have completed a course in data structures, or to have an equivalent background. Both the first and second editions have been reviewed in *Computing Reviews* [1,2,3]; I encourage you to take a look at those reviews as well.

This book is divided into two parts: “Practical Algorithm Design”
and “The Hitchhiker’s Guide to Algorithms.” The first part aims to develop the skills needed to solve
problems in the real world. Material about
hashing, randomized algorithms, divide-and-conquer methods, approximation algorithms, and quantum computing is either new
or expanded. Also covered are algorithm analysis, data structures (stacks, queues, dictionaries, binary search trees), sorting, graph algorithms, combinatorial searching, dynamic programming, and NP-completeness.

Part 2 is a catalog of common problems and a nearly
encyclopedic list of resources. This list--obviously the result of years of careful hoarding, sifting, and cataloging--is a valuable resource in itself. The first part of the book frequently references the second part. In fact, much of the material in the “Hitchhiker’s Guide” section would be better placed in the “Algorithm Design” section. To take full advantage of Part 2, readers will need to access a well-stocked research library, with plenty of time to select and evaluate referenced material.

When discussing algorithms, Skiena relies primarily on high-level informal descriptions rather than programmatic implementation details or formal mathematical analysis. This book is practical rather than theoretical. Skiena highlights the need for a
deep understanding of the capabilities and limitations of different approaches, and the use of
incremental trial and error, mixing different data structures and algorithms in perhaps novel and unexpected ways to arrive at acceptable solutions. This approach is illustrated through “war stories” that recount actual challenging
problems. Hints and insights implicit throughout will become more apparent with increasing experience.

Source code, while not abundant, is expressed in C, but could be easily translated to another language. Chapters end with an abundance of problems, questions to help with job interviews, and links to programming challenges and source code websites.

To keep the book from getting even bigger, Skiena has removed what he considers less important material, but doesn’t tell you what it was. So, if you have the second edition, keep it until you are
confident that the new edition has all the information you need.

To solve problems effectively, you should master the basic tools of the trade and use then effortlessly as needed.
Readers are expected to be familiar with the fundamentals of data structures and algorithms. On page 443, for example, Skiena says: “Among balanced search trees, AVL and 2/3 trees are now passé, and red-black trees seem to be more popular”; however, he does not
give any details about what these things are. I believe that everyone whose toolbox includes
algorithms ought to be intimately familiar with red-black trees--what they are, how they are constructed, and
why they are popular.

To ensure you have the appropriate background, I strongly recommend that as you read this book, you also
have at your side a good book on fundamental data structures and algorithms. Several excellent choices are available;
Robert Sedgewick’s textbooks on algorithms [4], for example, use Pascal, C, C++, or Java for source code, while the
language-agnostic book by Cormen et. al. [5] uses pseudocode.

The book’s companion website (https://www.algorist.com/) has material potentially useful to students and instructors.

Finally, I must mention that my initial reaction to this book was quite negative. Here was an author who
either never heard of or simply disregarded wise advice: be concise, that is, make every word and every
sentence count. A style that is chatty and friendly to one reader may feel careless and sloppy to another. Judging by the size of the bibliography (pages 719 to 768), Skiena loves to
read. In that spirit, I urge him to add two small gems to his reading list: *The elements of style* [6] and *The golden book on writing* [7].

More reviews about this item: Amazon