The theoretical underpinnings of computing form a standard part of almost every computer science curriculum. But the classic treatment of this material isolates it from the myriad ways in which the theory influences the design of modern hardware and software systems. I have just finished writing a textbook that changes that. The facts:
Automata, Computability and Complexity:
Theory and Applications
If you you have any questions about how to use the book in a class, email me for more information.
A package of supplementary materials has been designed to make it easy to teach from this book. These materials include:
The first two of these can be downloaded at the publisher's web site. To access them, you'll need a Pearson login name and password. If you don't have one, you can get one by requesting one online or by contacting your Pearson/Prentice-Hall representative. If you have any problems doing any of this, email me and I will make sure you get the materials.
The main part of the book is organized in the standard way: it begins with finite state machines and regular languages. Next it covers context-free languages and it contains an optional chapter on context-free parsing techniques. Then it introduces Turing machines and the question of undecidability. Finally, it considers the problem of practical computability by introducing time and space complexity classes. For more detail, see the Table of Contents.
Throughout the book there are links to applications of the key concepts. A substantial appendix describes many of those applications and pointers to this website describe others. The following table summarizes some of the applications that are mentioned: View Table.