CME 323: Distributed Algorithms and OptimizationSpring 2016, Stanford UniversityMon, Wed 1:30 PM  2:50 PM at Braun Lecture Hall, Mudd Chemistry Building Instructor: Reza Zadeh
The emergence of large distributed clusters of commodity machines has brought with it a slew of new algorithms and tools. Many fields such as Machine Learning and Optimization have adapted their algorithms to handle such clusters. The class will cover widely used distributed algorithms in academia and industry. The course will begin with an introduction to fundamentals of parallel and distributed runtime analysis. Afterwards, we will cover distributed algorithms for:
Class FormatWe will focus on the analysis of parallelism and distribution costs of algorithms. Sometimes, topics will be illustrated with handson exercises using Apache Spark. Prerequisites: Targeting graduate students having taken Algorithms at the level of CME 305 or CS 261. Being able to competently program in any mainstream high level language. There will be homeworks, a midterm, one scribed lecture, and a project.
Grade Breakdown: The midterm will be Monday May 2nd in class Required textbook: Parallel Algorithms by Guy E. Blelloch and Bruce M. Maggs [BB]
Optional textbooks: HomeworkHomework 1 [pdf] [tex] Due April 11th. [Solution] Homework 2 [pdf] [tex] Due April 27th. [Solution] Homework 3 [pdf] [tex] Due May 18th. [Solution] Homework 4 [pdf] [tex] Due May 25th. [Solution] Lectures and References
ProjectsAmy Shoemaker and Sagar Vare: Edmonds' Blossom algorithm. [slides][report][Github] Sebastian Dubois and Sebastien Levy: Distributed Lasso. [slides][report] Alex Adamson: GloVe on Spark. [slides][report][Github] Wissam Baalbaki: Largescale matrix factorization with distributed stochastic gradient descent: implementation in Spark and testing on Netflix movie recommendation. [slides][report] Jan Bae: Distributed graph coloring. [slides][report] Irwan Bello: Asynchronous lockfree parallel Deep Reinforcement Learning. [slides] Max Bodoia: MapReduce algorithms for kmeans clustering. [slides][report] Erik Burton: Parallel HeldKarp algorithm for the Hamiltonian cycle problem. [slides][report] YiChun Chen and YuSheng Chen: A distributed implementation for Reinforcement Learning. [slides][report] Henry Ehrenberg: Gibbs PRAMpling. [slides][report][Github] David Flatow and Daniel Penner: A distributed algorithm for global mincut. [slides][report] Rolland He: PARADIS: a parallel inplace radix sort algorithm. [slides][report][Github] Vishakh Hedge and Sheema Usmani: Parallel and distributed learning. [slides][report] Xin Jin: Parallel auction algorithm for linear assignment problem. [slides][report][Github] Stephen Kline and Kevin Shaw: Distributed CUR decomposition for biclustering. [slides][report] Christopher Kurrus and Henry Neeb: Distributed knearest neighbors. [slides][report] Patrick Landreman: Alternative least squares in Spark. [slides][report] TingPo Lee and Taman Narayan: Distributed language models using RNNs. [slides][report][Github] Nikhil Parthasarathy and Pin Pin TeaMangkornpan: Lowrank matrix factorization using distributed SGD in Spark. [slides][report][Github] Milind Rao: Distributed multiarmed bandits. [slides][report] Jayanth Ramesh and Suhas Suresha: Convex hull  parallel and distributed algorithms. [slides][report] Alfredo Lainez Rodrigo and Luke de Oliveira: Distributed Bayesian personalized ranking in Spark. [slides][report][Github] Victor Storchan: Parallel sparse kmeans for document clustering. [slides][report][Github] Alex Williams: Initializing nonnegative matrix factorizations on distributed architectures. [slides][report] Hao Wu: Generalized linear models in collaborative filtering. [slides][report] Previous YearsSpring 2015: [class webpage] 
