Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely 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 a widely used text in universities worldwide as well as the standard reference for professionals. The second edition featured new chapters on the role of algorithms, probabilistic analysis and randomized algorithms, and linear programming. The third edition has been revised and updated throughout. It includes two completely new chapters, on van Emde Boas trees and multithreaded algorithms, substantial additions to the chapter on recurrence (now called "Divide-and-Conquer"), and an appendix on matrices. It features improved treatment of dynamic programming and greedy algorithms and a new notion of edge-based flow in the material on flow networks. Many new exercises and problems have been added for this edition. As of the third edition, this textbook is published exclusively by the MIT Press.
"As an educator and researcher in the field of algorithms for over two decades, I can unequivocally say that the Cormen et al book is the best textbook that I have ever seen on this subject. It offers an incisive, encyclopedic, and modern treatment of algorithms, and our department will continue to use it for teaching at both the graduate and undergraduate levels, as well as a reliable research reference." - Gabriel Robins, Department of Computer Science, University of Virginia
"Introduction to Algorithms, the 'bible' of the field, is a comprehensive textbook covering the full spectrum of modern algorithms: from the fastest algorithms and data structures to polynomial-time algorithms for seemingly intractable problems, from classical algorithms in graph theory to special algorithms for string matching, computational geometry, and number theory. The revised third edition notably adds a chapter on van Emde Boas trees, one of the most useful data structures, and on multithreaded algorithms, a topic of increasing importance." - Daniel Spielman, Department of Computer Science, Yale University (Daniel Spielman)
" Introduction to Algorithms, the "bible" of the field, is a comprehensive textbook covering the full spectrum of modern algorithms: from the fastest algorithms and data structures to polynomial-time algorithms for seemingly intractable problems, from classical algorithms in graph theory to special algorithms for string matching, computational geometry, and number theory. The revised third edition notably adds a chapter on van Emde Boas trees, one of the most useful data structures, and on multithreaded algorithms, a topic of increasing importance." - Daniel Spielman, Department of Computer Science, Yale University
Thomas H. Cormen is Professor of Computer Science and former Director of the Institute for Writing and Rhetoric at Dartmouth College. He is the coauthor (with Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein) of the leading textbook on computer algorithms, Introduction to Algorithms (third edition, MIT Press, 2009).
Charles E. Leiserson is Professor of Computer Science and Engineering at the Massachusetts Institute of Technology.
Ronald L. Rivest is Andrew and Erna Viterbi Professor of Electrical Engineering and Computer Science at the Massachusetts Institute of Technology.
Clifford Stein is Professor of Industrial Engineering and Operations Research at Columbia University.
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.
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.