Author: Steven S. Skiena
Publisher: Springer, 2008 (2nd Edition) Pages: 736 ISBN: 9781848000698 Aimed at: Practising developers and academic environment Rating: 5 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 miniessay is like a twominute 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.
Highly recommended.
