Creating software systems involves more than simply writing a program. It requires creativity and technical excellence. Technical excellence includes the ability to make programs robust and efficient. Efficient algorithms are at the heart of all but the most trivial programs. Programmers, however, seldom think about the algorithms in their programs until they encounter problems. Many programmers do not have a background in algorithm analysis and design and if they do, they don't take the time to find the right algorithm for their needs. Algorithms in a Nutshell helps programmers select, analyze, and implement the right algorithms for their particular needs. It provides just enough mathematics to let the reader understand and analyze algorithm performance. The algorithms in the book are based upon the type of problems they address. Each algorithm is presented in the style of a design pattern - an approach, or plan for how to solve the problem accompanied by the information needed to understand why the algorithm is appropriate, how one might determine why the algorithm is the right one, and implementation tips. This is a major benefit to the reader. Just as design patterns for object-oriented design enable developers to use a common language to describe their designs, we believe that providing a pattern language for algorithms can enable similar communication benefits.