To examine, analyze, and manipulate a problem to the point of designing an algorithm for solving it is an exercise of fundamental value in many fields. With so many everyday activities governed by algorithmic principles, the power, precision, reliability and speed of execution demanded by users have transformed the design and construction of algorithms from a creative, artisanal activity into a full-fledged science in its own right. This book is aimed at all those who exploit the results of this new science, as designers and as consumers.
The first chapter is an overview of the related history, demonstrating the long development of ideas such as recursion and more recent formalizations such as computability. The second chapter shows how the design of algorithms requires appropriate techniques and sophisticated organization of data. In the subsequent chapters the contributing authors present examples from diverse areas – such as routing and networking problems, Web search, information security, auctions and games, complexity and randomness, and the life sciences – that show how algorithmic thinking offers practical solutions and also deepens domain knowledge.
The contributing authors are top-class researchers with considerable academic and industrial experience; they are also excellent educators and communicators and they draw on this experience with enthusiasm and humor. This book is an excellent introduction to an intriguing domain and it will be enjoyed by undergraduate and postgraduate students in computer science, engineering, and mathematics, and more broadly by all those engaged with algorithmic thinking.