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.
Course facts | |
---|---|
About this course: | |
Course code | M269 |
Credits | 30 |
OU Level | 2 |
SCQF level | 9 |
FHEQ level | 5 |
Course work includes: | |
3 Tutor-marked assignments (TMAs) | |
No examination | |
No residential school |
You'll learn to take a problem and state it precisely in order 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 really 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 what the limits are on the speed with which algorithms can solve many important practical problems.
The module comprises three parts, each ending with an assignment:
Part 1
In the first part, you'll learn about the 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 are 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).
This module emphasises how valuable computational thinking skills are for solving a wide variety of real-world problems. Additionally, the study of computing concepts is tightly integrated with professional skills, such as testing and documenting Python programs and using Jupyter notebooks, and information literacy (in particular, searching for information and writing a brief report).
If you're aiming to become a programmer or system builder, this module is ideal as it covers topics and skills that many leading employers in IT and computing value highly, and check in technical interviews.
You must have passed or already started one of the following modules:
You need:
Are you ready for M269?
You'll have access to a module website, which includes:
The module is delivered entirely using Jupyter notebooks which includes the module text and the code for the examples and exercises. The material is also available in PDF and HTML format and the code is also available in separate Python files.
You'll get help and support from an assigned tutor throughout your module.
They'll help by:
Online tutorials run throughout the module. Where possible, we'll make recordings available. While they're not compulsory, we strongly encourage you to participate.
The assessment details for this module can be found in the facts box.
The OU strives to make all aspects of study accessible to everyone. The Accessibility Statement below outlines what studying this module involves. You should use this information to inform your study preparations and any discussions with us about how we can meet your needs.
Most of this module's study materials are available for you to download and work with on your computer. Online materials include audio/video clips, links to external resources, online forums and online tutorial rooms.
If you're using printed materials as part of reasonable adjustments to support your studies, note that printed versions of online materials are unavailable for this module.
This module has online drop-in sessions and tutorials. Although not compulsory, tutorials will help you consolidate your learning.
The module requires substantial programming in the Python language. The coding environment is Jupyter notebooks.
Mathematical and scientific symbols and expressions are used throughout the module and you may be required to use such notation within assessment.
The study materials contain a considerable number of diagrams, and some graphs. Reading, interpreting and producing examples of these is an important part of the study of this module and may be assessed. Figure descriptions are provided for static figures but not for diagrams automatically generated from code.
You may be required to search for, and make use of, third party material online to answer some TMA questions.
This module has tutor-marked assignments (TMAs) that you must submit as Jupyter notebooks via the online TMA service.
You will receive feedback from your tutor on your submitted Tutor-Marked Assignments (TMAs). This will help you to reflect on your TMA performance. You should refer to it to help you prepare for your next assignment.
All University modules are structured according to a set timetable and you will need time-management skills to keep your studies on track. You will be supported in developing these skills.
This module requires you to install software that includes Python, Jupyter notebooks and other necessary libraries.
Algorithms, data structures and computability (M269) starts once a year – in October.
This page describes the module that will start in October 2025.
We expect it to start for the last time in October 2028.
This course is expected to start for the last time in October 2028.