Probabilistic methods have become an integral part of theoretical computer science. Typically, the use of randomization leads to solutions which are simple, elegant and more efficient than deterministic algorithms. A new research paradigm in randomized computation is to treat random bits as a resource and design algorithms which use random bits efficiently. The motivations for this approach are that algorithms which use fewer random bits are easier to implement. Also, algorithms using very few random bits can be made deterministic. For several problems all known efficient deterministic algorithms are obtained by this process of derandomization. We design new probabilistic techniques that are used to develop randomness--efficient algorithms...