Most professional programmers that I’ve encountered are not well prepared to tackle algorithm design problems. This is a pity, because the techniques of algorithm design form one of the core practical technologies of computer science. Designing correct, efficient, and implementable algorithms for real-world problems requires access to two distinct bodies of knowledge: • Techniques – Good algorithm designers understand several fundamental algorithm design techniques, including data structures, dynamic programming, depth first search, backtracking, and heuristics. Perhaps the single most important design technique is modeling, the art of abstracting a messy real-world application into a clean problem suitable for algorithmic attack. • Resources – Good algorithm designers stand on the shoulders of giants. Rather than laboring from scratch to produce a new algorithm for every task, they can figure out what is known about a particular problem. Rather than re-implementing popular algorithms from scratch, they seek existing implementations to serve as a starting point. They are familiar with many classic algorithmic problems, which provide sufficient source material to model most any application. This book is intended as a manual on algorithm design, providing access to combinatorial algorithm technology for both students and computer professionals.
“The Algorithm Design Manual by Steven Skiena is aimed at two groups of people: students and professionals. … It is written in an informal style that I found pleasant and engaging. … The book’s unique structure makes it more likely to be immediately useful to the practitioner who has problem to solve and wants to quickly make progress … . the book succeeds admirably. … would be helpful to the student who has never seen this material before. … Overall, I recommend this book warmly.” (Neelakantan Kartha, The Book Review Column, 2011)
“Algorithms are the very heart of computing … . This book is about right for most people. … 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. … If you want to use it as a course textbook then there are lots of exercises at the end of every chapter. Highly recommended.” (Mike James, I Programmer, September, 2009)