Advanced Algorithms and Data Structures
You'll study the theory used in the design and analysis of advanced algorithms and data structures. Topics covered include string algorithms (such as for string matching, longest common subsequence), graph algorithms (such as for minimum cuts and maximum flows, and Google's pagerank algorithm), advanced data structures (such as Fibonacci heaps and Bloom filters), and randomised search heuristics (evolutionary algorithms). You'll learn all the necessary probability theory will be introduced, including random variables and concentration inequalities.
The theory is practiced in weekly labs where we learn how to implement the algorithms and data structures as functional and imperative programs (using the languages Haskell and C), and apply these to solve large instances of real-world problems.
Advanced Computer Networks
This module will provide you with an advanced knowledge of computer communications networks, using examples from all-IP core telecommunications networks to illustrate aspects of transmission coding, error control, media access, internet protocols, routing, presentation coding, services and security.
The module will describe Software Defined Networks (SDNs) and provide examples of using them to enable very large scale complex network control. It will also provide advanced knowledge of various routing and query protocols in:
- Ad Hoc Networks
- Mobile Ad Hoc Networks (MANETs)
- Vehicular Ad Hoc Networks (VANETs)
- Disconnection/Disruption/Delay Tolerant Networks (DTNs)
- impact of new networking developments, such as security risks, ethics, interception and data protection will be reflected and discussed systematically
Autonomous Robotic Systems
This module introduces you to the computer science of robotics, giving you an understanding of the hardware and software principles appropriate for control and localisation of autonomous mobile robots. A significant part of the module is laboratory-based, utilising physical robotic hardware to reinforce the theoretical principles covered.
Spending around three to four hours each week in lectures and practicals, you’ll cover a range of topics including:
- basic behavioural control architectures
- programming of multiple behaviours
- capabilities and limitations of sensors and actuators
- filtering techniques for robot localisation
Big Data Learning and Technologies
'Big Data' involves data whose volume, diversity and complexity requires new technologies, algorithms and analyses to extract valuable knowledge, which go beyond the normal processing capabilities of a single computer. The field of Big Data has many different faces such as databases, security and privacy, visualisation, computational infrastructure or data analytics/mining.
'Big Data' involves data whose volume, diversity and complexity requires new technologies, algorithms and analyses to extract valuable knowledge, which go beyond the normal processing capabilities of a single computer. The field of Big Data has many different faces such as databases, security and privacy, visualisation, computational infrastructure or data analytics/mining.
This module will provide the following concepts:
- Introduction to Big data: introducing the main principles behind distributed/parallel systems with data intensive applications, identifying key challenges: capture, store, search, analyse and visualise the data.
- SQL Databases vs. NoSQL Databases: understand the growing amounts of data; the relational database management systems (RDBMS); overview of Structured Query Languages (e.g. SQL); introduction to NoSQL databases; understanding the difference between a relational DBMS and a NoSQL database; Identifying the need to employ a NoSQL DB.
- Big Data frameworks and how to deal with big data: this includes the MapReduce programming model, as well as an overview of recent technologies (Hadoop ecosystem, and Apache Spark). Then, you will learn how to interact with the latest APIs of Apache Spark (RDDs, DataFrames and Datasets) to create distributed programs capable of dealing with big datasets (using Python and/or Scala)
- Finally, we will dive into the data mining and machine learning part of the course, including data preprocessing approaches (to obtain quality data), distributed machine learning algorithms and data stream algorithms. To do so, you will use the Machine learning library of Apache Spark (MLlib) to understand how some machine learning algorithms (e.g. Decision Trees, Random Forests, k-means) can be deployed at a scale.
Collaboration and Communication Technologies
In this module, you will consider the design of collaboration and communication technologies used in a variety of different contexts including workplace, domestic and leisure environments. You will consider the basic principles of such technologies, explore the technologies from a social perspective, consider their impact on human behaviour and critically reflect on their design from a human-centred perspective.
Collaboration and Communication Technologies Development Project
You are given the opportunity to combine your developing CCT knowledge with your programming abilities. You have the whole semester to build a working collaborative project either individually, or you can opt to work in a team, and produce a report on how it supports collaboration according to CCT theory. The primary focus is on building a working application, and so existing strong programming ability is required.
Compilers
You’ll examine aspects of language and compiler design by looking at the techniques and tools that are used to construct compilers for high level programming languages. Topics covered include: parsing; types and type systems; run-time organisation; memory management; code generation; and optimisation. You’ll spend around four hours each week in lectures and computer classes.
Computability
You’ll begin by considering the attempts to characterise the problems that can theoretically be solved by physically-possible computational processes.
You’ll then consider the area of complexity theory, looking at whether or not problems can be solved under limitations on resources such as time or space. A key topic is an examination of the classes P and NP and the definition of the term NP-complete.
Computer Graphics
You’ll examine the principles of 3D computer graphics, focusing on modelling the 3D world on the computer, projecting onto 2D display and rendering 2D display to give it realism.
Through weekly lectures and laboratory sessions, you’ll explore various methods and requirements in 3D computer graphics, balancing efficiency and realism.
Computer Vision
You'll examine current techniques for the extraction of useful information about a physical situation from individual and sets of images.
You'll cover a range of methods and applications, with particular emphasis being placed on the detection and identification of objects, image segmentation, pose estimation, recovery of three-dimensional shape and analysis of motion.
These problems will be approached with both traditional and modern Computer Vision approaches including Deep Learning.
You will spend five hours per week in lectures, tutorials, and computer classes for this module.
Cryptography
This course covers the basic theory and practice of cryptographic techniques commonly used in computer security. You will learn the theory and mathematics behind commonly used algorithms, and how cryptographic primitives are used to build modern secure systems.
|
This course covers the basic theory and practice of cryptographic techniques commonly used in computer security. You will learn the theory and mathematics behind commonly used algorithms, and how cryptographic primitives are used to build modern secure systems. Topics will include both private and public key encryption schemes, common algorithms and cryptanalysis, key exchange, hash functions, and elliptic curve cryptography. Important applications of these techniques such as cryptographic protocols, digital signatures and Public Key Infrastructure will also be covered. Students will learn how to evaluate the strength of algorithms, make informed decisions on their selection, and how to make use of cryptographic techniques in practice.
|
Data Modelling and Analysis
This module will enable you to appreciate the range of data analysis problems that can be modelled computationally and a range of techniques that are suitable to analyse and solve those problems.
Topics covered include:
- basic statistics
- types of data
- data visualisation techniques
- data modelling
- data pre-processing methods including data imputation
- forecasting methods
- clustering and classification methods (decision trees, naīve bayes classifiers, k-nearest neighbours)
- data simulation
- model interpretation techniques to aid decision support
Spending around four hours each week in lectures and computer classes, appropriate software (eg. R, Weka) will be used to illustrate the topics you'll cover.
Designing Intelligent Agents
You’ll be given a basic introduction to the analysis and design of intelligent agents, software systems which perceive their environment and act in that environment in pursuit of their goals.
You’ll cover topics including:
- task environments
- reactive, deliberative and hybrid architectures for individual agents
- architectures and coordination mechanisms for multi-agent systems
You will spend around four hours each week in lectures and tutorials for this module.
Development Experience
Students taking part in activities relating to programming experience such as developing apps in their spare time, contributing to open source projects, or building things in hackathons may receive academic credit for showing they have experience and excellent development skills. The emphasis of this module is that you provide evidence of your significant extra-curricular software development experience. Students will only be able to register for this module with the approval of the convenor/school, once the material for assessment has been checked.
Fundamentals of Information Visualisation
Information Visualisation is the process of extracting knowledge from complex data, and presenting it to a user in a manner that this appropriate to their needs. This module provides a foundational understanding of some important issues in information visualisation design. You will learn about the differences between scientific and creative approaches to constructing visualisations, and consider some important challenges such as the representation of ambiguous or time-based data. You will also learn about psychological theories that help explain how humans process information, and consider their relevance to the design of effective visualisations.
If you want to learn how to design and implement your own interactive information visualisation, you should also take the linked module G53IVP (Information Visualisation Project). Together, these two modules form an integrated 20 credit programme of study.
Fuzzy Logic and Fuzzy Systems
This module aims to provide a thorough understanding of fuzzy sets and systems from a theoretical and practical perspective.
Topics commonly include:
- type-1 fuzzy sets
- type-1 fuzzy logic systems
- type-1 fuzzy set based applications
- type-2 fuzzy sets
- type-2 fuzzy logic systems
- type-2 fuzzy set based applications.
You will also be exposed to some of the cutting-edge research topics in uncertain data and decision making, e.g., based on type-2 fuzzy logic as well as other fuzzy logic representations. You will develop practical systems and software in a suitable programming language.
Games
This module covers the history, development and state-of-the-art in computer games and technological entertainment.
You will gain an appreciation of the range of gaming applications available and be able to chart their emergence as a prevalent form of entertainment. You will study the fundamental principles of theoretical game design and how these can be applied to a variety of modern computer games.
In addition, you will study the development of games as complex software systems. Specific software design issues to be considered will include the software architecture of games, and the technical issues associated with networked and multiplayer games.
Finally, you will use appropriate software environments to individually develop a number of games to explore relevant theoretical design and practical implementation concepts.
Human-AI Interaction
This module is an introduction to the design of human-AI interaction to ensure the AI-driven systems we build are beneficial and useful to people.
The module will cover practical design topics including methods and techniques such as natural language processing and human-robot interaction. The module will also consider societal and theoretical concerns of human-AI interaction, including the ethics of AI, responsible innovation, trust, accountability and explainable AI.
The practical component of the module will involve building AI-driven systems that drive conversational experiences, such as a text-based ‘chatbots’ and speech-controlled services/ ‘skills’, involving automatic speech recognition and natural language processing.
Individual Dissertation
You’ll perform an individual project on a topic in computer science. You’ll produce a 15-25,000 word project report under the guidance of your supervisor, who you will meet with for an hour each week.
The topic can be any area of the subject which is of mutual interest to both the student and supervisor, but should involve a substantial software development component.
Information Visualisation Project
In this module you will gain practical experience of how to design and evaluate a distinctive interactive visualisation which presents information gathered from a complex and interesting data source.
You will gain experience in web-based technologies that enable the implementation of multi-layered and interactive information visualisations, supported through lab work that introduces specific features of these technologies.
This module will require some challenging programming work and assumes some basic knowledge of HTML, CSS and Javascript. Introductory tutorials will be provided to those without this prior knowledge.
Knowledge, Representation and Reasoning
This module examines how knowledge can be represented symbolically and how it can be manipulated in an automated way by reasoning programs. Some of the topics you’ll cover include: first order logic; resolution; description logic; default reasoning; rule-based systems; belief networks and fuzzy logic. You’ll have two hours of lectures each week.
Linear and Discrete Optimisation
This module provides an entry point to computational optimisation techniques, in particular for modelling and solving linear and discrete optimisation problems like diet optimisation, network flows, task assignment, scheduling, bin-packing, travelling salesmen, facility location, vehicle routing and related problems.
In this module, you will learn to interpret and develop algebraic models for a variety of real-world linear and discrete optimisation problems to then use powerful optimization software (linear, integer and mixed-integer solvers) to produce a solution.
The module covers topics such as:
- linear programming
- integer programming
- combinatorial optimisation
- modelling and optimisation software
- multi-objective optimisation
Optimisation technology is ubiquitous in today's world, for applications in logistics, finance, manufacturing, workforce planning, product selection, healthcare, and any other area where the limited resources must be used efficiently. Optimisation enables prescriptive analytics in order to support and automate decision-making.
Machine Learning
Providing you with an introduction to machine learning, pattern recognition, and data mining techniques, this module will enable you to consider both systems which are able to develop their own rules from trial-and-error experience to solve problems, as well as systems that find patterns in data without any supervision. In the latter case, data mining techniques will make the generation of new knowledge possible, including very big data sets. This is now fashionably termed 'big data' science.
You'll cover a range of topics including:
- machine learning foundations
- pattern recognition foundations
- artificial neural networks
- deep learning
- applications of machine learning
- data mining techniques and evaluating hypotheses
Malware Analysis
This module looks at the practice of malware analysis, looking at how to analyse malicious software to understand how it works, how to identify it, and how to defeat or eliminate it.
You will look at how to set up a safe environment in which to analyse malware, as well as exploring both static and dynamic malware analysis. Although malware takes many forms, the focus of this module will primarily be on executable binaries. This will cover object file formats and the use of tools such as debuggers, virtual machines, and disassemblers to explore them. Obfuscation and packing schemes will be discussed, along with various issues related to Windows internals.
The module is practical with encouragement to safely practice the skills you're taught.
Mixed Reality
This module focuses on the possibilities and challenges of interaction beyond the desktop. Exploring the 'mixed reality continuum' - a spectrum of emerging computing applications that runs from virtual reality (in which a user is immersed into a computer-generated virtual world) at one extreme, to ubiquitous computing (in which digital materials appear embedded into the everyday physical world - often referred to as the 'Internet of Things') at the other. In the middle of this continuum lie augmented reality and locative media in which the digital appears to be overlaid upon the physical world in different ways.
You will gain knowledge and hands-on experience of design and development with key technologies along this continuum, including working with both ubiquitous computing based sensor systems and locative media. You will learn about the Human-Computer Interaction challenges that need to be considered when creating mixed reality applications along with strategies for addressing them, so as to create compelling and reliable user experiences.
Project in Advanced Algorithms and Data Structures
This project involves a self-guided study of a selected advanced algorithm or data structure. The outcome of the project is an analysis and implementation of the algorithm or data structure, as well as an empirical evaluation, preferably on a real-world data set of significant size.
Schools Experience
Students taking part in approved activities, such as running code clubs in schools, organising school computing activity days, or becoming active STEM ambassadors, may receive academic credit for demonstrating they have actively contributed to the development of younger students. Students will have undertaken an agreed number of hours on the activities, identified personal goals and targets in relation to these activities and maintained a reflective portfolio as a record of evidence of their competence and achievements. Students will only be able to register for this module with the approval of the convenor/school, once the material for assessment has been discussed.
Simulation and Optimisation for Decision Support
This module offers insight into the applications of selected methods of decision support.
The foundations for applying these methods are derived from:
- Operations Research Simulation
- Social Simulation
- Data Science
- Automated Scheduling
- Decision Analysis
Throughout the module, you will become more competent in choosing and implementing the appropriate method for the particular problem at hand. You will spend five hours per week in lectures, workshops, and computer classes for this module.
Software Quality Assurance
Students will be introduced to concepts and techniques that are widely used in industry to develop high quality software.
Through a two hour lecture each week, you will be introduced to concepts and techniques that are widely used in industry to develop high quality software. These include the following:
- What makes high quality software? Including procedures and approaches to quality management and quality assurance for software projects. Also, a brief history of software metrics
- Software testing. Including unit testing, integration testing, and acceptance testing, with a particular emphasis upon testing strategy and the automation of testing
- Software deployment. Including techniques used to minimise risk, and also continuous integration
These will all be put into the context of recent industry trends. Training will also be provided in common tools and techniques that are used in professional software development including:
- Version control and the use of code repositories
- Release/configuration Build management tools
- Automated testing frameworks