Module Catalogues

Algorithmic Foundations and Problem Solving

Module Title Algorithmic Foundations and Problem Solving
Module Level Level 1
Module Credits 5

Aims and Fit of Module

1. To introduce the notation, terminology, and techniques underpinning the study of algorithms. This provides the essential vocabulary and conceptual framework for the field, allowing students to precisely describe problems, communicate solutions with peers, and comprehend the advanced research and technical literature students will encounter throughout their career.

2. To introduce the standard algorithmic design paradigms employed in the development of efficient algorithmic solutions. Mastering these paradigms—such as divide-and-conquer, dynamic programming, and greedy algorithms—equips students with a powerful toolkit of generalizable strategies. This enables them to tackle new and complex computational challenges not just in this module, but in their future projects and technical roles, by recognizing which problem-solving strategy is most appropriate.

3. To introduce the mathematical tools needed for the analysis of algorithms in terms of the use of formal models of Time and Space. This skill moves students from simply implementing code to critically evaluating its quality. By learning to formally analyze an algorithm's resource efficiency, students gain the ability to make informed design decisions, build scalable and robust systems, and optimize performance—a critical capability that distinguishes a proficient software engineer.

Learning outcomes

A. Apply standard algorithms for searching, sorting, and graph traversal to solve computational problems, and implement them from given specifications.
B. Analyse the asymptotic performance of algorithms using big-O notation, and compare the efficiency of different algorithmic approaches for a given problem.
C. Apply core algorithmic techniques, including divide-and-conquer, greedy methods, and dynamic programming, to solve specified problems.
D. Distinguish between fundamental complexity classes, identifying the practical difference between polynomial-time and exponential-time algorithms.

Method of teaching and learning

In each normal week, students will be expected to attend a three-hour formal lecture and to participate in a one-hour supervised problem class. Lectures will introduce students to the academic content and practical skills which are the subject of the module, while problem classes will allow students to practice those skills. In addition, students will be expected to devote 8 hours of unsupervised time for private study. Private study will provide time for reflection and consideration of lecture material and background reading. Two assessments will be used to test to what extent practical skills have been learnt. A written examination at the end of the module will assess the academic achievement of students.