can every randomized algorithm be derandomized? among the most important modern algorithmic techniques is the use of random decisions. starting in the 1970's, many of the most significant results were randomized algorithms solving basic compuatational problems that had (to that time) resisted efficient deterministic computation. (ber72, ss79, rab80, sch80, zip79, akllr). in contrast, many of the most exciting recent work has been on derandomizing these same algorithms, coming up with efficient deterministic versions, e.g., (aks02, rein05). this raises the question, can such results be obtained for all randomized algorithms? will the remaining classical randomized algorithms be derandomized by similar techniques?clear but complicated answers to these questions have emerged from complexity-theoretic studies of randomized complexity classes (e.g., rp and bpp) and pseudo-random generators. these questions are inextricably linked to another basic problem in complexity: which functions require large circuits to compute?in this talk, we'll survey some results from the theory of derandomization. i'll stress connections to other questions, especially circuit complexity, explicit extractors, hardness amplification, and error-correcting codes. much of the talk is based on joint work with valentine kabanets and avi wigderson, but it will also include results by many other researchers.a priori, possibilities concerning the power of randomized algorithms include:randomization always helps speed up intractable problems, i.e., exp=bpp.the extent to which randomization helps is problem-specific. depending on the problem, it can reduce complexity by any amount from not at all to exponentially.true randomness is never needed, and random choices can always be simulated deterministically, i.e., p=bpp..either of the last two possibilities seem plausible, but most consider the first wildly implausible. however, while a strong version of the middle possibility has been ruled out, the implausible first one is still open. recent results indicate both that the last, p=bpp, is both very likely to be the case and very difficult to prove.more precisely: either no problem in e has strictly exponential circuit complexity or p=bpp. this seems to be strong evidence that, in fact, p=bpp, since otherwise circuits can always shortcut computation time for hard problems. (nw, bfnw, iw97, stv01, su01, uma02).either bpp=exp, or any problem in bpp has a deterministic sub-exponential time algorithm that works on almost all instances. in other words, either randomness solves every hard problem, or it does not help exponentially, except on rare instances. this rules out strong problem-dependence, since if randomization helps exponentially for many instances of some problem, we can conclude that it helps exponentially for all intractible problems. (iw98). if rp=p , then either the permanent problem requires super-polynomial algebraic circuits or there is a problem in nexp that has no polynomial-size boolean circuit. (ikw01, ki). that is, proving the last possibility requires one to prove a new circuit lower bound, and so is likely to be difficult. (moreover, we do not need the full hypothesis that p=rp to obtain the same conclusion: it actually suffices that the schwartz-zippel identity testing algorithm be derandomizable. thus, we will not be able to derandomize even the "classic" algorithms without proving circuit lower bounds.)all of these results use the hardness-vs-randomness paradigm introduced by yao (yao82, see also bm, levin): use a hard computational problem to define a small set of "pseudo-random" strings, that no limited adversary can distinguish from random. use these "pseudo-random" strings to replace the random choices in a probabilistic algorithm. the algorithm will not have enough time to distinguish the pseudo-random sequences from truly random ones, and so will behave the same as it would given random sequences.