- Hardcover: 1184 pages
- Publisher: The MIT Press; 2nd edition (September 1, 2001)
- Language: English
- ISBN-10: 0262032937
- ISBN-13: 978-0262032933
- Product Dimensions: 8 x 2.2 x 9 inches
- Shipping Weight: 4.6 pounds
- Average Customer Review: 572 customer reviews
- Amazon Best Sellers Rank: #210,397 in Books (See Top 100 in Books)
Enter your mobile number or email address below and we'll send you a link to download the free Kindle App. Then you can start reading Kindle books on your smartphone, tablet, or computer - no Kindle device required.
To get the free app, enter your mobile phone number.
Introduction to Algorithms, Second Edition 2nd Edition
Use the Amazon App to scan ISBNs and compare prices.
Fulfillment by Amazon (FBA) is a service we offer sellers that lets them store their products in Amazon's fulfillment centers, and we directly pack, ship, and provide customer service for these products. Something we hope you'll especially enjoy: FBA items qualify for FREE Shipping and Amazon Prime.
If you're a seller, Fulfillment by Amazon can help you increase your sales. We invite you to learn more about Fulfillment by Amazon .
There is a newer edition of this item:
See the Best Books of 2018 So Far
Looking for something great to read? Browse our editors' picks for the best books of the year so far in fiction, nonfiction, mysteries, children's books, and much more.
Customers who bought this item also bought
Customers who viewed this item also viewed
Aimed at any serious programmer or computer science student, the new second edition of Introduction to Algorithms builds on the tradition of the original with a truly magisterial guide to the world of algorithms. Clearly presented, mathematically rigorous, and yet approachable even for the math-averse, this title sets a high standard for a textbook and reference to the best algorithms for solving a wide range of computing problems.
With sample problems and mathematical proofs demonstrating the correctness of each algorithm, this book is ideal as a textbook for classroom study, but its reach doesn't end there. The authors do a fine job of explaining each algorithm. (Reference sections on basic mathematical notation will help readers bridge the gap, but it will help to have some math background to appreciate the full achievement of this handsome hardcover volume.) Every algorithm is presented in pseudo-code, which can be implemented in any computer language, including C/C++ and Java. This ecumenical approach is one of the book's strengths. When it comes to sorting and common data structures, from basic linked lists to trees (including binary trees, red-black, and B-trees), this title really shines, with clear diagrams that show algorithms in operation. Even if you just glance over the mathematical notation here, you can definitely benefit from this text in other ways.
The book moves forward with more advanced algorithms that implement strategies for solving more complicated problems (including dynamic programming techniques, greedy algorithms, and amortized analysis). Algorithms for graphing problems (used in such real-world business problems as optimizing flight schedules or flow through pipelines) come next. In each case, the authors provide the best from current research in each topic, along with sample solutions.
This text closes with a grab bag of useful algorithms including matrix operations and linear programming, evaluating polynomials, and the well-known Fast Fourier Transformation (FFT) (useful in signal processing and engineering). Final sections on "NP-complete" problems, like the well-known traveling salesman problem, show off that while not all problems have a demonstrably final and best answer, algorithms that generate acceptable approximate solutions can still be used to generate useful, real-world answers.
Throughout this text, the authors anchor their discussion of algorithms with current examples drawn from molecular biology (like the Human Genome Project), business, and engineering. Each section ends with short discussions of related historical material, often discussing original research in each area of algorithms. On the whole, they argue successfully that algorithms are a "technology" just like hardware and software that can be used to write better software that does more, with better performance. Along with classic books on algorithms (like Donald Knuth's three-volume set, The Art of Computer Programming), this title sets a new standard for compiling the best research in algorithms. For any experienced developer, regardless of their chosen language, this text deserves a close look for extending the range and performance of real-world software. --Richard Dragan
Topics covered: Overview of algorithms (including algorithms as a technology); designing and analyzing algorithms; asymptotic notation; recurrences and recursion; probabilistic analysis and randomized algorithms; heapsort algorithms; priority queues; quicksort algorithms; linear time sorting (including radix and bucket sort); medians and order statistics (including minimum and maximum); introduction to data structures (stacks, queues, linked lists, and rooted trees); hash tables (including hash functions); binary search trees; red-black trees; augmenting data structures for custom applications; dynamic programming explained (including assembly-line scheduling, matrix-chain multiplication, and optimal binary search trees); greedy algorithms (including Huffman codes and task-scheduling problems); amortized analysis (the accounting and potential methods); advanced data structures (including B-trees, binomial and Fibonacci heaps, representing disjoint sets in data structures); graph algorithms (representing graphs, minimum spanning trees, single-source shortest paths, all-pairs shortest paths, and maximum flow algorithms); sorting networks; matrix operations; linear programming (standard and slack forms); polynomials and the Fast Fourier Transformation (FFT); number theoretic algorithms (including greatest common divisor, modular arithmetic, the Chinese remainder theorem, RSA public-key encryption, primality testing, integer factorization); string matching; computational geometry (including finding the convex hull); NP-completeness (including sample real-world NP-complete problems and their insolvability); approximation algorithms for NP-complete problems (including the traveling salesman problem); reference sections for summations and other mathematical notation, sets, relations, functions, graphs and trees, as well as counting and probability backgrounder (plus geometric and binomial distributions).
From the Publisher
There are books on algorithms that are rigorous but incomplete and others that cover masses of material but lack rigor. Introduction to Algorithms combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.
The first edition became the standard reference for professionals and a widely used text in universities worldwide. The second edition features new chapters on the role of algorithms, probabilistic analysis and randomized algorithms, and linear programming, as well as extensive revisions to virtually every section of the book. In a subtle but important change, loop invariants are introduced early and used throughout the text to prove algorithm correctness. Without changing the mathematical and analytic focus, the authors have moved much of the mathematical foundations material from Part I to an appendix and have included additional motivational material at the beginning.
Top customer reviews
There was a problem filtering reviews right now. Please try again later.
As such it probably earns more than the 3 stars I will give it from my own perspective. My reasons for this are inherent in my own relationship to the topic - as a "user" if you will.
I bought this book in order to dig deeper into my own conceptual understanding of algorithms, working by my myself.
For this purpose I found the book to be quite tedious. Disadvantageous are especially the fetishization of compact representations, a tendency mathematicians are known to have.
It really doesn't pull a lot of punches when it comes to dishing out mathematical expressions for the reader to patiently unfold for themselves in order to really grasp the meaning of the surrounding text - Ingestion of the material can become a true test of perseverance this way.
It also needs to be said that this is one of these books that bears "Introduction" in the title when it works in fact more like an encyclopedic heavyweight 1200 page quasi-complete survey of the field.
I'm writing this so you know what you are getting into. Be sure this is what you're looking for and what you need.
My only complaint is that the binding has completely stated disintegrating after only 9 weeks of use. All of chapters 15 and 16 are completely falling out of my copy (and this is getting worse). Very disappointing as I plan on using it for a long time.
- The introduction (Chapters 1-4) is really good and does a good job setting up all the fundamental concepts of algorithms. I think a lot of people tend to skip over introductions because they think they know all of it already, but this is an introduction that I recommend reading the whole way through.
- The book is a pretty light read (none of the math is too difficult) and each chapter is a good length.
- I think the material on dynamic programming and greedy algorithms was particularly enlightening, and if you read it the whole way through you actually learn how to prove that greedy algorithms work, instead of just being like "let's use a greedy algorithm because it seems right"
- I was able to copy a lot of CLRS code almost verbatim in my programming interviews and pass them.
- The figures are really well done and informative.
- The pseudocode has a lot of one-letter variable names, and while this follows the tradition of pure math, it also makes understanding the algorithms more difficult than it should be.
- Sometimes the pseudocode is not the "easiest" possible pseudocode (for example, merge sort), and I think it would be better if the authors presented a simpler version of the pseudocode first and then extended it to the optimal version. But then I guess CLRS would be even longer than it already is.
- The arrays are 1-indexed, which makes it trickier to convert to code. Also there are some sections of the textbook (the counting sort section) where some of the arrays are 0-indexed and other arrays are 1-indexed, which is just weird.
- I think the material on graphs, particularly the derivations, could be done in a more engaging and intuitive way. The derivations in Chapters 22-24 were a long series of small uninteresting lemmas, instead of a small number of harder, more insightful theorems. I found derivations elsewhere on the internet that were a lot more interesting and built more intuition about why the procedures worked. I feel like the rest of the book is pretty good though, so maybe all the graph stuff was written by a separate person who is not very good at explaining things.