Probability and computing: randomized algorithms and probabilistic analysis

Randomized algorithms (making random choices during their execution) play an important role in modern computer science, with applications ranging from combinatorial optimization and machine learning to communications networks and secure protocols. Two advantages of randomization over determinism are crucial in the design of algorithms: simplicity and speed. For many applications, a randomized algorithm is often the simplest algorithm available, the fastest, or both.