3rd Edition. — MIT Press, 2009. — 1312 p. — ISBN 978-0262033848.
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.
FoundationsThe Role of Algorithms in ComputingAlgorithms
Algorithms as a technology
Getting StartedInsertion sort
Analyzing algorithms
Designing algorithms
Growth of FunctionsAsymptotic notation
Standard notations and common functions
Divide-and-ConquerThe maximum-subarray problem
Strassen’s algorithm for matrix multiplication
The substitution method for solving recurrences
The recursion-tree method for solving recurrences
The master method for solving recurrences
Proof of the master theorem
Probabilistic Analysis and Randomized AlgorithmsThe hiring problem
Indicator random variables
Randomized algorithms
Probabilistic analysis and further uses of indicator random variables
Sorting and Order StatisticsHeapsortHeaps
Maintaining the heap property
Building a heap
The heapsort algorithm
Priority queues
QuicksortDescription of quicksort
Performance of quicksort
A randomized version of quicksort
Analysis of quicksort
Sorting in Linear TimeLower bounds for sorting
Counting sort
Radix sort
Bucket sort
Medians and Order StatisticsMinimum and maximum
Selection in expected linear time
Selection in worst-case linear time
Data StructuresElementary Data StructuresStacks and queues
Linked lists
Implementing pointers and objects
Representing rooted trees
Hash TablesDirect-address tables
Hash tables
Hash functions
Open addressing
Perfect hashing
Binary Search TreesWhat is a binary search tree?
Querying a binary search tree
Insertion and deletion
Randomly built binary search trees
Red-Black TreesProperties of red-black trees
Rotations
Insertion
Deletion
Augmenting Data StructuresDynamic order statistics
How to augment a data structure
Interval trees
Advanced Design and Analysis TechniquesDynamic ProgrammingRod cutting
Matrix-chain multiplication
Elements of dynamic programming
Longest common subsequence
Optimal binary search trees
Greedy AlgorithmsAn activity-selection problem
Elements of the greedy strategy
Huffman codes
Matroids and greedy methods
A task-scheduling problem as a matroid
Amortized AnalysisAggregate analysis
The accounting method
The potential method
Dynamic tables
Advanced Data StructuresB-TreesDefinition of B-trees
Basic operations on B-trees
Deleting a key from a B-tree
Fibonacci HeapsStructure of Fibonacci heaps
Mergeable-heap operations
Decreasing a key and deleting a node
Bounding the maximum degree
van Emde Boas TreesPreliminary approaches
A recursive structure
The van Emde Boas tree
Data Structures for Disjoint SetsDisjoint-set operations
Linked-list representation of disjoint sets
Disjoint-set forests
Analysis of union by rank with path compression
Graph AlgorithmsElementary Graph AlgorithmsRepresentations of graphs
Breadth-first search
Depth-first search
Topological sort
Strongly connected components
Minimum Spanning TreesGrowing a minimum spanning tree
The algorithms of Kruskal and Prim
Single-Source Shortest PathsThe Bellman-Ford algorithm
Single-source shortest paths in directed acyclic graphs
Dijkstra’s algorithm
Difference constraints and shortest paths
Proofs of shortest-paths properties
All-Pairs Shortest PathsShortest paths and matrix multiplication
The Floyd-Warshall algorithm
Johnson’s algorithm for sparse graphs
Maximum FlowFlow networks
The Ford-Fulkerson method
Maximum bipartite matching
Push-relabel algorithms
The relabel-to-front algorithm
Selected TopicsMultithreaded AlgorithmsThe basics of dynamic multithreading
Multithreaded matrix multiplication
Multithreaded merge sort
Matrix OperationsSolving systems of linear equations
Inverting matrices
Symmetric positive-definite matrices and least-squares approximation
Linear ProgrammingStandard and slack forms
Formulating problems as linear programs
The simplex algorithm
Duality
The initial basic feasible solution
Polynomials and the FFTRepresenting polynomials
The DFT and FFT
Efficient FFT implementations
Number-Theoretic AlgorithmsElementary number-theoretic notions
Greatest common divisor
Modular arithmetic
Solving modular linear equations
The Chinese remainder theorem
Powers of an element
The RSA public-key cryptosystem
Primality testing
Integer factorization
String MatchingThe naive string-matching algorithm
The Rabin-Karp algorithm
String matching with finite automata
The Knuth-Morris-Pratt algorithm
Computational GeometryLine-segment properties
Determining whether any pair of segments intersects
Finding the convex hull
Finding the closest pair of points
NP-CompletenessPolynomial time
Polynomial-time verification
NP-completeness and reducibility
NP-completeness proofs
NP-complete problems
Approximation AlgorithmsThe vertex-cover problem
The traveling-salesman problem
The set-covering problem
Randomization and linear programming
The subset-sum problem
Appendix: Mathematical BackgroundSummationsSummation formulas and properties
Bounding summations
Sets, Etc.Sets
Relations
Functions
Graphs
Trees
Counting and ProbabilityCounting
Probability
Discrete random variables
The geometric and binomial distributions
The tails of the binomial distribution
MatricesMatrices and matrix operations
Basic matrix properties