Module overview
Aims and Objectives
Learning Outcomes
Knowledge and Understanding
Having successfully completed this module, you will be able to demonstrate knowledge and understanding of:
- The diagonalisation proof technique
- The relationship between the regular, context-free and recursively enumerable classes of languages, and the state-machines that accept them
- The nature and examples of undecidable problems
- The complexity of algorithms and problems, and key complexity classes
Subject Specific Intellectual and Research Skills
Having successfully completed this module you will be able to:
- Use the reduction technique to show that a problem is undecidable
- Ascertain and prove whether or not a given language is regular
- Ascertain and prove whether or not a given language is context-free
- Use polynomial-time reduction to reason about the complexity class of a problem
- Analyse the complexity of a given algorithm or problem
Syllabus
Automata theory
- Finite state automata, regular expressions and regular languages
- The pumping lemma for regular languages
- Closure properties of regular languages
- Context-free grammars and pushdown automata
- Closure properties of context-free languages
- The pumping lemma for context-free languages
Computability theory
- Turing machines, recursively enumerable and recursive languages
- Church-Turing thesis
- Limitations of algorithms: universality, the halting problem and undecidability
Computational complexity theory
- Complexity of algorithms and of problems
- Complexity classes
- Polynomial-time reduction
- NP-Completeness and Cook's theorem
Learning and Teaching
Teaching and learning methods
The content of this module is delivered through lectures, the module website, directed reading, pre-recorded materials and tutorials.
Students work on their understanding through a combination of independent study, preparation for timetabled activities, tutorials, and problem classes, along with formative assessments in the form of problem sheets.
Type | Hours |
---|---|
Lecture | 36 |
Follow-up work | 18 |
Revision | 18 |
Completion of assessment task | 10 |
Wider reading or practice | 50 |
Tutorial | 12 |
Preparation for scheduled sessions | 6 |
Total study time | 150 |
Resources & Reading list
Textbooks
J. Gruska (1996). Foundations of Computing. Thomson.
D. Harel (1992). Algorithmics: The Spirit of Computing. Addison Wesley.
J. Hein (2002). Discrete Structures, Logic and Computability. Jones and Bartlett.
A.K. Dewdney (2001). The (new) Turing Omnibus. Henry Holt.
J. Barwise and J. Etchemendy (1993). Turing's World. Stanford.
A.J.G. Hey (1996). Feynman Lectures on Computation. Addison Wesley.
D.C. Kozen (1999). Automata and Computability. Springer.
N.D. Jones (1999). Computability and Complexity. MIT Press.
M. Sipser (1997). Introduction to the Theory of Computation. PWS.
D. Cohen (1996). Introduction to Computer Theory. Wiley.
Assessment
Assessment strategy
This module is assessed by a combination of problem sheets and a final assessment in the form of a written examination.
Summative
This is how we’ll formally assess what you have learned in this module.
Method | Percentage contribution |
---|---|
Examination | 90% |
Problem Sheets | 10% |