This volume gives a comprehensive introduction into the theory of (deterministic) optimization on an advanced undergraduate and graduate level. One main feature is the treatment of both continuous and discrete optimization at the same place. This allows to study the problems under different points of view, supporting a better understanding of the entire field.
Audience: The book can be adapted well as an introductory textbook into optimization theory on a basis of a two semester course; however, each of its parts can also be taught separately. Many exercises are included to increase the reader's understanding.
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 structure: 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.
New branches of complexity theory continue to arise in response to new algorithmic concepts, and its results - such as the theory of NP-completeness - have influenced the development of all areas of computer science.
The topics selected have implications for concrete applications, and the significance of complexity theory for today's computer science is stressed throughout.