Cambridge A‑Level Computer Science (9618) – 9.2 Algorithms & Related Syllabus Topics
Learning Objective (AO1)
Describe and use the process of stepwise refinement (top‑down design) to express an algorithm to a level of detail from which the task may be programmed.
1. Stepwise Refinement (Top‑Down Design)
1.1 Definition
- A systematic, top‑down technique for converting a problem description into an implementable algorithm.
- Each stage decomposes a problem into smaller, more concrete sub‑problems until the steps are directly translatable into code.
1.2 Why It Is Used (AO3)
- Improves clarity and communication between designers and programmers.
- Facilitates independent testing of modules (unit testing).
- Helps identify and handle edge cases early.
- Provides a clear roadmap for documentation and future maintenance.
1.3 The Refinement Cycle
- Problem definition (Level 1) – Write a concise natural‑language statement of the required outcome.
- Identify major sub‑tasks (Level 2) – Break the problem into logical sections (functions, modules, or stages).
- Refine sub‑tasks (Level 3) – Expand each section into detailed steps, adding control structures, data handling, and error checking.
- Validate (AO2) – Ensure each step is unambiguous, testable, and covers all cases.
- Implementation (Level 4) – Translate the fully refined steps into executable code.
1.4 Levels of Refinement
| Level | Focus | Typical Output |
|---|
| 1 | Problem statement | Natural‑language description of the overall task. |
| 2 | Major sub‑tasks | Bulleted list of high‑level functions or modules. |
| 3 | Detailed steps | Pseudocode, structured English, or flow‑chart fragments. |
| 4 | Implementation ready | Executable code fragments (Python, Java, etc.). |
1.5 Pseudocode Conventions (AO1)
1.6 Algorithm Analysis (AO2)
At the final refinement stage you should be able to give a simple analysis of the algorithm’s efficiency.
- Time complexity – count the number of basic operations as a function of input size n. Express using Big‑O notation (e.g., O(n), O(n²)).
- Space complexity – estimate the amount of extra memory required (excluding the input itself).
- Identify best‑case, average‑case and worst‑case scenarios where relevant.
2. Worked Examples of Stepwise Refinement
2.1 Example 1 – Find the Maximum Value in a List
Level 1 – Problem Statement
Given a list of numbers, determine the largest number.
Level 2 – Major Sub‑tasks
- Read the list of numbers.
- Initialise a variable to hold the current maximum.
- Traverse the list, updating the maximum when a larger value is found.
- Output the final maximum.
Level 3 – Detailed Pseudocode
INPUT L # list of numbers
max ← L[0] # initialise with first element
FOR i ← 1 TO |L| - 1 DO
IF L[i] > max THEN
max ← L[i]
END IF
END FOR
OUTPUT max
Level 4 – Python Implementation
def find_max(L):
max_val = L[0]
for i in range(1, len(L)):
if L[i] > max_val:
max_val = L[i]
return max_val
Complexity Analysis
- Time: O(n) – each element examined once.
- Space: O(1) – only a single extra variable.
2.2 Example 2 – Insertion Sort
Level 1 – Problem Statement
Sort a list of numbers into non‑decreasing order using the insertion‑sort method.
Level 2 – Major Sub‑tasks
- Iterate over the list starting from the second element.
- Insert the current element into the already sorted portion.
- Shift larger elements one position to the right to make space.
- Repeat until the whole list is sorted.
Level 3 – Detailed Pseudocode
FOR j ← 2 TO n DO
key ← A[j]
i ← j - 1
WHILE i > 0 AND A[i] > key DO
A[i+1] ← A[i]
i ← i - 1
END WHILE
A[i+1] ← key
END FOR
Level 4 – Python Implementation
def insertion_sort(A):
n = len(A)
for j in range(1, n):
key = A[j]
i = j - 1
while i >= 0 and A[i] > key:
A[i + 1] = A[i]
i -= 1
A[i + 1] = key
return A
Complexity Analysis
- Best case (already sorted): O(n)
- Average & worst case: O(n²)
- Space: O(1) – in‑place sorting.
2.3 Example 3 – Counting Vowels in a String
Level 1 – Problem Statement
Read a text string and output the frequency of each vowel (a, e, i, o, u), ignoring case.
Level 2 – Major Sub‑tasks
- Read the input string.
- Convert the string to lower case.
- Initialise counters for each vowel.
- Iterate over every character and increment the appropriate counter.
- Display the five counts.
Level 3 – Detailed Pseudocode
INPUT text
text ← LOWERCASE(text)
count_a ← 0
count_e ← 0
count_i ← 0
count_o ← 0
count_u ← 0
FOR each ch IN text DO
IF ch = 'a' THEN
counta ← counta + 1
ELSE IF ch = 'e' THEN
counte ← counte + 1
ELSE IF ch = 'i' THEN
counti ← counti + 1
ELSE IF ch = 'o' THEN
counto ← counto + 1
ELSE IF ch = 'u' THEN
countu ← countu + 1
END IF
END FOR
OUTPUT "a:", counta, " e:", counte, " i:", count_i,
" o:", counto, " u:", countu
Level 4 – Python Implementation
def count_vowels(text):
text = text.lower()
counts = {'a':0, 'e':0, 'i':0, 'o':0, 'u':0}
for ch in text:
if ch in counts:
counts[ch] += 1
return counts
Complexity Analysis
- Time: O(n) – one pass over the string.
- Space: O(1) – only five integer counters.
2.4 Example 4 – Binary Search (Recursive)
Level 1 – Problem Statement
Given a sorted list of distinct integers and a target value, determine whether the target occurs in the list using a recursive binary‑search algorithm.
Level 2 – Major Sub‑tasks
- Define a recursive function that receives the list, the target, and the current low/high indices.
- Calculate the middle index.
- Compare the middle element with the target:
- If equal – success.
- If target < middle – recurse on the left half.
- If target > middle – recurse on the right half.
- Base case: low > high → target not found.
Level 3 – Detailed Pseudocode
FUNCTION binary_search(A, target, low, high) RETURNS BOOLEAN
IF low > high THEN
RETURN FALSE
END IF
mid ← (low + high) DIV 2
IF A[mid] = target THEN
RETURN TRUE
ELSE IF target < A[mid] THEN
RETURN binary_search(A, target, low, mid-1)
ELSE
RETURN binary_search(A, target, mid+1, high)
END IF
END FUNCTION
Level 4 – Python Implementation
def binary_search(A, target, low, high):
if low > high:
return False
mid = (low + high) // 2
if A[mid] == target:
return True
elif target < A[mid]:
return binary_search(A, target, low, mid-1)
else:
return binary_search(A, target, mid+1, high)
Complexity Analysis
- Time: O(log n) – the list size halves each call.
- Space: O(log n) – recursion stack depth.
3. Using Stepwise Refinement in Exams (AO1–AO3)
| Exam Requirement | What to Include | How It Relates to Stepwise Refinement |
|---|
| AO1 – Knowledge & Understanding | Define stepwise refinement, list its stages, give pseudocode conventions. | Shows you can describe the process and its purpose. |
| AO2 – Application | Provide a correct, fully refined algorithm (Level 3) and analyse its time/space complexity. | Demonstrates you can apply the technique to a new problem. |
| AO3 – Evaluation | Discuss advantages (modularity, testing) and limitations (over‑engineering, time‑consuming for very small problems). Suggest alternative design methods (e.g., bottom‑up design, flow‑chart first). | Shows critical evaluation of the method. |
Checklist for a Complete Answer
- State the problem clearly (Level 1).
- List major sub‑tasks (Level 2) – use a numbered or bulleted list.
- Provide detailed pseudocode (Level 3) – follow the conventions in §1.5.
- Give a brief analysis of time and space complexity (AO2).
- Optional: Show a short code fragment (Level 4) if the question asks for implementation.
- Conclude with an evaluation of the design approach (AO3).
4. Quick Reference Tables (AS & A‑Level)
4.1 Pseudocode Keywords
| Keyword | Purpose |
|---|
| IF … THEN … END IF | Conditional selection. |
| ELSE IF … THEN … | Additional conditions. |
| FOR i ← start TO end DO … END FOR | Count‑controlled loop. |
| WHILE condition DO … END WHILE | Pre‑test loop. |
| REPEAT … UNTIL condition | Post‑test loop. |
| FUNCTION / PROCEDURE | Define reusable blocks. |
4.2 Common Complexity Classes (A‑Level)
| Class | Typical Example |
|---|
| O(1) | Accessing an array element by index. |
| O(log n) | Binary search, balanced tree lookup. |
| O(n) | Linear search, single pass over a list. |
| O(n log n) | Merge sort, heap sort. |
| O(n²) | Insertion sort, bubble sort, naïve matrix multiplication. |
5. Extending Stepwise Refinement to Other Syllabus Areas
5.1 Data Representation & Algorithms (AO2)
When refining algorithms that manipulate binary data (e.g., bit‑wise masks, colour conversion), include a sub‑task that explains the representation before the actual computation.
5.2 Databases (AO1/AO2)
Design a query‑building algorithm using stepwise refinement:
- Level 1 – “Generate an SQL SELECT statement that returns the names of students aged > 18 enrolled in ‘Computer Science’.”
- Level 2 – Sub‑tasks: read criteria, build WHERE clause, concatenate strings, output query.
- Level 3 – Pseudocode with string operations.
- Level 4 – Python code using f‑strings or parameterised queries.
5.3 Security & Encryption (AO3)
Use refinement to design a simple Caesar‑cipher encryption routine, then evaluate its security weaknesses (e.g., susceptibility to frequency analysis).
5.4 Ethical Evaluation (AO3)
After presenting a refined algorithm, discuss possible ethical implications such as data privacy, bias, or environmental impact, linking back to the design choices made.
6. Summary
- Stepwise refinement turns a vague problem description into a precise, testable algorithm.
- Follow the four‑stage cycle (problem → sub‑tasks → detailed steps → code) and use the pseudocode conventions to keep your work clear.
- Always accompany the refined algorithm with a brief complexity analysis and, where required, an evaluation of the design approach.
- Apply the same top‑down thinking to other syllabus topics (databases, security, ethics) to demonstrate a holistic understanding in the exam.