Download PDF
Representing and adding natural numbers
Subtraction on natural numbers
Adding and subtracting integers
Sequential logic
The difference engine
Sequential logic and finite-state machines
Regular expressions and Kleene's theorem
The stack, pushdown automatons and Turing machines
Low-level programming with machine code and assembly
Arrays
Pointers
The analytic engine
The halting problem
Busy beaver
Compilers and variables
Control flow
Fortran I
Functions and recursion
Lambda calculus and the Church-Turing thesis
Imperative and functional programming
Lisp
Functions and integers in C
Variable types in C
Arithmetic operations in C
Relations in C
Logic in C
Bitwise operations in C
Pointers in C
Variable assignment in C
Control flow in C
Libraries and namespaces in C
Characters and strings
Macros and the C preprocessor
ALGOL 60
BASIC
Side effects
Multiplication and division of natural numbers
Calculating natural number square roots
Identifying primes
Factorising natural numbers
Sorting arrays with selection sort and insertion sort
Searching arrays
Correctness of algorithms
Measuring algorithmic complexity with big-O notation
Divide and conquer algorithms and merge sort and quick sort
Arithmetic on real numbers
Calculating square roots of real numbers
Calculating \(\pi\) and \(e\)
Numerical integration
Trigonometric functions
Root-finding algorithms
Constructing the Mandelbrot set
Linked lists
Binary search trees and sets
Heaps and heapsort
Finding any path between nodes using stacks and depth-first search
Finding the shortest path between nodes using queues and breadth-first-search
Finding the shortest path on weigthed graphs using Dijkstra and priority queues
Using heuristics for greedy search and A* search
The travelling salesman problem
Constraint Satisfaction Problem (CSP) and Sudoku
Memoisation using search trees for associative arrays
Using hash tables to create associative arrays
Dynamic programming and the Bellman equations
Identifying roots of linear equations
Identifying roots of non-linear equations
Discrete linear algebra
Linear algebra
Calculating convex hulls
Numerical methods for ODEs
Numerical methods for PDEs
Solving elliptic curves
Optimising smooth functions with gradient descent
Extensions to gradient descent
Unconstrained optimisation of discrete functions
Unconstrained optimisation of non-differentiable real functions
Constrained optimisation
Lossless compression
Please select a chapter from the left.
This is a live document, and is full of gaps, mistakes, typos etc.