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, or a deeper exercise lane.
Source Roles
| Source | Role | Why it is here |
|---|---|---|
| How to Solve It by Computer (Dromey) | Primary teaching source | Best available concrete bridge from Polya's problem-solving framework to algorithmic thinking, verification, and debugging |
| How to Solve It (Polya, external) | Conceptual ancestor | The origin of the four phases; linked externally, not required |
| Mathematics for Computer Science | Selective support | Used only for contradiction, induction, and invariant reinforcement |
Read Only If Stuck
Polya's Four-Phase Framework
- Dromey: 1.1 Introduction
- Dromey: 1.2.2 Getting started on a problem
- Dromey: 1.2.6 General problem-solving strategies
- Dromey: 1.5 Program verification
Core Heuristics for Reducing Search
- Dromey: 1.2.6 General problem-solving strategies
- Dromey: 1.3.2 Choice of a suitable data structure
- Dromey: 1.7.4 Probabilistic average case analysis (Part 1)
- Dromey: 1.7.4 Probabilistic average case analysis (Part 2)
Structural Reasoning and Construction
- Dromey: 1.3.6 Termination of loops
- Dromey: 1.5.5 Verification of program segments with branches
- Dromey: 1.5.8 Proof of termination
- Dromey: 1.6.2 Inefficiency due to late termination
- Dromey: 1.7.1 Computational complexity
Debugging and Verification
Cluster 5: Problem-Solving as the Bridge to Computing
For informal-to-formal translation, reading unfamiliar code, and deadline-bounded triage. The most useful local material is the pre- / post-condition discipline in Dromey 1.5 and the getting-started and debugging chunks that treat problem statements as artifacts you construct, not find.
- Dromey: 1.1 Introduction -- frames the problem-to-algorithm pipeline and the role of a precise problem statement
- Dromey: 1.2.2 Getting started on a problem -- moving from a vague prompt to an actionable question
- Dromey: 1.2.6 General problem-solving strategies -- the strategy catalogue used under triage pressure
- Dromey: 1.4.4 Debugging programs -- reading code as bug triage
- Dromey: 1.5 Program verification -- pre- / post-conditions and the spec vocabulary
- Dromey: 1.5.8 Proof of termination -- the termination-measure discipline for reading loops
External anchors when the local chunks do not cover the specific angle:
- Polya, How to Solve It (Wikipedia summary) -- original statement of the understanding phase that cluster 5 extends
- SICP §1.1, The Elements of Programming -- worked examples of specifying computations precisely before implementing them
Optional Deep Dive
Additional algorithmic case studies from Dromey that illustrate the module's strategies in action:
- Dromey: Algorithm 2.1 Exchanging values of two variables
- Dromey: Algorithm 3.3 Greatest common divisor (Part 1)
- Dromey: Algorithm 3.4 Generating prime numbers (Part 1)
- Dromey: Algorithm 3.7 Raising a number to a large power (Part 1)
- Dromey: Algorithm 4.6 Finding the k-th smallest element (Part 1)
- Dromey: Algorithm 8.6 Permutation generation (Part 1)
These are case studies, not required reading. They are valuable for seeing strategies instantiated as full algorithm designs.
Concept-to-Source Map
| Primary concept | Best source if stuck | Why this source |
|---|---|---|
| Problem-solving begins with understanding | Dromey: 1.2.2 Getting started on a problem | Strongest short treatment of "what am I actually being asked?" |
| Devising a plan | Dromey: 1.2.6 General problem-solving strategies | Concrete heuristic catalogue with examples |
| Carrying out the plan | Dromey: 1.5 Program verification | Best short treatment of per-step justification |
| Looking back | Dromey: 1.7.1 Computational complexity | Good analogue for the "can this be faster or simpler?" review |
| Working backwards | Dromey: 1.2.6 General problem-solving strategies | Contains concrete backward-reasoning examples |
| Special cases and simplification | Dromey: 1.7.4 Probabilistic average case analysis (Part 1) | Good model of isolating one variable at a time |
| Patterns and analogies | Dromey: 1.3.2 Choice of a suitable data structure | Strong example of structural matching |
| Contradiction and invariants | Dromey: 1.5.5 Verification of program segments with branches | Best treatment of invariant preservation |
| Construction and algorithms | Dromey: 1.5.8 Proof of termination | Core treatment of finiteness and effectiveness |
| Divide-and-conquer and DP | Dromey: 1.6.2 Inefficiency due to late termination | Useful for paradigm-choice tradeoffs |
| Debugging mathematical and algorithmic reasoning | Dromey: 1.4.4 Debugging programs | Direct treatment of localization and fix-vs-replan |
| Generalization, transfer, and research problems | Dromey: 1.2.6 General problem-solving strategies | Frames heuristics as reusable across problems |
| Translating informal problems into formal specs | Dromey: 1.2.2 Getting started on a problem | Closest short treatment of extracting a formal problem from a vague prompt |
| Reading code as problem-solving | Dromey: 1.5 Program verification | Pre- and post-conditions give the vocabulary you need to read someone else's loop |
| Problem-solving under deadlines | Dromey: 1.2.6 General problem-solving strategies | Strategy catalogue useful when ranking sub-problems under a time budget |
External Reference (Optional)
- How to Solve It by George Polya (Princeton University Press). Required only if you want the original source material; Dromey and this guide fully cover what the module asks of you.
- Art of Problem Solving wiki at artofproblemsolving.com/wiki for contest-flavored examples.
- Terence Tao, "Solving mathematical problems," at terrytao.wordpress.com/career-advice/solving-mathematical-problems/ for the working-mathematician perspective.