|
|
| Line 1: |
Line 1: |
| In [[computational complexity theory]], '''P/poly''' is the [[complexity class]] of [[formal language|languages]] recognized by a polynomial-time [[Turing machine]] with a polynomial-bounded [[advice (complexity)|advice]] function. It is also equivalently defined as the class '''PSIZE''' of languages that have a polynomial-size circuits.<ref>{{Citation | last1=Lutz | first1=Jack H. | last2=Schmidt | first2=William J. | title=Circuit size relative to pseudorandom oracles | publisher=Elsevier Science Publishers Ltd. | location=Essex, UK | year=1993 | journal=Theor. Comput. Sci. | issn=0304-3975 | volume=107 | issue=1 | pages=95–120}}</ref><ref>[http://www.daimi.au.dk/~bromille/CT06/complex3.pdf Lecture notes on computational complexity by Peter Bro Miltersen]</ref> This means that the machine that recognizes a language may use a different advice function or use a different circuit depending on the length of the input, and that the advice function or circuit will vary only on the size of the input.
| | Let me first begin by introducing myself. My name is Boyd Butts even though it is not the title on my beginning certificate. Years ago we moved to Puerto Rico and my family enjoys it. My working day job is a meter reader. What I adore performing is taking part in baseball but I haven't made a dime with it.<br><br>Feel free to visit my website [http://wiki.fristik.sk/doku.php?id=profile_estherdesaillly at home std testing] |
| | |
| For example, the popular [[Miller-Rabin primality test]] can be formulated as a '''P/poly''' algorithm: the "advice" is a list of candidate ''a'' values to test. It is possible to precompute a list of at most ''n'' values such that every composite ''n''-bit number will be certain to have a witness ''a'' in the list. For example, if we're testing a 32-bit number, it is enough to test ''a'' = 2, 7, and 61.<ref>[http://primes.utm.edu/prove/prove2_3.html Finding primes & proving primality]</ref> This follows from the fact that for each composite ''n'', 3/4s of all possible ''a'' values are witnesses; a simple counting argument similar to the one in the proof that '''BPP''' in '''P/poly''' below shows that there ''exists'' a suitable list of ''a'' values for every input size, although finding it may be expensive.
| |
| | |
| Note that '''P/poly''', unlike other polynomial-time classes such as '''[[P (complexity)|P]]''' or '''[[Bounded-error probabilistic polynomial|BPP]]''', is not generally considered a practical class for computing. Indeed, it contains every [[undecidable problem|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 example above.
| |
| | |
| == Importance of P/poly ==
| |
| | |
| '''P/poly''' is an important class for several reasons. For theoretical computer science, there are several important properties that depend on '''P/poly''':
| |
| | |
| *If '''[[NP (complexity)|NP]]''' ⊆ '''P/poly''' then '''PH''' (the [[polynomial hierarchy]]) collapses to <math>\Sigma_2^{\rm P}</math>. This result is the [[Karp–Lipton theorem]]; furthermore, '''NP''' ⊆ '''P/poly''' implies '''[[Arthur-Merlin protocol|AM]]''' = '''MA''' <ref>[http://www.informatik.hu-berlin.de/forschung/gebiete/algorithmenII/Publikationen/Papers/ma-am.ps.gz If NP has Polynomial-Size Circuits, then MA = AM]</ref>
| |
| *If '''[[PSPACE]]''' ⊆ '''P/poly''' then '''PSPACE''' = <math>\Sigma_2^{\rm P} \cap \Pi_2^{\rm P}</math>, even '''PSPACE''' = '''MA'''.
| |
| :Proof: Consider a language ''L'' from '''PSPACE'''. It is known that there exists an [[IP (complexity)|interactive proof system]] for ''L'', where actions of the prover can be carried out by a '''PSPACE''' machine. By assumption, the prover can be replaced by a polynomial-size circuit. Therefore, ''L'' has a '''MA''' protocol: Merlin sends the circuit as proof, and Arthur can simulate the '''IP''' protocol himself without any additional help.
| |
| *If '''P<sup>[[Sharp P|#P]]</sup>''' ⊆ '''P/poly''' then '''P<sup>#P</sup>''' = '''MA'''.<ref>[http://www.cs.uchicago.edu/files/tr_authentic/TR-91-10.ps Non-deterministic Exponential Time has Two-Prover Interactive Protocols]</ref> The proof is similar to above, based on an interactive protocol for permanent and [[Permanent is sharp-P-complete|#P-completeness of permanent]].
| |
| *If '''[[EXPTIME]]''' ⊆ '''P/poly''' then '''EXPTIME''' = <math>\Sigma_2^{\rm P} \cap \Pi_2^{\rm P}</math> (Meyer's theorem), even '''EXPTIME''' = '''MA'''.
| |
| *If '''[[NEXPTIME]]''' ⊆ '''P/poly''' then '''NEXPTIME''' = '''EXPTIME''', even '''NEXPTIME''' = '''MA'''. Conversely, '''NEXPTIME''' = '''MA''' implies '''NEXPTIME''' ⊆ '''P/poly'''<ref>[http://www.math.ias.edu/~avi/PUBLICATIONS/MYPAPERS/IKW02/IKW02.pdf In Search of an Easy Witness: Exponential Time vs. Probabilistic Polynomial Time]</ref>
| |
| *If '''EXP'''<sup>'''NP'''</sup> ⊆ '''P/poly''' then '''EXP'''<sup>'''NP'''</sup> = <math>\Sigma_2^{\rm P} \cap \Pi_2^{\rm P}</math> (Buhrman, Homer) <ref>[http://cse.unl.edu/~cbourke/pubs/EXPnote.pdf A Note on the Karp-Lipton Collapse for the Exponential Hierarchy]</ref>
| |
| * It is known that '''MA'''<sub>EXP</sub>, an exponential version of '''[[Arthur-Merlin protocol|MA]]''', is not contained in '''P/poly'''.
| |
| : Proof: If '''MA'''<sub>EXP</sub> ⊆ '''P/poly''' then '''PSPACE''' = '''MA''' (see above). By [[padding argument|padding]], '''EXPSPACE''' = '''MA'''<sub>EXP</sub>, therefore '''EXPSPACE''' ⊆ '''P/poly''' but this can be proven false with diagonalization.
| |
| | |
| One of the most interesting reasons that '''P/poly''' is important is the property that if '''NP''' is not a subset of '''P/poly''', then '''P''' ≠ '''NP'''. This observation was the center of many attempts to prove '''P''' ≠ '''NP'''.
| |
| | |
| '''P/poly''' is also used in the field of [[cryptography]]. Security is often defined 'against' '''P/poly''' adversaries. Besides including most practical models of computation like '''BPP''', this also admits the possibility that adversaries can do heavy precomputation for inputs up to a certain length, as in the construction of [[rainbow table]]s.
| |
| | |
| Although not all languages in '''P/poly''' are [[sparse language]]s, there is a [[polynomial-time Turing reduction]] from any language in '''P/poly''' to a sparse language.<ref>Jin-Yi Cai. [http://pages.cs.wisc.edu/~jyc/02-810notes/lecture11.pdf Lecture 11: P/poly, Sparse Sets, and Mahaney's Theorem]. CS 810: Introduction to Complexity Theory. The University of Wisconsin–Madison. September 18, 2003.</ref>
| |
| | |
| == Adleman's theorem ==
| |
| Adleman's theorem, proved by [[Leonard Adleman]], states that '''[[Bounded-error probabilistic polynomial|BPP]]''' ⊆ '''P/poly''', where '''BPP''' is the set of problems solvable with randomized algorithms with two-sided error in polynomial time.<ref>{{citation
| |
| | last = Adleman | first = L. M. | author-link = Leonard Adleman
| |
| | contribution = Two theorems on random polynomial time
| |
| | doi = 10.1109/SFCS.1978.37
| |
| | pages = 75–83
| |
| | title = [[Symposium on Foundations of Computer Science|Proceedings of the Nineteenth Annual IEEE Symposium on Foundations of Computer Science]]
| |
| | year = 1978}}</ref>
| |
| Variants of the theorem show that '''[[BPL (complexity)|BPL]]''' is contained in '''[[L/poly]]''' and '''AM''' is contained in '''NP/poly'''.
| |
| | |
| === Proof ===
| |
| | |
| Let ''L'' be a language in '''BPP''', and let ''M''(''x'',''r'') be a polynomial-time algorithm that decides ''L'' with error ≤ 1/3 (where ''x'' is the input string and ''r'' is a set of random bits).
| |
| | |
| Construct a new machine ''M{{'}}''(''x'',''R''), which runs ''M'' 18''n'' times (where ''n'' is the input length and ''R'' is a sequence of 18''n'' independently random ''r''s). Thus, ''M{{'}}'' is also polynomial-time, and has an error probability ≤ 1/''e''<sup>''n''</sup> by Chernoff's bound (see [[Bounded-error probabilistic polynomial|BPP]]). If we can fix ''R'' then we obtain an algorithm that is deterministic.
| |
| | |
| If Bad(''x'') is defined as {''R'': ''M{{'}}''(''x'',''R'') is incorrect}, we have:
| |
| | |
| :<math>\forall x\, \mbox{Prob}_R[R \in \mbox{Bad}(x)] \leq \frac{1}{e^n}.</math>
| |
| | |
| The input size is ''n'', so there are 2<sup>''n''</sup> possible inputs. Thus, the probability that a random ''R'' is bad for at least one input ''x'' is
| |
| | |
| :<math>\mbox{Prob}_R [\exists x\,R \in \mbox{Bad}(x)] \leq \frac{2^n}{e^n} < 1.</math>
| |
| | |
| In words, the probability that ''R'' is bad for some ''x'' is less than 1, therefore there must be an ''R'' that is good for all ''x''. Take such an ''R'' to be the advice string in our '''P/poly''' algorithm.
| |
| | |
| ==See also==
| |
| *[[L/poly]], a [[logarithmic space]] analogue of P/poly that captures the complexity of polynomial size [[branching program]]s
| |
| | |
| ==References==
| |
| {{Reflist}}
| |
| | |
| {{ComplexityClasses}}
| |
| | |
| {{DEFAULTSORT:P poly}}
| |
| [[Category:Complexity classes]]
| |
Let me first begin by introducing myself. My name is Boyd Butts even though it is not the title on my beginning certificate. Years ago we moved to Puerto Rico and my family enjoys it. My working day job is a meter reader. What I adore performing is taking part in baseball but I haven't made a dime with it.
Feel free to visit my website at home std testing