A successor to the first edition, this updated and revised book is a great companion guide for students and engineers alike, specifically software engineers who design reliable code. While succinct, this edition is mathematically rigorous, covering the foundations of both computer scientists and mathematicians with interest in algorithms. Besides covering the traditional algorithms of Computer Science such as Greedy, Dynamic Programming and Divide & Conquer, this edition goes further by exploring two classes of algorithms that are often overlooked: Randomised and Online algorithms - with emphasis placed on the algorithm itself. The coverage of both fields are timely as the ubiquity of Randomised algorithms are expressed through the emergence of cryptography while Online algorithms are essential in numerous fields as diverse as operating systems and stock market predictions. While being relatively short to ensure the essentiality of content, a strong focus has been placed on self-containment, introducing the idea of pre/post-conditions and loop invariants to readers of all backgrounds. Containing programming exercises in Python, solutions will also be placed on the book's website.