COURSE DESCRIPTION
In this course we will study how randomness helps in designing algorithms and how randomness can be removed from algorithms.We will start by formalizing computation in terms of algorithms and circuits. We will see an example of randomized algorithms, identity testing, and prove that eliminating randomness would require proving hardness results. We then prove a hardness result for the problem of parity using randomized methods. We construct certain graphs called expanders that are useful in reducing randomness in algorithms. These lead to a surprising logarithmic-space algorithm for checking connectivity in graphs.
We show that if there is hardness in nature then randomness cannot exist! This we prove by developing pseudo-random generators and error-correcting codes. We show how to extract randomness from a weakly random source by using extractors. Finally, if time allows, we discuss how to probabilistically check proofs (PCP) and prove the hardness of approximating some NP-hard problems.
Prerequisites: Theory of Computation, Algebra.
Text Book: Sanjeev
Arora and Boaz Barak, Computational Complexity: A Modern
Approach, http://www.cs.princeton.edu/theory/complexity/
RECENT UPDATE
[21-Nov'23] End-Sem Exam posted.[28-Oct'23] Assignment 4 posted.
[04-Oct'23] Assignment 3 posted.
[21-Sep'23] Mid-Sem Exam posted.
[01-Sep'23] Assignment 2 posted.
[08-Aug'23] Assignment 1 posted.
[26-Jul'23] Course begins on Mon, 31-Jul'23.