25 Feb 2020

Book Review - The Algorithm Design Manual by Steven S. Skiena

With minimal prerequisites and informal language, the book is accessible for a wide range of audience. However, the book falls short in providing a “surprise” factor as it lacks the build-up of good theoretical arguments.

Review of The Algorithm Design Manual by Steven S. Skiena

The Algorithm Design Manual by Steven S. Skiena provides a gentle introduction for people looking for a first course on Algorithms. With minimal prerequisites and informal language, it is accessible for a wide range of audience. Skiena does a good job in providing enough reference material for further study. However, the book falls short in providing a “surprise” factor as it lacks the build-up of good theoretical arguments.

The book is broadly divided into two sections - an introduction to algorithm design and a laundry list of various algorithms (called The Hitchhiker’s Guide to Algorithms!).

Section 1 covers basics of algorithm design starting from analysis of algorithms and data structures and moving on to the basic algorithms for sorting, searching, graphs and ending with dynamic programming and NP complete problems.

Section 2 serves as a great reference for several algorithms and provides additional reading for anyone interested to deep dive on a certain category of algorithms.

Though the basics are very accessible, Skiena shies away from going into the theoretical details and thereby the book does not provide a build-up to some of the great topics. For example, the treatment of master theorem is completely formulaic (aka practical) and fails to provide an intuitive understanding of the formula.

Another quirk of the book is the inclusion of “War Stories” which help to serve as a guide to practical usage of algorithms. But they often feel out of place and not very well specified as finer details are omitted. Would recommend skipping these sections for a reader more interested in theoretical aspects.

Most code snippets are unnecessarily written in C while a pseudo code would have done a better job in focusing on the algorithmic details.

The exercises however are extensive and have ‘implementation/programming’ and ‘interview’ sections. This combined with the availability of solutions (as a wiki) on the book website, immensely assist with self-study. Also, every chapter has further references that help an inclined reader find alternative treatment of a given topic.

Overall, I recommend the book as a complimentary guide for following along with an introductory algortihms course and as a reference manual given the extensive coverage of algorithms from various topics in section 2.