| Lectures |
| Lecture 1: Preliminaries |
| Lecture 2: Equivalence relations and cardinality |
| Lecture 3: Recursion and induction |
| Lecture 4: Three types of computing machine |
| Lecture 5: Finite state automata and regular languages |
| Lecture 6: Non Determinism |
| Lecture 7: Regular Languages |
| Lecture 8: Not Regular languages |
| Lectures 9: Pushdown automata |
| Lectures 10-14: Turing machines |
| Lecture 15: NP-hard and NP-complete |
| Lecture 16: Cook's Theorem (1) |
| Lecture 17: Cook's Theorem (2) |
| Lecture 18: Additional Complexity Classes |
| Lecture 19: Beyond 3-SAT |
| Lecture 20: Graph Theoretic NP-complete Problems |
| Lecture 21: SUBSET-SUM Problem |
| Lecture 22: Optimisation Problems |
| Lecture 23: Approximation (1) |
| Lecture 24: Approximation (2) |
| Lecture 25: Presentations of other hard problems |
| Lecture 26: Review and exam Guide |
| Tutorials |
| Tutorial 1: Solutions |
| Tutorial 2: Solutions |
| Tutorial 3: Solutions |
| Tutorial 4: Tutorial 5: Tutorial 6: Tutorial 7: Tutorial 8+9: Tutorial 10: |
| Tutorial 11: Tutorial 14: Tutorial 15: Tutorial 16: Tutorial 17: Tutorial 18: Tutorial 19: Tutorial 20: Tutorial 21: Tutorial 22: Tutorial 23: Tutorial 24: |