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"

A comprehensive update of the leading algorithms text, with new material on matchings in bipartite graphs, online algorithms, machine learning, and other topics. Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. It covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers, with self-contained chapters and algorithms in pseudocode. Since the publication of the first edition, Introduction to Algorithms has become the leading algorithms text in universities worldwide as well as the standard reference for professionals. This fourth edition has been updated throughout. New for the fourth edition • New chapters on matchings in bipartite graphs, online algorithms, and machine learning • New material on topics including solving recurrence equations, hash tables, potential functions, and suffix arrays • 140 new exercises and 22 new problems • Reader feedback–informed improvements to old problems • Clearer, more personal, and gender-neutral writing style • Color added to improve visual presentation • Notes, bibliography, and index updated to reflect developments in the field • Website with new supplementary material

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

Language: English
Commentary: Vector PDF
Pages: 1312
City: Cambridge, MA
Tags: Machine Learning;Algorithms;Data Structures;Number Theory;Dynamic Programming;Graph Algorithms;Hash Functions;Linear Programming;Algorithms Design Techniques;Greedy Algorithms;Divide and Conquer Algorithms;Disjoint Sets ADT;Algorithm Analysis;B-Trees;Algorithm Complexity;Approximation Algorithms;Randomized Algorithms;Sorting Algorithms;Minimum Spanning Trees;NP-Hardness;String Algorithms;Heapsort;Quicksort;Red-Black Trees;Amortized Analysis;Parallel Algorithms;Online Algorithms

Contents
Preface
Part I Foundations
Introduction
1 The Role of Algorithms in Computing
1.1 Algorithms
1.2 Algorithms as a technology
Problems
Chapter notes
2 Getting Started
2.1 Insertion sort
2.2 Analyzing algorithms
2.3 Designing algorithms
Problems
Chapter notes
3 Characterizing Running Times
3.1 O-notation, Ω-notation, and Θ-notation
3.2 Asymptotic notation: formal definitions
3.3 Standard notations and common functions
Problems
Chapter notes
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
Problems
Chapter notes
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
Problems
Chapter notes
Part 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
Problems
Chapter notes
7 Quicksort
7.1 Description of quicksort
7.2 Performance of quicksort
7.3 A randomized version of quicksort
7.4 Analysis of quicksort
Problems
Chapter notes
8 Sorting in Linear Time
8.1 Lower bounds for sorting
8.2 Counting sort
8.3 Radix sort
8.4 Bucket sort
Problems
Chapter notes
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
Problems
Chapter notes
Part 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
Problems
Chapter notes
11 Hash Tables
11.1 Direct-address tables
11.2 Hash tables
11.3 Hash functions
11.4 Open addressing
11.5 Practical considerations
Problems
Chapter notes
12 Binary Search Trees
12.1 What is a binary search tree?
12.2 Querying a binary search tree
12.3 Insertion and deletion
Problems
Chapter notes
13 Red-Black Trees
13.1 Properties of red-black trees
13.2 Rotations
13.3 Insertion
13.4 Deletion
Problems
Chapter notes
Part 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
Problems
Chapter notes
15 Greedy Algorithms
15.1 An activity-selection problem
15.2 Elements of the greedy strategy
15.3 Huffman codes
15.4 Offline caching
Problems
Chapter notes
16 Amortized Analysis
16.1 Aggregate analysis
16.2 The accounting method
16.3 The potential method
16.4 Dynamic tables
Problems
Chapter notes
Part 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
Problems
Chapter notes
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
Problems
Chapter notes
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
Problems
Chapter notes
Part 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
Problems
Chapter notes
21 Minimum Spanning Trees
21.1 Growing a minimum spanning tree
21.2 The algorithms of Kruskal and Prim
Problems
Chapter notes
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
Problems
Chapter notes
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
Problems
Chapter notes
24 Maximum Flow
24.1 Flow networks
24.2 The Ford-Fulkerson method
24.3 Maximum bipartite matching
Problems
Chapter notes
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
Problems
Chapter notes
Part 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
Problems
Chapter notes
27 Online Algorithms
27.1 Waiting for an elevator
27.2 Maintaining a search list
27.3 Online caching
Problems
Chapter notes
28 Matrix Operations
28.1 Solving systems of linear equations
28.2 Inverting matrices
28.3 Symmetric positive-definite matrices and least-squares approximation
Problems
Chapter notes
29 Linear Programming
29.1 Linear programming formulations and algorithms
29.2 Formulating problems as linear programs
29.3 Duality
Problems
Chapter notes
30 Polynomials and the FFT
30.1 Representing polynomials
30.2 The DFT and FFT
30.3 FFT circuits
Problems
Chapter notes
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
Problems
Chapter notes
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
Problems
Chapter notes
33 Machine-Learning Algorithms
33.1 Clustering
33.2 Multiplicative-weights algorithms
33.3 Gradient descent
Problems
Chapter notes
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
Problems
Chapter notes
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
Problems
Chapter notes
Part VIII Appendix: Mathematical Background
Introduction
A Summations
A.1 Summation formulas and properties
A.2 Bounding summations
Problems
Appendix notes
B Sets, Etc.
B.1 Sets
B.2 Relations
B.3 Functions
B.4 Graphs
B.5 Trees
Problems
Appendix notes
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
Problems
Appendix notes
D Matrices
D.1 Matrices and matrix operations
D.2 Basic matrix properties
Problems
Appendix notes
Bibliography
Index