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, and substantial additions to the chapter on recurrences (now called "Divide-and-Conquer"). 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. Table of Contents I Foundations Introduction 1 The Role of Algorithms in Computing 2 Getting Started 3 Growth of Functions 4 Divide-and-Conquer 5 Probabilistic Analysis and Randomized Algorithms
II Sorting and Order Statistics Introduction 6 Heapsort 7 Quicksort 8 Sorting in Linear Time 9 Medians and Order Statistics
III Data Structures Introduction 10 Elementary Data Structures 11 Hash Tables 12 Binary Search Trees 13 Red-Black Trees 14 Augmenting Data Structures
IV Advanced Design and Analysis Techniques Introduction 15 Dynamic Programming 16 Greedy Algorithms 17 Amortized Analysis
V Advanced Data Structures Introduction 18 B-Trees 19 Fibonacci Heaps 20 Van Emde Boas Trees 21 Data Structures for Disjoint Sets
VI Graph Algorithms Introduction 22 Elementary Graph Algorithms 23 Minimum Spanning Trees 24 Single-Source Shortest Paths 25 All-Pairs Shortest Paths 26 Maximum Flow
VII Selected Topics Introduction 27 Multithreaded Algorithms 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
VIII Appendix: Mathematical Background Introduction A Summations B Sets, Etc. C Counting and Probability D Matrices Bibliography Index