633 of 657 people found the following review helpful
on December 5, 2009
First of all, this is the quintessential book on algorithms. If you want to learn, this is the book to get. The information in the book is awesome and it can make an excellent reference.
Students will need a very strong mathematical background and a strong arm to even think about picking up this book because the it is heavy (both physically and metaphorically). Mastery of discrete math is a must, graph theory, programming, and, combinatorics will also help.
With that said, this book falls short in one MAJOR area, explanations. Too often explanations are left out and left as exercises and there are no solutions to the exercises! Or details are replaced by ambiguous statements such as of "cleary, this works", or "it is easy to see that this ...". I get the concept of learning by doing, really I do, but there should be some kind of solutions so the student can CHECK his/her understanding of the material and sometimes the exercises are not about advanced aspects of a concept, sometimes it is the core material. Even if the solution manual only contained a simple answer without the work. Not only would it help tremendously but the purpose of doing the exercises would be preserved; that is the student getting his/her "hands dirty" and working out a problem.
For the love everything good and pure in this universe, I really wish writers of mathematical books would stop using statements like "clearly this works" or "it is easy to see", "it is obvious" etc. While that may be true for you and your brilliant circle of colleagues, everything is not always clear and obvious to your readers. Save all of that ambiguity for your research paper.
A great book should deliver in two areas; it should challenge and it should inform. The challenge is there, no doubt. However in some ways it fails to inform the reader. The authors should really think about releasing a students solution manual to help students learn better. I take away two stars for the reasons stated about.
246 of 263 people found the following review helpful
on August 29, 2011
I'm a professor of Computer Science at a respected teaching university, and have been the principal instructor of our introductory algorithms class for the past several years. I used Cormen (doesn't *everyone*?) for a year or two, but have finally relegated it to recommended-text status.
On the plus side, the text is, as my review title says, magisterial. It covers the field comprehensively and authoritatively. When one of the authors is the "R" in RSA, and others are well-known names, you can count on the text's expertise and accuracy. I've never found an error in this text.
BUT.... The pedagogy needs work. Explanations tend to jump too quickly to pure mathematical notation, and there are often insufficient concrete examples. The pseudocode has one-letter variable names that appear at times to be randomly generated :). At least the latest edition fixes what was a baffling indentation style. If you took a sample of 100 CS undergrads and asked them to learn algorithms principally from this text, I'd venture a guess that only the 10 brightest could do so. And even they'd be baffled at times.
I apologize for having to offer such an "emperor is naked" review to such a highly respected work, but it's time to consider more carefully pedagogical texts in the undergrad market.
151 of 171 people found the following review helpful
An algorithm is nothing more than a set of computational steps that transform a specific input into a desired output. From that definition, there are plenty of books on the market that are "cookbooks" of algorithms and will enable you to do just that - transform specific inputs into outputs, complete with source code, and with no real depth of understanding of your own required. However, to be a computer scientist versus a programmer, you need to know what makes an efficient algorithm, why is a particular algorithm efficient, what kinds of common data structures are involved in various computing problems, how to traverse those data structures efficiently, and a notation for analyzing various algorithms. This book will help you learn all of that. The study of the theory of algorithms is not to be undertaken lightly, and I don't recommend you attempt to self-study such a complex subject with such strong mathematical underpinnings. In fact, this book is really aimed at graduate computer science students and is often on the reading list of Ph.D. qualifying examinations in that field.
For students of graph theory, you might find your knowledge solidly supplemented by the material in chapters 22 through 26 on graph algorithms. The last section of the book, "Selected Topics", goes over various specific algorithms from many fields using the knowledge of algorithm design and analysis you have learned up to this point in the book. Throughout, the text is very clear, and there are plenty of instructive diagrams and pseudocode.
One of the most interesting parts of the book is the chapter on NP-completeness. This is the study of problems for which no efficient algorithm has ever been found. These problems are interesting for two reasons. The first being that even though an efficient algorithm has never been found, there is no proof that one cannot exist. Second, if an efficient algorithm exists for one of them, then an efficient algorithm exists for all. Thus, if you are ever called upon to write an efficient algorithm for an NP-complete problem, you will be involved in a long fruitless search if you do not recognize the problem as NP-complete. If you can show the problem is NP-complete, you can go about producing an algorithm that gives a good solution, but not the best possible solution. This kind of knowledge is what separates a computer scientist from a mere programmer, and is one of many reasons to study this book's contents. I highly recommend this book to anyone who truly wants to be called a computer scientist.
To get the most from this book you should already be familiar with discrete mathematics and combinatorics, as this book makes heavy use of these subjects. Because this book contains no solutions to any of the exercises, might I suggest "Problems on Algorithms" by Ian Parberry as a companion to this book. It has a little bit of tutorial and a lot of exercises, many unsolved, but some with hints and others with solutions. Also, for more basic material, you might look at "Schaum's Outline of Discrete Mathematics". It's very inexpensive and can almost stand alone as a tutorial on the mathematics you need to know to succeed at understanding this book. The table of contents is not shown for this third edition of the book, so I supply that information next:
Table of Contents
1 The Role of Algorithms in Computing
2 Getting Started
3 Growth of Functions
5 Probabilistic Analysis and Randomized Algorithms
II Sorting and Order Statistics
8 Sorting in Linear Time
9 Medians and Order Statistics
III Data Structures
10 Elementary Data Structures
11 Hash Table
12 Binary Search Trees
13 Red-Black Trees
14 Augmenting Data Structures
IV Advanced Design and Analysis Techniques
15 Dynamic Programming
16 Greedy Algorithms
17 Amortized Analysis
V Advanced Data Structures
19 Binomial Heaps
20 Fibonacci Heaps
21 Data Structures for Disjoint Sets
VI Graph Algorithms
22 Elementary Graph Algorithms
23 Minimum Spanning Trees
24 Single-Source Shortest Paths
25 All-Pairs Shortest Paths
26 Maximum Flow
VII Selected Topics
27 Sorting Networks
28 Matrix Operations
29 Linear Programming
30 Polynomials and the FFT
31 Number-Theoretic Algorithms
32 String Matching
33 Computational Geometry
34 NP Completeness
35 Approximation Algorithms
60 of 67 people found the following review helpful
on December 7, 2009
Format: HardcoverVerified Purchase
I have studied algorithms using several books, and this is by far the best. It is comprehensive (twice as thick as the average book), you can find everything you are looking for. It is pedagogical too, always starts with simpler problems. I have also used the first edition for some time, and can say that this one is much improved as a result of feedback from instructors and students. Everything from pseudocode to page layout has been touched in some way, and made easier to read and understand for the student.
The only negative thing about this book is the lack of solutions to exercises. The authors must have realized the importance of this. They published a small subset of solutions on the web, but that is inadequate.
35 of 41 people found the following review helpful
on September 18, 2011
I must say I don't understand why this book has so many good reviews.
When presenting something new to a student, the first thing to do is to give a simple example. Only then should the theory and theorems appear as only then do we even know what exactly is being discussed.
This book takes the approach that you hit the student with a general theorem first. Then later, comes an example and often that too isn't complete or basic and points to homework problems. An example of this muddy style is the "task-scheduling problem as a matroid." The cause of this problem may be that the book has four authors, some of whom may be very poor in communicating clearly and simply.
Some chapters though (the one on Linear Programming) were very well written I must say, though to the end of this chapter, it once again became very concise and abstruse. It seemed as if two authors--one a clear writer and another with a very terse style, collaborated on this chapter.
In short, while this book is a good reference for those that already know the algorithm involved, it is not good for people seeing the algorithm for the first time. I am at a loss as to why the word "Introduction" is in the title. As others have also said, the book is summed up by the words "bad pedagogy."
And too often, the tone is that "this is so obvious, we don't need to explain more." And in spite of this terseness, the book takes an astonishing 1292 pages!
All in all, an avoidable TOME.
11 of 12 people found the following review helpful
on May 5, 2011
Format: HardcoverVerified Purchase
Algorithms is the type of subject that can make you put your hand on your head in frustration due to the technical nature of the subject. This book does a terrific job of demystifying topics and giving you a clear and concise notion of the fundamentals which make the algorithm work. In turn, the authors have gotten me to love learning about algorithms. Every chapter is a new challenge, and the authors are there to help guide you the whole way.
Cormen's Algorithms book is highly regarded as one of the best algorithms book out there, and though I have no experience with any other algorithms texts, it's fairly obvious to me now why that is true. Cormen's book is mostly well-organized, is easily readable (especially with all the great pictures and examples!), and is best used as a workbook text. Pretty much all of the chapters rely on chapters previous to some degree, and the exercises especially reflect this behavior as many of them require you to you optimization learned in previous chapters to modify current algorithms. Overall, I have very few complaints, and this text has been one of my favorites throughout college.
My first complaint is that the text begins by throwing you in to the analysis of insertion sort before defining any notation or mathematics used to analyze the algorithm. While I understand that the idea is to introduce you to what algorithm analysis really is, the chapter felt more confusing than helpful. I would much rather the book started with background information first.
Secondly, the mathematical chapters are very brief and vague. Chapters 4 and 5 are particularly bad due to the lack of depth, explanation, and clarity. The examples are far from satisfactory, particularly those regarding probability and recurrences. While these chapters had excellent problem sets, I needed an external source to help me deal with cases not covered in the text. One example of a topic I had trouble with was solving for the number of levels a recurrence tree has. The book only presents trivial examples of this while the problem sets ask for significantly more work. One or two worked out examples, even if they were only included in the selected answers, would have been very helpful.
The last issue that I had with the book was the lack of explanation given in the analysis of specific algorithms. For example, the runtime analysis of Kruskal's minimum spanning tree algorithm felt far from intuitive. The author does not take enough time to explain where some analysis techniques came from and why they were used. Though many of the algorithms are discussed in enough detail, there are several more advanced algorithms which feel like they were thrown into the text without enough care.
Despite all these issues I've been very pleased with my purchase and the time I've invested in it. I would recommend the book to anyone with interest in algorithms. While some knowledge of basic mathematical analysis and probability theory would be helpful, it's pretty easy to get by without either of these. Though the explanation of some of the more technical parts of the book is lacking, the authors do a great job of translating complicated psuedo-code and notational necessities into something which is very easy to understand
7 of 7 people found the following review helpful
on May 11, 2014
Format: HardcoverVerified Purchase
I just finished an undergrad-level college course that used this book (3rd edition). Extremely in-depth on the topics that it covers, using formal mathematical notation throughout to present the algorithms. As many others have said, it's very math-heavy and I'd recommend that anyone thinking about learning from this book should already have a strong background in especially discrete math, but should also have some familiarity with single-variable calculus and probability. The appendices do a brief math review (on discrete math & probability) but are not a substitute for learning the math for the first time.
The book is essentially best described as a detailed, mathematically-oriented analysis of algorithmic theory and covers a wide variety of topics. Proofs of various concepts are built up with lemmas throughout as well, and many of the exercises in the book often ask for a proof to show that something is correct. The authors do provide a Solutions file online, but for only some exercises up through chapter 26 when it has 35 chapters.
The book more than "combines rigor and comprehensiveness" as it says on the back, and it will almost certainly be an indispensable reference in the future for anyone planning to work (or is already working) in a computer science-related field, but it also has some notable drawbacks as well, not the least of which is the title. A genuine "Introduction" to algorithms would've been either more accessible (with less math) or substantially shorter (at approximately half the page count or less), or both. As it is, the book's title could have more accurately reflected its density with something more like "Algorithm Theory In Depth" or "Algorithm Analysis". Fortunately the book includes an extensive index that lists out nearly every sub-topic that it covers for quick reference.
Some of the notable drawbacks include:
- It often shows that it was written by 4 different authors, as some topics are explained better than others (the graph algorithms overall were explained well) while others lacked sufficient clarity (recurrence relations, sorting in general, greedy algorithms, amortized analysis, NP completeness).
- Like many other academia-oriented textbooks, it suffers from overuse of the infamous pretentious phrase "it is easy to see," paticularly when it's not easy to see what the author is talking about.
- Chapter 4 suffers from a lack of explanation on solving recurrences by the recursion-tree and substitution methods, with insufficient examples.
- No exercises or content to help with actually implementing an algorithm in a programming language, because putting an algorithm into practice should be just as important as the theory.
- The authors write in the preface that the book is aimed at teachers, students, professionals, & their colleagues (!). A book that attempts to cater to both students and the authors' colleagues at the same time would appear to be paradoxical, right?
- Dry, dispassionate wording that fails to inspire the reader to continue reading the text, and continue learning past this book as well.
Despite the drawbacks it's a good, very dense & in-depth reference on the subject, but for those learning algorithms for the first time, I'd recommend one of these other books first that explain the concepts more clearly in plain English and then coming back to CLRS afterwards. Just pick the one based on the language you're most familiar with. I own copies of all of these books btw (a few in digital formats, not all of them in print) and can personally speak to their quality in offering clearer, easier-to-understand explanations of algorithms.
- Data Structures In C, by Noel Kalicharan
- Data Structures and Algorithms in C++ (3rd Edition), by Adam Drozdek (can't speak to the newer 4th Edition)
- Data Structures and Algorithms in Java (2nd Edition), by Robert Lafore
- Algorithms (4th Edition), by Robert Sedgewick & Kevin Wayne (uses Java)
- Problem Solving with Algorithms and Data Structures Using Python SECOND EDITION, by Bradley Miller & David Ranum
If you're a college student that has to buy this book for your algorithms class like I had to, there are a variety of free resources online that should make the subject easier to learn along the way, like the MIT Open CourseWare resources on algorithms (course numbers 6.006 and 6.046), StackOverflow, GeeksforGeeks, and the sheer quantity of lecture slides available online at other colleges & universities. Coursera regularly has a free class on the subject as well.
9 of 10 people found the following review helpful
on August 3, 2011
Format: HardcoverVerified Purchase
The CLRS Algorithms book is the definitive text on the subject, and for good reason. If you are using this book in a university setting, look no futher - it's excellent, and quite reasonably priced for a textbook. I have no true qualms with the content. That said, there are several flaws with this text:
1) The text provides few examples and relies far too much on its problems as a teaching aid. There is no solution manual available for people trying to teach or refresh themselves from this text, or for students looking to check their work.
2) Having owned the First Edition, dealt with the Second Edition, and now owned the Third Edition, I can say that physically, the Third Edition is a step backwards. The binding feels considerably more fragile.
That being said, this is still an excellent book and is highly recommended.
17 of 21 people found the following review helpful
on March 5, 2013
Format: Kindle Edition
It is important to note that this review is ***SPECIFICALLY*** for the Kindle Edition of the book.
I would recommend the printed edition of the book as a useful reference for anybody
dealing with algorithms either in their studies or in their daily job.
I purchased the "Kindle edition" with the idea of having the book on hand either on
my Kindle or on a Google tablet. Unfortunately, this book cannot be loaded to your Kindle.
The only way to read it appears to be to view it on your Windows or Mac computer
using applications specific to these platforms.
Thus, the book is not accessible away from your Windows or Mac machine. In particular, if
you work under Linux, you are out of luck unless you also install Windows on your machine.
Disk space being pretty precious on notebooks with solid state memory, this is not a good
I was hoping that one could use the Kindle Cloud Reader to view the book. That would
be an acceptable solution compatible with any of the operating systems. But for some
reason it is not possible to view the book in the Cloud Reader. So I had to return the book
for a refund.
Just in case anybody from Amazon is reading this: please publish books that are available
across the whole spectrum of your readers. If this book ever becomes available on Kindle
or at least in the Cloud Reader, I would be happy to purchase it then.
6 of 6 people found the following review helpful
on November 14, 2013
Format: HardcoverVerified Purchase
This book was written for professors and PhD teaching assistants, but not for the student. The best analogy I can think of is trying to learn math theorems by reading their formal proofs. It's cryptic, difficult to understand, and you'll need to browse around online for better explanations. CLRS is a great reference book, but a terribly abstruse and incomprehensible book for student that are starting to learn algorithms. If you are new to computer algorithms I suggest reading some books with titles along the lines of "Algorithms for Dummies" or somesuch before tackling the CLRS book.