This classic book on formal languages, automata theory, and computational complexity has been updated to present theoretical concepts in a concise and straightforward manner with the increase of hands-on, practical applications. This new edition comes with Gradiance, an online assessment tool developed for computer science.

Gradiance is the most advanced online assessment tool developed for the computer science discipline. With its innovative underlying technology, Gradiance turns basic homework assignments and programming labs into an interactive learning experience for students. By using a series of “root questions” and hints, it not only tests a student’s capability, but actually simulates a one-on-one teacher-student tutorial that allows for the student to more easily learn the material. Through the programming labs, instructors are capable of testing, tracking, and honing their students’ skills, both in terms of syntax and semantics, with an unprecedented level of assessment never before offered.

The best theoretical computer science book out there.

This book is a one stop solution to your theoretical computer science needs (at least, as an introduction). If you're interested in language theory, deterministic / non deterministic finite state auto ...continue

This book is a one stop solution to your theoretical computer science needs (at least, as an introduction). If you're interested in language theory, deterministic / non deterministic finite state automata design, grammars and regular languages, computational complexity (temporal and spatial complexity), this the book for you. The formal notation used in the book is not the heaviest ever seen for this kind of subject, so it remains comprehensible (assumed it's not your first exposition to this discipline). I found it particularly interesting starting from chapter 8, when it covers turing machines, indecidibility in chapter 9 and intractability in chapter 10.
All in all, it's a good introduction to these concepts. I give it 4 stars because some proofs could have been easier, but this is not a big problem. The P and NP classes of problems are wonderfully explained. We are speaking about a book every computer scientist out there should have on his/her shelf. Those who consider this book extremely hard and difficult is because of their lack of fundamental knowledge in computer science. Of course, this is not the first book you should read on the subject. But be assured, this book will give you what it promises: a good knowledge about languages theory, indecidibility and intractability of problems.