Communication Complexity (for Algorithm Designers) collects the lecture notes from the author's eponymous course taught at Stanford in the winter quarter of 2015. The two primary goals of the text are: (1) Learn several canonical problems in communication complexity that are useful for proving lower bounds for algorithms (Disjointness, Index, Gap-Hamming, and so on). (2) Learn how to reduce lower bounds for fundamental algorithmic problems to communication complexity lower bounds.
Along the way, readers will also get exposure to a lot of cool computational models and some famous results about them - data streams and linear sketches, compressive sensing, space-query time trade-offs in data structures, sublinear-time algorithms, and the extension complexity of linear programs. Readers are assumed to be familiar with undergraduate-level algorithms, as well as the statements of standard large deviation inequalities (Markov, Chebyshev, and Chernoff- Hoeffding).