I. Fundamental Tools
1. Algorithm Analysis
1.1 Methodologies for Analyzing Algorithms
1.2 Asymptotic Notation
1.3 A Quick Mathematical Review
1.5 Amortization
1.6 Experimentation
2. Basic Data Structures
2.1 Stacks and Queues
2.2 Vectors, Lists, and Sequences
2.3 Trees
2.4 Priority Queues and Heaps
2.5 Dictionaries and Hash Tables
3. Search Trees and Skip Lists
3.1 Ordered Dictionaries and Binary Search Trees
3.2 AVL Trees
3.3 Bounded-Depth Search Trees
3.4 Splay Trees
3.5 Skip Lists
4. Sorting, Sets, and Selection
4.1 Merge-Sort
4.2 The Set Abstract Data Type
4.3 Quick-Sort
4.4 A Lower Bound on Comparision-Based Sorting
4.5 Bucket-Sort and Radix-Sort
4.6 Comparision of Sorting Algorithms
4.7 Selection
5. Fundamental Techniques
5.1 The Greedy Method
5.2 Divide-and-Conquer
5.3 Dynamic Programming
II. Graph Algorithms
6. Graphs
6.1 The Graph Abstract Data Type
6.2 Data Structures for Graphs
6.3 Graph Traversal
6.4 Directed Graphs
7. Weighted Graphs
7.1 Single-Source Shortest Paths
7.2 All-Pairs Shortest Paths
7.3 Minimum Spanning Trees
8. Network Flow and Matching
8.1 Flows and Cuts
8.2 Maximum Flow
8.3 Maximum Bipartite Matching
8.4 Minimum-Cost Flow
III. Additional
9. Text Processing
9.1 Strings and Pattern Matching Algorithms
9.2 Tries
9.3 Text Compression
9.4 Text Similarity Testing
13. NP-Completeness
13.1 P and NP
13.2 NP-Completeness
13.3 Important NP-Complete Problems
13.4 Approximation Algorithms
13.5 Backtracking and Branch-and-Bound
14. Algorithmic Frameworks
14.1 External-Memory Algorithms
14.2 Parallel Algorithms
14.3 Online Algorithms