Adventures in Advanced Algorithms grew out of the development of open educational resources (OER) for the course Advanced Algorithms (CS 466/666) taught at the School of Computer Science, University of Waterloo. The goal of these notes is to present a series of modern algorithmic techniques in a mathematically rigorous manner to advanced undergraduate and beginning graduate students, and anyone curious about algorithm design beyond the standard introductory curriculum.
The emphasis is not on cataloging problems, but on enhancing how we think about problems algorithmically, and on showcasing some of the key algorithmic and analytical techniques that have emerged throughout theoretical computer science (TCS) in the last half-century—advances that introductory courses, still largely centered on 1960s–70s material, tend to leave out. The notes assume familiarity with basic algorithm design and analysis and with discrete probability, and build toward more advanced techniques and proof methods. Each chapter is sized to be covered in roughly one lecture, and the material is intended to be read largely in the order presented, although after Part I the remaining parts can, for the most part, be read in any order.
Disclaimer: The choice of topics in this book is inherently biased—by the personal taste of the author, and by what could realistically be covered in his courses. The book does not attempt to provide a comprehensive survey of all techniques in algorithm design, nor does it in any way claim to cover the most “important” or “fundamental” topics; rather, the topics were chosen simply to introduce the reader to some advanced ideas in TCS and algorithm design.
This book is released as an open educational resource: freely available for instructors and students to use, adapt, and improve. See here for the copyright information and how to cite this book.
This book is actively being prepared. Chapters are added and revised regularly, and a good number of them are still under construction—those are marked below and do not have a PDF yet. A single PDF of the complete book will be available soon; for now, the table of contents and the available individual chapters can be downloaded below. Comments, corrections, and suggestions are most welcome—please email me.
The full outline of the book, including chapters that are not yet released, is available in the table of contents: TABLE OF CONTENTS (PDF)
Individual chapters are available below. Chapters still under construction are marked coming up soon and will be posted as they are finished.
| 1 | Motivating ExampleA sublinear-time randomized (Δ+1) coloring—randomization as a warm-up. | |
| 2 | Probabilistic Analysis I: Concentration InequalitiesBalls-and-bins, concentration inequalities (Markov, Chebyshev, Chernoff), and boosting success probability. | |
| 3 | Probabilistic Analysis II: Random Graph TheoryPower of two choices; components and edge counts in random graphs. | |
| 4 | Streaming Algorithms I: Distinct ElementsEstimating the number of distinct elements in a stream. | |
| 5 | Streaming Algorithms II: Frequency MomentsThe Morris counter and the AMS sketch (first and second frequency moments). |
| 6 | Linear Programming I: Basics and ApplicationsWhat linear programs are, and how to model problems with them. | |
| 7 | Linear Programming II: LP DualityWeak and strong duality, and what they let you prove. | |
| 8 | Linear Programming III: Approximation Algorithms and Integrality GapsRounding and dual fitting for set cover; integrality gaps. | |
| 9 | Linear Programming IV: A Primal-Dual Algorithm for Bipartite MatchingA primal-dual (1−ε)-approximation for matching. | |
| 10 | Linear Programming V: Center of Gravity AlgorithmSolving linear programs with the center-of-gravity method. | |
| 11 | Semidefinite Programming I: Maximum CutThe SDP relaxation and rounding for Max-Cut. | |
| 12 | Semidefinite Programming II: Vertex ColoringColoring 3-colorable graphs via SDPs and random separators. |
| 13 | Multiplicative Weight Update I: Learning from ExpertsThe experts problem, weighted majority, and the MWU method. | |
| 14 | Multiplicative Weight Update II: Approximating Linear ProgramsApproximating the matching LP with MWU. | |
| 15 | Multiplicative Weight Update III: Width Reduction TechniquesMaking MWU faster by controlling its width. | |
| 16 | Multiplicative Weight Update IV: Undirected Maximum FlowApproximate maximum flow via MWU and electrical flows. | |
| 17 | Multiplicative Weight Update V: Adaptive Sparsification | coming up soon |
| 18 | Minimum Spanning Trees I: A Fast Deterministic AlgorithmClassical MST algorithms and Fredman–Tarjan algorithm. | |
| 19 | Minimum Spanning Trees II: A Linear-Time Randomized AlgorithmThe Karger–Klein–Tarjan expected-linear-time MST. | |
| 20 | Shortest Paths I: Spanners and Probabilistic Tree EmbeddingsGraph spanners, low-diameter decompositions, and tree embeddings. | |
| 21 | Shortest Paths II: Negative-Weights in Nearly-Linear TimeSingle-source shortest paths with negative weights in nearly-linear time. | |
| 22 | Edge Coloring: A Near-Linear Time Algorithm | coming up soon |
| 23 | Probabilistic Method and Lovász Local LemmaThe probabilistic method and the Lovász Local Lemma. | |
| 24 | Algorithmic Lovász Local Lemma and Entropy CompressionThe Moser–Tardos algorithm and entropy compression. | |
| 25 | Strong(er) Concentration Bounds I: Martingales and Azuma’s InequalityMartingales and the Azuma–Hoeffding inequality. | |
| 26 | Strong(er) Concentration Bounds II: Talagrand’s InequalityTalagrand’s inequality and its applications. | |
| 27 | Strong(er) Concentration Bounds III: Gaussian Variables | coming up soon |
| 28 | Polynomial Methods: Schwartz–Zippel Lemma | coming up soon |
| 29 | Random Walks I: Markov Chains | coming up soon |
| 30 | Random Walks II: Graphs and Hitting Times | coming up soon |
| 31 | Random Walks III: Mixing Time and Couplings | coming up soon |
If you use or adapt this book, please cite it as:
Sepehr Assadi. Adventures in Advanced Algorithms: A Guide for Curious Students. 2026. Open educational resource, sepehr.assadi.info/advanced-algorithms.
@book{assadi2026adventures,
author = {Sepehr Assadi},
title = {Adventures in Advanced Algorithms: A Guide for Curious Students},
year = {2026},
note = {Open educational resource. Licensed under CC BY-NC-SA 4.0},
url = {https://sepehr.assadi.info/advanced-algorithms/}
}