This is a book about computation, something which is ubiquitous in the modern world. More precisely, it examines computability theory and computational complexity theory. Computability theory is the part of mathematics and computer science which seeks to clarify what we mean by computation or algorithm. When is there a computational solution possible to some question? How can we show that none is possible? How computationally hard is the question...