Algorithms are a set of instructions that operate in sequence to fulfil an action. Everyday actions we take in the digital world, whether that be a Google search, looking up the fastest route to our destination via a SatNav, or scrolling through the recommended content that appears on our social media feeds, are all fulfilled by carefully developed and continuously evolving algorithms.
This course introduces students to a range of algorithms that can be used to fulfil operations (such as insertion of data, deletion of data, searching through data, sorting data etc) on different stores of data (data structures such as arrays, vectors, hash tables, stacks, queues, linked lists, trees and graphs). Students will discover that the performance of algorithms will vary according to which data structure is implemented, the size of the data set, the number of statements in the algorithm, whether the data is sorted and also the system architecture (processing power). This course will teach students how to analyse, compare, evaluate different approaches to the same problem via asymptotic notation (mainly 'Big O').
It is strongly recommended that students have an introductory level understanding of C++ (or a related Object-Oriented language: C#, Java or Python) before taking this course. Ideally, students should first complete 'An Introduction to Object-Orientated Programming Using C++' (or Java) course which provides a strong foundation of C++ syntax and the OOP paradigm before undertaking this course on data structures and algorithms.
Whilst these concepts taught in this course are not exclusive to the C++ programming language, we will utilise C++ to make use of pointers for memory efficiency. Despite the wealth of existing libraries available, there is educational value in learning the construction of such data structures and algorithms and how to analyse their performance. These topics are commonly examined in interviews by Big Tech companies ('FANG': Facebook (now Meta), Amazon, Netflix, Google, in addition to Apple and Microsoft), and hence this course can help students prepare to apply for software development and software engineering roles.