Sadly, the second edition misses a great deal of the first edition. Many chapters were removed. Important lemmas and theorems are missing.
I would gladly exchange my second edition for the first one, if it wasn't out of print.
J.
The topics of complexity classes and NP-Completeness, as well as the chapter on Turing Machines are rather succint and do not cover the full depth. Papadimitriou's "Computational Complexity" does a better job in this respect, even though it is not at all flawless. Some might say that there is a reason why this book is introductory, but I argue that instead of doing a poor job, the authors should have maybe just made another book dealing with the above-mentioned topics.
PS: My professor told me that the first edition was much better - maybe you could find it somewhere in the library, if interested.
I would give four stars, should I keep in heavy account the radical changes they made over the first edition and that includes the removal of some stuff, important on my opinion. But ... this is just my opinion, and since it is a very well written and informative book (rich of many details that other texts lack of) and surely one of the bests in the area (I've had 4-5 books in my hands for this course), that's why I gave it 5 stars.
The authors seem to have assumed that the more words they use to explain a concept, the easier it is to understand. Unfortunately the reverse is often true.
For instance, in the beginning of the chapter on Turing machines is an extremely long, drawn-out example of an undecidable problem. The example is based on a C program that tries to solve Fermat's last theorem and prints "hello, world" when it finds an answer. If this sounds weird to you, you are not alone. I dare anyone who doesn't already comprehend undecidability to be enlightened by this example as it drags on for nearly 10 pages.
That said, overall the book does a respectable job of presenting the material, and if you are patient enough to muddle through the murkier sections you will gain a solid understanding. I especially like the fact that solutions to selected exercises are available on the authors' web site.
But if you have a choice, start with the Sipser book as an introduction, and pick up a used copy of the first edition of Hopcroft and Ullman to use as a reference. Use this second edition as a backup, for alternative explanations of key concepts, or for a broader set of exercises and problems.
Hopcroft & Ullman wrote the classic text way back in 1969, and then
revised it in 1979. It was pretty much the standard text the world
over for an introduction to the theory of computation.
But over the last two decades, more and more people have been studying
Computer science, and many of them have no time for theory and
formalism and all the 'dry stuff' ..........
The authors point out that because of such reasons and also because
nowadays there's little research in the theory of computation per se,
and more in its applications, they've written a book to cater to today's
students.
Which, in other words, means they've simplified the presentation, tried
to provide intuition whenever possible, given lots more examples and
done away with some of the more difficult material.
This approach puts the book into direct competition with Michael Sipser's
excellent 'Introduction to the theory of computation', a contest it
cannot win, though it might be a respectable second.
Almost all topics are motivated by giving examples of how they're
related to applications in the 'real world', and similar to
Sipser's 'proof idea' approach, the authors first present a topic
informally and then formally, thus gently leading the reader to
the formal proofs.
This book sets out to do pretty much the same as what Sipser's book
does, ie to provide a readable, user-friendly introduction to the
theory of computation with lots of examples and intuitive approach
to problems wherever possible, but Sipser's already done an
'optimal' job.
Moreover, this book tries to be 'chatty', which i'm afraid is just
not the authors' style - the 'economy of expression', which has long
which has long been the hallmark of the legendary textbooks by
Aho,Hopcroft and Ullman, is sadly missing here.
Which means that this may not be the book for you if you're pressed
for time - but on the other hand, if you want to led gently to the
proofs and results with lots of examples and motivation, then this
might be just the book for you.
So all in all, it definitely worth a read - in fact, i'd say
it's still among the top textbooks around.
In fact, i would suggest that you read both this and Sipser, if you
have the time. Otherwise Sipser's the better choice for most of the
part, though it may not cover all the topics you need.
And if you're comfortable with a terse, concise & rigorous
presentation, then the earlier edition of this book is still
unbeatable - and you'll surely need it if you want to pursue research
in this area.
Also, I found the approach "Example->Informal Def->Formal Def->Proof" very good, and should be used in more textbook. This way, the readers will have the idea of what they're going to study, what for, and why, instead of pointlessly studying something, forget it, and realize how important it is later (this happened to a lot of people, though). A lot of useful and interesting Theorems were also introduced.
However, there're things missing in this edition. For example, the Greibach Normal Form (GNF) for the Context-Free Grammars, which was covered in the 1st edition. I'd talked to the professor who taught the FLAT class I took, and he doesn't seem to like this edition either. He said something like, it is of course easier to understand, but something had been left out. So, he still prefered the 1st edition. (Well, he is a very good researcher in Computation Theory and is now writing a book on Term Rewriting System, another model of computation, which will be published by Springer-Verlag. Don't know when, though. So, this edition is probably too easy for him :-)
I, on the other hand, think that this 2nd edition is good on its own ground. It made the subject of Computation Theory easier and more accessible to wider range of people. (You still have to "think" and have Math knowledge anyway).
Also check out Michael Sipser's book on Computation Theory. I think that one is somewhat better than this one. It uses lesser Math (don't get me wrong, I like Math), and clearer explanations.
Also look for the first edition in Library, used book stores, or wherever you can. That one is definitely a classic, and cannot be replaced by the 2nd edition. I agree with one reviewer here, so bad that this was a new edition, rather than a new book....
I came to this book fifteen years ago as a grad student after reading Lewis and Papadimitriou (which is good, but overly detailed on notation where context would suffice), used it as a professor teaching automata theory at Carnegie Mellon, and now use it as a software engineer for a speech recognition company that builds grammars.
I think, this is the way scientific books for non-experts, that like to become experts, should be written.
Although my mathematical background is very bad, I had no problems reading this book. I prefer more pages for one conclusion (with examples and good explanation) than the Theorem -> proof -> conclusion scheme found unfortunately in many books.
This book can be read like a novella!
Keep up the good work: HOPCROFT / ULLMAN / MOTWANI
THIS BOOK IS EXCELLENT !!!
Additionally, there is a vast insufficiency of examples and exercises in this book. Repetition is learning, and to be able to leave with a functional understanding of the concepts, students need to have a variety of illustrative problems available. The exercises in this book are weak at best. Solutions to all exercises must be provided if there is to be any benefit to working through them in the first place.
The fact that this book is the best available introductory text for this subject only shows that there is plenty of room for some ascendant computer science faculty to write a well written, well organized, and amply illustrated, replacement.
In the second edition, the authors have added a few chapters near then end of the book on topics that simply did not exist twenty years ago (eg, there is a treatment of randomization).
At the same time, I find that the new edition is more readable for an undergrad. The introductory chapters expect less from students coming into contact with CS Theory for the first time. There are far more diagrams and sidebars and the overall tone of the book is far less formal.
On the one hand, this book has the potential to become the canonical undergrad text on Theory of Computation, I find that it has the feeling of a book that would appeal to undergrads much more readily than Kozen (which tends to intimidate students by the density of the material it manages to pack per page).
On the other hand, somehow I still prefer H&U1. One gets the feeling from H&U2 that it tries to hide something from students, whereas H&U1 pulled no punches.
And the cover art on H&U1 made it really distinctive (ala the cover of the Dragon Book), whereas H&U2 looks pretty much like any other modern textbook.
It's sad that H&U2 is a second edition of the book, rather than an entirely new book. It would have been wonderful to have both books in print as they serve somewhat orthogonal roles.
As a reference book, however, it is very good. It is extremely concise which makes it easy to zoom in on definitions and theorems without having to wade through explanations.
If you are taking a course in CT and this is the text you are using, then I suggest either getting Sipser's book or hope you have a really good prof!
It's very simple: Don't use it if _____, and do use it if ____.
Do NOT even THINK of buying this book:
1. If this is going to be your first brush with formal languages and the theory of computation.
2. If you need to get motivated to learn the subject, and you need that "first grasp" on it.
3. If you're taking a first course in the subject, and if you have an IQ below 130!
On the other hand,
You MUST buy this book:
1. If you already have some background, and you want a larger picture.
2. If you will often need an authoritative source for proofs etc.
3. If you need a reference for formalizing concepts touched on elsewhere.
I have both versions of the book and I'd like recommend every computer science student spend some time on reading it.
Conclusion: buy this book and keep it on your shelf, with the other essential references, but if you want to *learn* the material, look elsewhere -- for example, Michael Sipser's excellent new textbook, _Introduction to the Theory of Computation_.