Algorithms are at the heart of every nontrivial computer application, and algorithmics is a modern and active area of computer science. Every computer scientist and every professional programmer should know about the basic algorithmic 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 addressed to students and professionals familiar with programming and basic mathematical language. Individual chapters cover arrays and linked lists, hash tables and associative arrays, sorting and selection, priority queues, sorted sequences, graph representation, graph traversal, shortest paths, minimum spanning trees, and optimization. The algorithms are presented in a modern way, with explicitly formulated invariants, and comment on recent trends such as algorithm engineering, memory hierarchies, algorithm libraries and certifying algorithms. The authors use pictures, words and high-level pseudocode to explain the algorithms, and then they present more detail on efficient implementations using real programming languages like C++ and Java. The authors have extensive experience teaching these subjects to undergraduates and graduates, and they offer a clear presentation, with examples, pictures, informal explanations, exercises, and some linkage to the real world. Most chapters have the same basic a motivation for the problem, comments on the most important applications, and then simple solutions presented as informally as possible and as formally as necessary. For the more advanced issues, this approach leads to a more mathematical treatment, including some theorems and proofs. Finally, each chapter concludes with a section on further findings, providing views on the state of research, generalizations and advanced solutions.
This is a concise and modern book on algorithm engineering. It is intended to a be an introduction, though the style makes it seem rather that one professor is trying to impress other professors (Karatsuba's algorithm for multiplication of large numbers as a "motivating example" is perhaps a somewhat idiosyncratic choice). What the book has going for it are its structure and choice of topics, which is indeed well suited for a first (+second?) course on algorithms, the sections on implementation details and practical issues of algorithms, and the fact the the particular implementations presented here are very sophisticated (the authors are, after all, two leading researchers in this field). However, the presentation overall is poor. In many parts, the explanations are long-winded, possibly in a misguided attempt to be informal, but hard to follow. Many things are presented in an unnecessarily general way, which makes it harder to understand the main underlying ideas. Important details are skipped in quite a few places, perhaps deemed obvious by the authors. In conclusion, this is probably not the first textbook on algorithms you want to read, but after having taken a first course, it might give you an interesting second look on the topic.