Introduction to Algorithms

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Author(s): Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford
Edition: 4
Year: 2022

Language: English
Commentary: Converted PDF
Pages: 1312

Copyright
Preface
I Foundations
Introduction
1 The Role of Algorithms in Computing
1.1 Algorithms
1.2 Algorithms as a technology
2 Getting Started
2.1 Insertion sort
2.2 Analyzing algorithms
2.3 Designing algorithms
3 Characterizing Running Times
3.1 O-notation, Ω-notation, and Θ-notation
3.2 Asymptotic notation: formal definitions
3.3 Standard notations and common functions
4 Divide-and-Conquer
4.1 Multiplying square matrices
4.2 Strassen’s algorithm for matrix multiplication
4.3 The substitution method for solving recurrences
4.4 The recursion-tree method for solving recurrences
4.5 The master method for solving recurrences
★ 4.6 Proof of the continuous master theorem
★ 4.7 Akra-Bazzi recurrences
5 Probabilistic Analysis and Randomized Algorithms
5.1 The hiring problem
5.2 Indicator random variables
5.3 Randomized algorithms
★ 5.4 Probabilistic analysis and further uses of indicator random variables
II Sorting and Order Statistics
Introduction
6 Heapsort
6.1 Heaps
6.2 Maintaining the heap property
6.3 Building a heap
6.4 The heapsort algorithm
6.5 Priority queues
7 Quicksort
7.1 Description of quicksort
7.2 Performance of quicksort
7.3 A randomized version of quicksort
7.4 Analysis of quicksort
8 Sorting in Linear Time
8.1 Lower bounds for sorting
8.2 Counting sort
8.3 Radix sort
8.4 Bucket sort
9 Medians and Order Statistics
9.1 Minimum and maximum
9.2 Selection in expected linear time
9.3 Selection in worst-case linear time
III Data Structures
Introduction
10 Elementary Data Structures
10.1 Simple array-based data structures: arrays, matrices, stacks, queues
10.2 Linked lists
10.3 Representing rooted trees
11 Hash Tables
11.1 Direct-address tables
11.2 Hash tables
11.3 Hash functions
11.4 Open addressing
11.5 Practical considerations
12 Binary Search Trees
12.1 What is a binary search tree?
12.2 Querying a binary search tree
12.3 Insertion and deletion
13 Red-Black Trees
13.1 Properties of red-black trees
13.2 Rotations
13.3 Insertion
13.4 Deletion
IV Advanced Design and Analysis Techniques
Introduction
14 Dynamic Programming
14.1 Rod cutting
14.2 Matrix-chain multiplication
14.3 Elements of dynamic programming
14.4 Longest common subsequence
14.5 Optimal binary search trees
15 Greedy Algorithms
15.1 An activity-selection problem
15.2 Elements of the greedy strategy
15.3 Huffman codes
15.4 Offline caching
16 Amortized Analysis
16.1 Aggregate analysis
16.2 The accounting method
16.3 The potential method
16.4 Dynamic tables
V Advanced Data Structures
Introduction
17 Augmenting Data Structures
17.1 Dynamic order statistics
17.2 How to augment a data structure
17.3 Interval trees
18 B-Trees
18.1 Definition of B-trees
18.2 Basic operations on B-trees
18.3 Deleting a key from a B-tree
19 Data Structures for Disjoint Sets
19.1 Disjoint-set operations
19.2 Linked-list representation of disjoint sets
19.3 Disjoint-set forests
★ 19.4 Analysis of union by rank with path compression
VI Graph Algorithms
Introduction
20 Elementary Graph Algorithms
20.1 Representations of graphs
20.2 Breadth-first search
20.3 Depth-first search
20.4 Topological sort
20.5 Strongly connected components
21 Minimum Spanning Trees
21.1 Growing a minimum spanning tree
21.2 The algorithms of Kruskal and Prim
22 Single-Source Shortest Paths
22.1 The Bellman-Ford algorithm
22.2 Single-source shortest paths in directed acyclic graphs
22.3 Dijkstra’s algorithm
22.4 Difference constraints and shortest paths
22.5 Proofs of shortest-paths properties
23 All-Pairs Shortest Paths
23.1 Shortest paths and matrix multiplication
23.2 The Floyd-Warshall algorithm
23.3 Johnson’s algorithm for sparse graphs
24 Maximum Flow
24.1 Flow networks
24.2 The Ford-Fulkerson method
24.3 Maximum bipartite matching
25 Matchings in Bipartite Graphs
25.1 Maximum bipartite matching (revisited)
25.2 The stable-marriage problem
25.3 The Hungarian algorithm for the assignment problem
VII Selected Topics
Introduction
26 Parallel Algorithms
26.1 The basics of fork-join parallelism
26.2 Parallel matrix multiplication
26.3 Parallel merge sort
27 Online Algorithms
27.1 Waiting for an elevator
27.2 Maintaining a search list
27.3 Online caching
28 Matrix Operations
28.1 Solving systems of linear equations
28.2 Inverting matrices
28.3 Symmetric positive-definite matrices and least-squares approximation
29 Linear Programming
29.1 Linear programming formulations and algorithms
29.2 Formulating problems as linear programs
29.3 Duality
30 Polynomials and the FFT
30.1 Representing polynomials
30.2 The DFT and FFT
30.3 FFT circuits
31 Number-Theoretic Algorithms
31.1 Elementary number-theoretic notions
31.2 Greatest common divisor
31.3 Modular arithmetic
31.4 Solving modular linear equations
31.5 The Chinese remainder theorem
31.6 Powers of an element
31.7 The RSA public-key cryptosystem
★ 31.8 Primality testing
32 String Matching
32.1 The naive string-matching algorithm
32.2 The Rabin-Karp algorithm
32.3 String matching with finite automata
★ 32.4 The Knuth-Morris-Pratt algorithm
32.5 Suffix arrays
33 Machine-Learning Algorithms
33.1 Clustering
33.2 Multiplicative-weights algorithms
33.3 Gradient descent
34 NP-Completeness
34.1 Polynomial time
34.2 Polynomial-time verification
34.3 NP-completeness and reducibility
34.4 NP-completeness proofs
34.5 NP-complete problems
35 Approximation Algorithms
35.1 The vertex-cover problem
35.2 The traveling-salesperson problem
35.3 The set-covering problem
35.4 Randomization and linear programming
35.5 The subset-sum problem
VIII Appendix: Mathematical Background
Introduction
A Summations
A.1 Summation formulas and properties
A.2 Bounding summations
B Sets, Etc.
B.1 Sets
B.2 Relations
B.3 Functions
B.4 Graphs
B.5 Trees
C Counting and Probability
C.1 Counting
C.2 Probability
C.3 Discrete random variables
C.4 The geometric and binomial distributions
★ C.5 The tails of the binomial distribution
D Matrices
D.1 Matrices and matrix operations
D.2 Basic matrix properties
Bibliography
Index