A Desktop Quick Reference
Before Picking an Algorithm Know What Problem You’re Trying to Solve.
Finding what you need in the first place is a critical step. It’s addressed in several parts of the book. Chapter 11, for instance, mentions the principle “know your data”, that pretty much sums up the idea that you have to know what you want to accomplish before picking a specific algorithm. As an example, the sorting chapter shows several different algorithms. It points out cases, where the simpler to write ones (i.e. potentially fewer bugs to hunt down), might be fine for a situation as long as the data set isn’t too large. Once you know how to define what you are looking for, the next step is finding the tool to solve it.
The middle section covers about 35 different algorithms in the areas of sorting, searching, graph algorithms, path-finding, network flow algorithms and computational geometry. Each algorithm is explained along with some variations and optimizations that are commonly done. One interesting feature of the book is the fact-sheets that provide a graphical overview of the algorithm being discussed, including some pseudo-code. O-notation and some performance and implementation notes, e.g. brute-force (these icons are explained on pages 41-43) that give a quick overview of the algorithm being discussed.
Finally, the book discusses what to do when there isn’t an apparent solution. The advice given is to do two things: figure out what you are trying to solve (“know your data”) and break your problem down into smaller, solvable problems.
It took me a bit of time to find the source code mentioned in the book. Eventually found it in the “Releases” folder along with code from an O’Reilly blog on algorithms by the same authors- That which also explained the meaning of the name (ADK: Algorithms Development Kit) used for the source code. The code is provided in various languages, mostly C/C++ and Java, with some Ruby in places, mainly as a comparison. The book’s layout reminds me a bit of the “Hacks” series of books. It’s a small format, about 350 pages black/white/grey design. I’d recommend this book as a useful reference.