The boundary between physics and computer science has become a hotbed of interdisciplinary collaboration. In this book the authors introduce the reader to the fundamental concepts of computational complexity and give in-depth explorations of the major interfaces between computer science and physics.