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 teaching sourceDefault escalation for asymptotic intuition, paradigm selection, and war-story debugging lessons
Introduction to Algorithms (CLRS)Selective support for rigorUse for formal asymptotic definitions, the Master Theorem, loop-invariant-style correctness proofs, greedy and DP elements, and amortized analysis
Algorithms (Sedgewick)Selective support for implementationOpen when you want a second implementation perspective on mergesort, quicksort, priority queues (mostly Module 2 content); rarely needed in Module 1
Grokking Algorithms (Bhargava)Accessible alternate explanationUse when a concept page lands too tersely; it trades rigor for intuition
Competitive Programming (Halim)Exercise support and problem triageUse for paradigm-classification practice and for its many worked problems

Resource Map by Cluster

Cluster 1: Asymptotic Analysis and Mathematical Foundations

NeedBest local chunkWhy
formal big-O definitionCLRS: Asymptotic notation, formal definitionsCleanest formal presentation with worked proofs
intuitive big-OSkiena: Big-Oh notationBest first pass before CLRS rigor
growth rate orderingSkiena: Growth rates and dominance relationsUseful hierarchy and intuitive comparisons
loop analysis and summationsSkiena: Logarithms and summationsSummation techniques applied to algorithm analysis
iterative analysis worked exampleCLRS: Analyzing algorithms (insertion sort)Full step-by-step counting example
substitution methodCLRS: Substitution method for recurrencesFormal induction-based technique
recursion tree methodCLRS: Recursion tree methodVisual approach when Master Theorem does not apply
Master TheoremCLRS: Master methodCanonical reference for the three cases
D&C recurrences in contextSkiena: Solving divide-and-conquer recurrencesSkiena's accessible view of D&C recurrences
amortized - aggregateCLRS: Aggregate analysisSimplest amortized method
amortized - accountingCLRS: The accounting methodCredit-based intuition
amortized - potentialCLRS: The potential methodStrongest amortized technique
amortized - dynamic arraysCLRS: Dynamic tablesThe canonical worked example

Cluster 2: Algorithm Correctness and Termination

NeedBest local chunkWhy
loop invariant worked exampleCLRS: Insertion sortThe canonical loop-invariant proof
correctness disciplineCLRS: Analyzing algorithmsShows analysis alongside correctness
induction for recursionSkiena: Induction and recursionNatural bridge between induction and recursive algorithms
induction worked proofSkiena: Prove sum i = n(n+1)/2 by inductionReinforces the proof mechanics
recursive objects framingSkiena: Recursive objectsUseful for thinking recursively about data
termination in D&C contextCLRS: Designing algorithmsWorked D&C example including termination

Cluster 3: Design Paradigms - Search, Divide-and-Conquer, Greedy

NeedBest local chunkWhy
brute force framingSkiena: Selecting the right jobsShows brute force as the first step in design
systematic enumerationSkiena: Constructing all permutationsCanonical example of exhaustive generation
complete searchCompetitive Programming: Complete searchContest-oriented brute force with sizing advice
recursive brute forceCompetitive Programming: Recursive complete searchGood template for backtracking-style enumeration
D&C templateSkiena: Divide and conquerBest operational introduction
D&C worked example (mergesort)Skiena: MergesortCanonical D&C algorithm in context
D&C designCLRS: Designing algorithmsRigorous D&C template
D&C alternate expositionCompetitive Programming: Divide and conquerContest perspective, different examples
activity selection greedyCLRS: Activity-selection problemCanonical greedy with exchange proof
elements of greedyCLRS: Elements of the greedy strategyGeneral framework for greedy correctness
greedy worked examplesCLRS: Huffman codesNon-trivial greedy with proof
greedy patternsCompetitive Programming: GreedyCommon greedy patterns with sample problems
backtrackingSkiena: BacktrackingExtend / check / undo framing
pruningSkiena: Search pruningHow to kill subtrees you do not need to search
backtracking worked exampleSkiena: SudokuReal case study of aggressive pruning

Cluster 4: Dynamic Programming as a Paradigm

NeedBest local chunkWhy
why naive recursion failsSkiena: Fibonacci by recursionShows exponential blowup motivating DP
memoization fixSkiena: Fibonacci by cachingDirect top-down cure
DP canonical exampleCLRS: Rod cuttingBoth top-down and bottom-up implementations
elements of DPCLRS: Elements of dynamic programmingOptimal substructure and overlapping subproblems formally
DP illustrationCompetitive Programming: DP illustrationWalks through state/recurrence/transition
DP vs greedy tensionCLRS: Offline caching (greedy vs DP)Same problem space where paradigm choice matters
limits of DPSkiena: Limitations of dynamic programmingWhere DP state explodes (TSP etc.)
accessible DP introGrokking: Dynamic programming (Part 1)Alternate low-friction explanation

Cluster 5: Analysis in Practice and Strategy Selection

NeedBest local chunkWhy
testing disciplineCompetitive Programming: Master the art of testing codePractical testing heuristics under pressure
debugging under pressureSkiena: War story - Hard against the clockRealistic failure mode and recovery
debugging lessonSkiena: War story - And then I failedHow small mistakes cascade
implementation bug narrativeSkiena: War story - Give me a ticket on an airplaneReal bug, real fix
another bug narrativeSkiena: War story - Skiena for the defenseIllustrates correctness-vs-testing tension
RAM modelSkiena: The RAM model of computationWhy asymptotic cost is an idealization
constants matterSkiena: Reasoning about efficiencyPractical vs theoretical performance
growth hierarchy reviewSkiena: Esoteric functionsThe less-common growth rates you still meet
algorithms as a technologyCLRS: Algorithms as a technologyWhy algorithm choice pays off in practice
paradigm triageSkiena: Modeling the problemHow to cast a messy problem into paradigm-ready form
paradigm selection reviewSkiena: Chapter notes on algorithm designSkiena's retrospective on paradigm selection
sizing & constraintsCompetitive Programming: Do algorithm analysisShort rule of thumb on n vs paradigm

Exercise Support Chunks

Use these when concept pages are understood but fluency is weak:

External Resources (Read-If-Curious)

Only use these if you want a second exposition or a supplementary problem source. The module is completable from the local chunks alone.

Transfer Curriculum Pointers (within this module)

Every concept page now includes a Transfer / Where This Shows Up Later section. These are the curriculum anchors those sections reference:

  • S1 M2 (Counting) - binomial identities, pigeonhole, generating functions underlying summation-based analysis.
  • S1 M3 (Probability) - expected-case analysis, concentration bounds, randomized pivot selection.
  • S1 M5 (Problem solving) - triage discipline reused in paradigm selection (concept 18).
  • S4 (Systems) - cache-complexity, memory hierarchy, external-memory algorithms (concepts 1, 9, 13, 17).
  • S5 (OS / scheduling) - fairness, queueing, amortized quantum accounting (concepts 4, 10, 14).
  • S6 (Databases) - query-planner cost models, LSM compaction as amortized analysis, join algorithm triage (concepts 4, 14, 17, 18).
  • S7 M5 (Architecture / ADRs) - fitness functions as asymptotic-plus-constants claims; paradigm triage as architectural decisions (concepts 1, 17, 18).
  • S8 (Distributed systems) - capacity planning, tail-latency analysis, Amdahl-shaped constants atop asymptotic skeletons (concepts 1, 4, 17).

Use Rules

  • If you are stuck on a complexity analysis, go to Skiena first (Cluster 1 chunks).
  • If you need formal rigor or a clean proof template, go to CLRS.
  • If you need an accessible second exposition, consult Grokking.
  • If you need exercise volume or paradigm contest problems, use Competitive Programming.
  • Open one chunk for one concept gap; do not wander through a whole chapter sequence by default.
  • If rereading does not fix the problem, stop and rewrite the analysis in your own words before reading more.