Introduction to the Theory of Computation - Sipser, Michael (Cengage Learning)