In this course we study applications of probabilistic techniques to computer science, focusing on randomised algorithms
and the probabilistic analysis of algorithms. Randomisation and probabilistic techniques have applications ranging from communication
protocols, combinatorial optimisation, computational geometry, data structures, networks and machine learning. Randomised
algorithms, which typically guarantee a correct result only with high probability, are often simpler and faster than corresponding
deterministic algorithms. Randomisation can also be used to break symmetry and achieve load balancing in parallel and distributed
computing. This course introduces students to those ideas in probability that are most relevant to computer science. This
background theory is motivated and illustrated by a wide-ranging series of applications.

Be able to use the above tools
to devise and analyse randomised algorithms and carry out the probabilistic analysis of deterministic algorithms.

Understand
some of the main paradigms in the design of randomised algorithms, including random sampling, random walks, random rounding,
algebraic techniques, foiling the adversary and amplification.

Prerequisites

Exposure to probability theory, discrete mathematics, algorithms and linear algebra will be assumed. Specific concepts
that will be assumed include discrete probability spaces, the principle of inclusion-exclusion, conditional probability, random
variables, expectation, basic graph theory, the binomial theorem, finite fields, power series, sorting algorithms, asymptotic
notation, vector spaces, linear transformations, matrices and determinants. Graduate students who have not taken a course
in algorithms will not be at a significant disadvantage. Diligent students lacking some of the required background but willing
to acquaint themselves with the necessary material are encouraged to contact the lecturer to discuss their situation prior
to registering for this course.

Synopsis

The material will be mostly drawn from the course text "Probability and Computing", by Mitzenmacher and Upfal. Supplementary
material is also taken from the book "Randomized Algorithms" by Motwani and Raghavan. It is expected that the following will
be covered: