Reference and Selective Reading
You do not need to read the source books front-to-back for this module. Use the concept pages and practice pages first. Open these local chunks only when you need alternate exposition, more worked examples, a rigorous proof, or a deeper exercise lane.
Source Roles
| Source | Role | Why it is here |
|---|---|---|
| The Algorithm Design Manual (Skeena) | Primary teaching source | Problem-first framing; excellent for modeling, algorithm selection, and war stories |
| Introduction to Algorithms (CLRS) | Deep-dive reference | Canonical proofs of correctness and tight running-time analyses |
| Algorithms (Sedgewick) | Implementation reference | Clear code-level views of BFS, DFS, MST, shortest paths, flow, matching |
| Competitive Programming (Halim) | Applied/problem reference | Tricks, variants, and reductions most useful under pressure |
| Grokking Algorithms | Gentle intro | Use only when a concept feels unreachable; it sacrifices depth for intuition |
Read Only If Stuck
Cluster 1: Graph Models and Representations
- ADM: Graph Traversal overview
- ADM: Flavors of Graphs
- ADM: The Friendship Graph
- ADM: Design Graphs, Not Algorithms
- ADM: Graph Data Structures
- CLRS 20.1: Representations of Graphs
- Sedgewick: Elementary Graph Algorithms (Part 1)
- Competitive Programming: Graph
- Competitive Programming: Special Graphs
Cluster 2: Graph Traversals
- ADM: Traversing a Graph
- ADM: Breadth-First Search
- ADM: Applications of BFS
- ADM: Depth-First Search
- ADM: Applications of DFS
- ADM: DFS on Directed Graphs
- ADM: Strongly Connected Components
- CLRS 20.2: Breadth-First Search
- CLRS 20.3: Depth-First Search
- CLRS 20.4: Topological Sort
- CLRS 20.5: Strongly Connected Components
- Sedgewick: Connectivity
- Sedgewick: Directed Graphs
- Competitive Programming: BFS
- Competitive Programming: Finding SCCs
- Competitive Programming: Kosaraju's Algorithm
Cluster 3: Shortest Paths
- ADM: Dijkstra's Algorithm
- ADM: All-Pairs Shortest Paths
- ADM: Dialing for Documents war story
- CLRS 22.1: Bellman-Ford Algorithm
- CLRS 22.2: SSSP on DAGs
- CLRS 22.3: Dijkstra's Algorithm
- CLRS 22.5: Proofs of Shortest-Paths Properties
- CLRS 23.2: Floyd-Warshall Algorithm
- CLRS 23.3: Johnson's Algorithm for Sparse Graphs
- Competitive Programming: SSSP on weighted graphs
- Competitive Programming: SSSP with negative cycles
- Competitive Programming: All-Pairs Shortest Paths
- Competitive Programming: Shortest Path Faster Algorithm
Cluster 4: Minimum Spanning Trees
- ADM: Minimum Spanning Trees
- ADM: Kruskal's Algorithm
- ADM: Union-Find Data Structure
- ADM: MST Variations
- ADM: Nothing But Nets war story
- CLRS 19.1: Disjoint-Set Operations
- CLRS 19.3: Disjoint-Set Forests
- CLRS 19.4: Analysis of Union by Rank with Path Compression
- CLRS 21.1: Growing a Minimum Spanning Tree
- CLRS 21.2: Kruskal and Prim
- Competitive Programming: Minimum Spanning Tree
- Competitive Programming: Prim's Algorithm
- Competitive Programming: MST Applications
Cluster 5: Network Flow and Matching
- ADM: Network Flows and Bipartite Matching
- CLRS 24.1: Flow Networks
- CLRS 24.2: Ford-Fulkerson Method
- CLRS 24.3: Maximum Bipartite Matching
- CLRS 25.1: Maximum Bipartite Matching Revisited
- CLRS 25.3: The Hungarian Algorithm
- Sedgewick: Network Flow
- Sedgewick: Matching
- Competitive Programming: Network Flow
- Competitive Programming: Ford-Fulkerson's Method
- Competitive Programming: Edmonds-Karp's Algorithm
- Competitive Programming: Dinic's Algorithm
- Competitive Programming: Graph Matching
- Competitive Programming: Hopcroft-Karp Algorithm
Optional Deep Dive
- ADM: Chapter Notes - Minimum Spanning Trees - Historical context, Boruvka's algorithm, deterministic linear-time MST
- CLRS 22.4: Difference Constraints and Shortest Paths - Linear-programming view of shortest paths
- CLRS 23.1: Shortest Paths and Matrix Multiplication - Alternative DP formulation for APSP
- CLRS 25.2: The Stable Marriage Problem - Matching in a different setting (Gale-Shapley)
- CLRS 19.4: Analysis of Union by Rank with Path Compression - Inverse-Ackermann amortized bound
- Competitive Programming: Min Path Cover on DAG - Classic non-obvious reduction to bipartite matching
- Sedgewick: Elementary Graph Algorithms (Part 2) - More representation/traversal patterns
- ADM: Graph Traversal Exercises - Additional traversal problem set
Concept-to-Source Map
Each primary concept has one preferred source when you are stuck and one secondary source for a different perspective.
| Primary concept | Best source if stuck | Why this source |
|---|---|---|
| What a graph is | ADM: Flavors of Graphs | Best enumeration of graph flavors (directed, weighted, simple, etc.) with immediate examples |
| Adjacency list vs adjacency matrix | CLRS 20.1: Representations of Graphs | Clean tradeoff table between the two representations |
| Graph problem recognition | ADM: Design Graphs, Not Algorithms | Best short essay on reframing problems as graph problems |
| BFS as level-by-level traversal | CLRS 20.2: Breadth-First Search | Canonical pseudocode plus correctness proof for unweighted shortest paths |
| DFS with discovery/finish times | CLRS 20.3: Depth-First Search | Definitive treatment of edge taxonomy and parenthesis structure |
| Strongly connected components | CLRS 20.5: Strongly Connected Components | Clearest presentation of Kosaraju with a proof |
| Topological sort | CLRS 20.4: Topological Sort | Direct link between DFS finish times and a valid topological order |
| Shortest path problem variants | ADM: Dijkstra's Algorithm | Problem-first framing of which variant fits which scenario |
| Dijkstra's algorithm | CLRS 22.3: Dijkstra's Algorithm | Correctness proof plus full running-time analysis across PQ options |
| Bellman-Ford and negative edges | CLRS 22.1: Bellman-Ford Algorithm | Best account of why ` |
| MST cut and cycle properties | CLRS 21.1: Growing a Minimum Spanning Tree | Generic-MST framing and the cut-property proof Kruskal and Prim both use |
| Kruskal with union-find | ADM: Union-Find Data Structure | Union by rank and path compression with a running-time discussion in plain language |
| Prim with priority queue | CLRS 21.2: Kruskal and Prim | Tightest presentation of Prim alongside Kruskal for direct comparison |
| Max flow and Ford-Fulkerson | CLRS 24.2: Ford-Fulkerson Method | Complete exposition of residual graphs and augmenting paths |
| Max-flow min-cut duality | CLRS 24.2: Ford-Fulkerson Method | Contains the max-flow min-cut theorem and its proof |