## Course Meeting Times

Lectures: 2 sessions / week, 1.5 hour / session

## Motivation

The last two decades have witnessed a tremendous growth in the area of randomized algorithms. During this period, randomized algorithms went from being a tool in computational number theory to finding widespread application in many types of algorithms. Two benefits of randomization have spearheaded this growth: simplicity and speed. This course presents the basic concepts in the design and analysis of randomized algorithms at a level accessible to advanced undergraduates and to graduate students.

Our aim is to touch upon various branches of the study of randomized algorithms--a consequence is that we will not linger too long on any one of them. This course aims to confer:

- some familiarity with several of the main thrusts of work in randomized algorithms--giving you context for formulating and seeking known solutions to an algorithmic problem;
- sufficient background and facility to let you read current research publications in the area;
- a set of tools for design and analysis of new algorithms for new problems that you encounter.

## Content

The course has two main themes. The first is basic tools from probability theory and probabilistic analysis that are recurrent in algorithmic applications. The second is specific areas of application. Tools will be interleaved with applications that illustrate them in concrete settings.

The goal is for the course to be broad rather than deep. I aim to touch upon many of the following areas. I will adapt based on our background, interests, and rate of progress.

## Tools and Techniques

Basic probability theory; randomized complexity classes; game-theoretic techniques; Markov, Chebyshev, and moment inequalities; limited independence; coupon collection and occupancy problems; tail inequalities and the Chernoff bound; conditional expectation; the probabilistic method; Markov chains and random walks; algebraic techniques; probability amplification and derandomization.

## Applications

Sorting and searching; data structures; combinatorial optimization and graph algorithms; geometric algorithms and linear programming; approximation and counting problems; parallel and distributed algorithms; online algorithms.

## Prerequisites

Undergraduate courses in Algorithms (6.046J) and in Probability Theory (6.041 or 6.042). Complexity Theory (6.045J) is a bonus but will never be necessary.

## Textbooks

### Required

Motwani, and Raghavan. *Randomized Algorithms*. Cambridge, UK: Cambridge University Press, 1995. ISBN: 0521474655.

### Optional

Feller, William. *An Introduction to Probability Theory and Its Applications*.Vol. 1. New York, NY: John Wiley, 1968. ISBN: 0471257087. (This book is fairly old but adorns the shelves of most theoretical computer scientists.)

## Requirements

### Homework (65%)

There will be one homework assignment every week. Collaboration on solving homeworks is strongly encouraged. However, each person must independently write up their own solution. You must list all collaborators on your homework. You may not seek out answers from other sources without prior permission. In particular, no bibles.

### Independent Homework (15%)

At the midpoint and possibly the end of the class, the week's homework will be somewhat easier than usual but must be solved alone. No collaboration is permitted on these two problem sets. Their primary objective is to ensure that you have internalized the material so you can understand it without the help of others.

### Reading/Research/Implementation Project (15%)

You will carry out a study or implementation of a randomized algorithm and write a brief (10 page) report on it. You will be graded on both your progress and your writeup. If the project is large it may be tackled by a group. Your project can be either basic or applied:

Basic Project:

- Read a new (not yet textbook) algorithm from the recent research literature, and improve upon it in via some mixture of the following:
- Write a description of greater clarity than the original publication, or
- Devise an improved solution to the problem under consideration, and write up your improvement (with appropriate discussion of the original algorithm).
- Implement the algorithm in order to study its performance in practice. Considerations include choice of algorithm, design of good tests, interpretation of results, and design and analysis of heuristics for improving performance in practice.

Applied Project:

Use a randomized algorithm or technique to solve a problem drawn from your own research area. The randomized algorithm may be classical (textbook) if it is applied in a novel manner. Alternatively, you may need to develop a new randomized algorithm to solve your problem. Considerations are similar to those for a basic implementation project above.

### Grading (5%)

You will help grade one problem set. Expect to grade one problem.

## Collaboration Policy

Collaboration is encouraged on all aspects of the class, except where explicitly forbidden.

Note:

- All collaboration (who and what) must be clearly indicated in writing on anything turned in.
- Homeworks may be solved collaboratively, but solutions must be written up independently.
- Every collaborator must contribute significantly to reading, implementation, and writeup in the projects. To allow this, project groups should limit their size to 3 unless the project is unusually large.