This textbook is a concise introduction to the basic toolbox of
structures that allow efficient organization and retrieval of data, key
algorithms for problems on graphs, and generic techniques for modeling,
understanding, and solving algorithmic problems. The authors aim for a
balance between simplicity and efficiency, between theory and practice,
and between classical results and the forefront of research. 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,
optimization, collective communication and computation, and load
balancing. The authors also discuss important issues such as algorithm
engineering, memory hierarchies, algorithm libraries, and certifying
algorithms. Moving beyond the sequential algorithms and data structures
of the earlier related title, this book takes into account the paradigm
shift towards the parallel processing required to solve modern
performance-critical applications and how this impacts on the teaching
of algorithms.
The book is suitable for undergraduate and graduate students and
professionals familiar with programming and basic mathematical language.
Most chapters have the same basic structure: the authors discuss a
problem as it occurs in a real-life situation, they illustrate the most
important applications, and then they introduce simple solutions as
informally as possible and as formally as necessary so the reader really
understands the issues at hand. As they move to more advanced and
optional issues, their approach gradually leads to a more mathematical
treatment, including theorems and proofs. The book includes many
examples, pictures, informal explanations, and exercises, and the
implementation notes introduce clean, efficient implementations in
languages such as C++ and Java.