Algorithms are at the heart of every nontrivial computer application. Therefore every computer scientist and every professional programmer should know about the basic algorithmic toolbox: structures that allow efficient organization and retrieval of data, frequently used algorithms, and basic techniques for modeling, understanding, and solving algorithmic problems.

This book is a concise introduction to this basic toolbox intended for students and professionals familiar with programming and basic mathematical language. We have used sections of the book for advanced undergraduate lectures on algorithmics and as the basis for a beginning graduate level algorithms course. We believe that a concise yet clear and simple presentation makes the material more accessible as long as it includes examples, pictures, informal explanations, exercises, and some linkage to the real world.