Algorithms have many applications—algorithms are a powerful lens through which the field of Computer Science is viewed in general. Algorithms rarely arrive as a neat, clean package—they are often bundled with messy unnecessities. In attempting to design algorithms for a problem, we must first focus on the correctness of the algorithm, i.e. does it solve the problem, before working on optimizing the algorithm for efficiency. The primary goal of the book is to offer advice on how to identify clean algorithmic problem formulations in complex issues from different areas of computing, and hence, how to design efficient algorithms for the resulting problems.
