Fall 2011

Instructor: Adam Smith

Course Information

Randomness has proven to be a critical tool in several fields of
computer science: algorithm design, cryptography, coding for noisy
channels, and complexity theory, to name a few. Most of these
applications, however, assume a source of independent and unbiased
random bits, which may not always be available. Moreover, in many of
the applications, randomization provides a method of showing that some
required object (a code or graph with special properties, for example)
*exists*, but doesn't provide an efficient way of constructing or
using the object.

The last twenty years have seen the extensive development of a theory of "pseudorandom" combinatorial objects that can replace truly random analogues yet can be constructed efficiently and deterministically. This course will cover a variety of such objects and their applications in computational complexity and cryptography. Specifically, we will discuss:

- Pseudorandom Generators
- Randomness Extractors
- Expander Graphs
- Error-Correcting Codes

We will discuss each of these objects individually -- what properties are important, typical examples -- but we will also seek to understand the relationships between them. Several of the breakthroughs in recent research have common from the realization that constructions of these objects are equivalent in certain settings.

The course is based on a course taught several times by
Salil Vadhan at Harvard. (In particular, some of the text of this page
is based on similar descriptive text written by Vadhan.) *The main difference will be that this course
will place more emphasis on applications in cryptography.*
The text for the course will be the recent monograph by Vadhan,
*Pseudorandomness*. I
will add notes on the applications to cryptography as appropriate.

The most important prerequisites are general mathematical maturity (reading/writing proofs, understanding abstractions, filling in routine steps) and a good background in the theory of computation. A concrete guideline is that you should have had a minimum of two previous courses in "theoretical" computer science (e.g., algorithms, computational complexity, or cryptography) where emphasis was placed on proofs and problem-solving. Math and EE students: If you have strong pure math background, then I can be felxibile with prerequisite courses but, in that case, you should discuss your background with me in person.

I will assume familiarity with the following topics:

- Complexity Theory
- P, NP, NP-completeness, reductions (as in CMPSC 464).
- Randomized Algorithms
- Exposure to some randomized algorithms (e.g., as covered in CSE 565, or courses that analyze primality-testing algorithms rigorously).
- Algebra
- The basics of groups, (finite) fields, vector spaces, eigenvectors/eigenvalues.
- Discrete math
- Basic probability, graph theory and combinatorics.

Auditors are welcome but must be wiling to do readings for class. Please ask to be added to the Angel mailing list if you plan to attend regularly.

- Homework (collaboration allowed, see below)
- Take-home exam (no collaboration)
- In-class presentation of a research paper: every student will have to read and present a research paper related to the topic of the class. The paper will have to be selected approximately one month before the end of the course. Presentations will take place during the last week of class.
- In-class participation and discussion

Collaboration on homework problems, with the exception of
programming assignments, is permitted, but not encouraged. If you
choose to collaborate on some problems, you are allowed to discuss
each problem with at most 3 other students currently enrolled in the
class. Before working with others on a problem, you should think about it
yourself for at least an hour. *Finding answers to problems on the
Web or from other outside sources (these include anyone not enrolled
in the class) is strictly forbidden.*

You must write up each problem solution by yourself without assistance, even if you collaborate with others to solve the problem. You must also identify your collaborators. If you did not work with anyone, you should write "Collaborators: none." It is a violation of this policy to submit a problem solution that you cannot orally explain to an instructor or TA.

*No collaboration whatsoever is permitted on exams or quizzes.*

Violations of this policy will be dealt with according to University regulations.