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.