Skip to main content

Learning Resources

This module is populated from the local chunked books in library/raw/semester-02-algorithms/books. Use this page as a source map, not as an instruction to read everything.

Source Stack

BookRoleHow to use it in this module
The Algorithm Design Manual (Skiena)Primary / problem-drivenDefault escalation for modeling, recognition, and "which algorithm fits this problem"
Introduction to Algorithms (CLRS)Reference / proofs and depthDefault escalation for correctness arguments, running-time derivations, and formal detail on flow and SCCs
Algorithms (Sedgewick)Selective / implementation and visual intuitionUse when you want worked implementations or a different visual framing
Competitive ProgrammingApplied problems and tricksUse when you want compact variants, tricks, and problem-shaped examples
Grokking AlgorithmsAccessible introUse only to repair missing intuition on BFS or Dijkstra - do not rely on it for rigor

Resource Map by Cluster

Cluster 1: Graph Models and Representations

NeedBest local chunkWhy
what a graph isADM: Graph TraversalClean problem-first framing before any algorithm
flavors of graphsADM: Flavors of GraphsNames every model dimension explicitly
list vs matrixCLRS 20.1: Representations of GraphsBest formal treatment of time/space tradeoffs
implementation sideSedgewick: Elementary Graph Algorithms (Part 1)Code-level reinforcement
problem recognitionADM 6.6: Design Graphs, Not AlgorithmsThe whole module's modeling philosophy in one chunk
war-story modelingADM: Getting the GraphShows why the model choice dominates everything after

Cluster 2: Graph Traversals

NeedBest local chunkWhy
BFS definition and correctnessCLRS 20.2: Breadth-First SearchClean invariant-level treatment
BFS applicationsADM 5.7: Applications of BFSShows BFS as a toolbox rather than one routine
DFS definition and timestampsCLRS 20.3: Depth-First SearchBest formal treatment of d/f/edge types
DFS applicationsADM 5.9: Applications of DFSPulls articulation, bridges, topology into one view
topological sortCLRS 20.4: Topological SortShortest correct statement plus proof
SCCCLRS 20.5: Strongly Connected ComponentsKosaraju with proof
SCC (Tarjan variant)Competitive Programming: SCCCompact Tarjan-style implementation

Cluster 3: Shortest Paths

NeedBest local chunkWhy
variant overviewCP 4.4: Single-Source Shortest PathsFastest route to "which algorithm fits"
correctness frameworkCLRS 22.5: Proofs of Shortest-Paths PropertiesCore lemmas used by BFS, Dijkstra, Bellman-Ford
DijkstraCLRS 22.3: Dijkstra's AlgorithmAlgorithm + correctness + running time in one place
Dijkstra intuitionADM 6.3.1: DijkstraProblem-first framing
Dijkstra code walkthroughGrokking: Dijkstra implementationMinimal first-pass implementation
Bellman-FordCLRS 22.1: Bellman-Ford AlgorithmBest formal treatment
negative cyclesCP 4.4.4: SSSP with negative cyclesCompact detection patterns
Floyd-WarshallCLRS 23.2: Floyd-Warshall AlgorithmDP view with clean pseudocode
APSP on sparse graphsCLRS 23.3: Johnson's AlgorithmNecessary for sparse APSP with negative edges

Cluster 4: Minimum Spanning Trees and Greedy on Graphs

NeedBest local chunkWhy
MST frameworkCLRS 21.1: Growing an MSTCut and cycle properties with proofs
Kruskal and PrimCLRS 21.2: Kruskal and PrimBoth algorithms together, same theoretical scaffold
Kruskal's applied viewADM 6.1.2: Kruskal's AlgorithmProblem-first view
union-findADM 6.1.3: Union-FindConcise but complete coverage including analysis
MST variantsADM 6.1.4: Variations on MSTBottleneck, Steiner, second-best
MST applicationsADM: Nothing But Nets war storyShows the modeling step end-to-end

Cluster 5: Network Flow and Matching

NeedBest local chunkWhy
flow networksCLRS 24.1: Flow NetworksFormal definition with capacities
Ford-Fulkerson methodCLRS 24.2: Ford-Fulkerson MethodThe canonical source for residual graphs and augmenting paths
Edmonds-KarpCLRS 24.2: Ford-Fulkerson (Part 3)BFS-based polynomial bound
flow applicationsADM 6.5: Network Flows and Bipartite MatchingBest short survey of modeling tricks
Sedgewick overviewSedgewick: Network FlowDifferent exposition with implementation notes
bipartite matchingCLRS 24.3: Maximum Bipartite MatchingClean reduction to flow
Hopcroft-Karp intuitionCLRS 25.1: Bipartite Matching RevisitedPhase structure and sqrt(V) bound
assignment / weighted matchingCLRS 25.3: Hungarian AlgorithmWhen bipartite matching needs weights

External Resources (Validated)

Lecture Videos and Notes

  • MIT 6.006 Spring 2020, Lecture 9: Breadth-First Search - lecture notes PDF - clean treatment of BFS as shortest paths on unweighted graphs.
  • MIT 6.006 Spring 2020, Lecture 10: Depth-First Search - lecture page - follows naturally from the BFS lecture and introduces edge classification.
  • MIT 6.006 Spring 2020, Lecture 11: Weighted Shortest Paths - lecture notes PDF - Dijkstra and relaxation framed via the triangle inequality.
  • MIT 6.006 Fall 2011, Lecture 13: BFS (Erik Demaine) - YouTube - if you want a video presentation rather than notes.
  • Stanford CS 161 (Virginia Williams / Roughgarden), Lecture 11: Dijkstra's Algorithm - lecture notes PDF - proof-forward treatment of Dijkstra.
  • Stanford CS 161 Winter 2023, Lecture 15: Minimum Spanning Trees - lecture notes PDF - cut property + Kruskal and Prim.
  • Stanford CS 161 course page - schedule - use for additional lecture-note PDFs covering Bellman-Ford and DP.

Reference Articles (cp-algorithms.com)

Reference Textbook (Online)

  • Sedgewick & Wayne, "Algorithms, 4th Edition" booksite - Graphs section and Undirected Graphs. Concise implementations in Java with commentary; useful as a second exposition.

Use Rules

  • If the question is "which algorithm fits this problem," go to ADM first.
  • If the question is "why is this algorithm correct, or how fast," go to CLRS first.
  • If you want a compact implementation you can read straight through, use Sedgewick or cp-algorithms.com.
  • Open one chunk for one concept gap; do not wander through a whole chapter by default.
  • Watch videos only if reading is not working; the MIT lectures are the preferred fallback.
  • Do not add extra resources unless the existing ones have demonstrably failed for a specific concept.