# The complexity class BPP

## Definition

The complexity class BPP is, very roughly, the class of all problems for which there is a randomized algorithm that runs in polynomial time and almost always gives the right answer.

A slightly more formal definition is the following. A Boolean function $f:\bigcup_{n=1}^\infty\{0,1\}^n\rightarrow\{0,1\}$ belongs to BPP if there is a randomized polynomial-time algorithm such that for any x such that f(x)=1 it will output 1 with probability at least 2/3, and for any x such that f(x)=0 it will output 0 with probability at least 2/3. This may not sound like "almost always" getting the right answer, but if you run the algorithm repeatedly and take a majority vote to determine the answer, the chance of making an error decreases exponentially with the number of times the algorithm is run.

## Examples

The problem of determining whether a multivariate polynomial vanishes is in BPP. The idea of the randomized algorithm is to compute the polynomial at a small number of randomly chosen points. For a non-zero polynomial the probability that it vanishes at all those points decreases rapidly with the number of points, and so if it vanishes at all those points we can say with some confidence that the polynomial vanishes everywhere.