|
You probably heard about the recent breakthrough in computer science -
the discovery of
an
efficient deterministic algorithm for testing primality.
This course is about the paradigms underpinning that and several
other discoveries, namely randomness and derandomization.
|
|
Over the past few decades, randomness has become one of the most
pervasive tools in computer science. Its widespread use includes
algorithm design, complexity theory, cryptography, and network
protocols. Randomized solutions often perform better than the
best known deterministic solutions, and/or are more elegant and
simpler to implement. As was the case for primality testing until
August 4, the quest for efficient deterministic solutions
typically remains open. A promising approach is derandomization:
reducing the need for randomness and eliminating it completely
at a marginal cost in performance.
|
|
The first part of this course will be devoted to the various uses
of randomness in computer science. Although our treatment cannot
be exhaustive, we will cover paradigms from all application areas.
|
|
The second part will be on derandomization and the related question
of how to obtain the randomness we need. A randomized procedure
usually assumes access to a lot of unbiased uncorrelated random
bits. These may be hard to obtain physically. We will cover two
constructs that come to rescue: pseudorandom generators and
extractors. Pseudorandom generators are deterministic algorithms
that stretch a short seed of truly random bits into a long
sequence of ``pseudorandom'' bits, which the randomized procedure
cannot distinguish from truly random. They allow us to reduce
the number of truly random bits needed. Extractors are algorithms
that extract almost uniformly distributed bits from sources of
biased and correlated bits. They allow us to run randomized
procedures when we only have access to imperfect physical sources
of randomness.
|
|
The precise balance between to two parts of the course will depend
on the interest of the students.
|