P/poly

In computational complexity theory, P/poly is a complexity class representing problems that can be solved by small circuits. More precisely, it is the set of formal languages that have polynomial-size circuit families. It can also be defined equivalently in terms of Turing machines with advice, extra information supplied to the Turing machine along with its input, that may depend on the input length but not on the input itself. In this formulation, P/poly is the class of decision problems that can be solved by a polynomial-time Turing machine with advice strings of length polynomial in the input size.[1][2] These two different definitions make P/poly central to circuit complexity and non-uniform complexity.

For example, the popular Miller–Rabin primality test can be formulated as a P/poly algorithm: the "advice" is a list of candidate values to test. It is possible to precompute a list of values such that every composite n-bit number will be certain to have a witness a in the list.[3] For example, to correctly determine the primality of 32-bit numbers, it is enough to test .[4][5] The existence of short lists of candidate witnesses follows from the fact that for each composite n, three out of four candidate values successfully detect that n is composite. From this, a simple counting argument similar to the one in the proof that below shows that there exists a suitable list of candidate values for every input size, and more strongly that most long-enough lists of candidate values will work correctly, although finding a list that is guaranteed to work may be expensive.[3]

P/poly, unlike other polynomial-time classes such as P or BPP, is not generally considered a practical class for computing. Indeed, it contains every undecidable unary language, none of which can be solved in general by real computers. On the other hand, if the input length is bounded by a relatively small number and the advice strings are short, it can be used to model practical algorithms with a separate expensive preprocessing phase and a fast processing phase, as in the Miller–Rabin example.

  1. ^ Cite error: The named reference lutz93 was invoked but never defined (see the help page).
  2. ^ Lecture notes on computational complexity by Peter Bro Miltersen (PDF), archived from the original (PDF) on 2012-02-23, retrieved 2009-12-25
  3. ^ a b Goldreich, Oded; Wigderson, Avi (2002), "Derandomization that is rarely wrong from short advice that is typically good", in Rolim, José D. P.; Vadhan, Salil P. (eds.), Randomization and Approximation Techniques, 6th International Workshop, RANDOM 2002, Cambridge, MA, USA, September 13-15, 2002, Proceedings, Lecture Notes in Computer Science, vol. 2483, Springer, pp. 209–223, doi:10.1007/3-540-45726-7_17, ECCC TR02-39
  4. ^ Caldwell, Chris, "2.3: Strong probable-primality and a practical test", Finding primes & proving primality
  5. ^ Jaeschke, Gerhard (1993), "On strong pseudoprimes to several bases", Mathematics of Computation, 61 (204): 915–926, doi:10.2307/2153262, MR 1192971; see p. 926.