Author: Steven S. Skiena
Publisher: Springer, 2008 (2nd Edition)
Aimed at: Practising developers and academic environment
Pros: Well presented with good balance of theory and practice
Cons: Large reference section which could date
Reviewed by: Mike James
Algorithms are the very heart of computing but it can be difficult to find an account that isn't overly academic or too lightweight to be of use. This book is about right for most people.
The first section - about 350 pages - of the book is about algorithm design - analysis, data structures, sorting and searching, graph traversal, weighted graphs, combinatorial search, heuristics, dynamic programming and finally intractable problems. Each of the topics is treated in a readable informal style with lots of asides and accounts of personal experiences - "war stories" in implementing algorithms. Often the personal accounts reveal much about what the real world of trying to decide on the best method is really like. You can learn about sorting algorithms in the abstract academic world and think you have them all sorted (pun intended) and be rudely awakened the first time you face a sorting problem because the requirements rule out most of the methods you favor.
The second part of the book is a catalog of algorithms. It doesn't actually give you details of the algorithms in question just a general discussion of the type of methods, what the problems are, variations on the problems, where the problem and solution prove useful and lots of places to look for more detailed information, including implementations. Although I like this section as each mini-essay is like a two-minute guide to some complex area to get you up to speed - I can't help wonder why it's in a book. This would be much better done as a website. Even so it is valuable as it is.
If you want to use it as a course textbook then there are lots of exercises at the end of every chapter.