This module aims to help you become a computational problem solver. You’ll learn techniques to solve computational problems efficiently and apply those techniques using Python. You’ll also learn about the limitations of computing: which problems can’t be solved algorithmically or for which no efficient solutions are known. This module is suitable if – whatever your field – you need to design or implement an efficient algorithm or to understand both the power and the limitations of computing. Though the focus is on the underlying ideas, you’ll also work with some mathematical concepts and notation.
You’ll learn to state a problem precisely so that it can be solved with a computer. In other words, you’ll learn to express the problem in a way which allows you to write an algorithm for solving it. However, not all algorithms are equally good solutions. For that reason, you’ll also learn how to analyse the speed and efficiency of algorithms and establish whether an algorithm does what it is supposed to do. Finally, you’ll delve into the very foundations of computing. You’ll learn which problems cannot be solved with an algorithm. You’ll also learn the limits on the speed with which algorithms can solve many important practical problems.
The module comprises three parts, each ending with an assessment task:
Part 1
In the first part, you’ll learn basic data structures for organising data, like lists, stacks, queues, dictionaries, and sets. You’ll also learn how to analyse the complexity of an algorithm and how to measure its runtime.
Part 2
The second part covers two non-linear data structures: trees and graphs. The former can represent hierarchical data, and the latter can model social, transport, and other kinds of networks. The main focus of the second part is algorithmic techniques like search (brute-force, breadth-first, and depth-first), divide and conquer, recursion, and greedy algorithms. These are general-purpose techniques for solving a wide range of problems.
Part 3
In the third part, you’ll further develop your understanding of graphs and algorithmic techniques (backtracking, dynamic programming). You’ll also learn about the limitations of computational problem solving (non-computability and the P ≠ NP conjecture).
You must have passed one of the following modules:
You need:
Are you ready for M269?
You’ll get help and support from an assigned tutor throughout your module.
They’ll help by:
Online tutorials run throughout the module. While they’re not compulsory, we strongly encourage you to participate. Where possible, we’ll make recordings available.
Course work includes:
You’ll have access to a module website, which includes:
Additionally, the website includes:
You can work through the module materials online, on the Open Computing Lab (which requires internet access), or offline, on your computer (which requires installing the provided M269 software).
The OU strives to make all aspects of study accessible to everyone, and this Accessibility Statement outlines what studying M269 involves. You should use this information to inform your study preparations and any discussions with us about how we can meet your needs.
To find out more about what kind of support and adjustments might be available, contact us or visit our Disability support website.
Algorithms, data structures and computability (M269) starts once a year – in October.
It will next start in October 2026.
We expect it to start for the last time in October 2028.
Back to previous page