# Sharp-P-complete

**#P-complete**, pronounced "sharp P complete" or "number P complete" is a complexity class in computational complexity theory. By definition, a problem is **#P-complete** if and only if it is in **#P**, and every problem in **#P** can be reduced to it by a polynomial-time counting reduction, i.e. a polynomial-time Turing reduction relating the cardinalities of solution sets. In some cases parsimonious reductions, a more specific type of reduction that preserves the exact number of solutions, is used.
For either type of reduction, a problem is **#P-complete** if and only if it is in **#P**, and for any polynomial time non-deterministic Turing machine, the problem of computing its number of accepting paths has a polynomial-time reduction to this problem.

Examples of **#P-complete** problems include:

- How many different variable assignments will satisfy a given general boolean formula? (#SAT)
- How many different variable assignments will satisfy a given DNF formula?
- How many different variable assignments will satisfy a given 2SAT formula?
- How many perfect matchings are there for a given bipartite graph?
- What is the value of the permanent of a given matrix whose entries are 0 or 1? (See Permanent is sharp-P-complete.)
- How many graph colorings using
*k*colors are there for a particular graph*G*? - How many different linear extensions are there for a given partial order, or, equivalently, how many different topological orderings are there for a given directed acyclic graph?
^{[1]}

A polynomial-time algorithm for solving a **#P-complete** problem, if it existed, would imply **P** = **NP**, and thus **P** = **PH**. No such algorithm is currently known.

## Easy problems with hard counting versions[edit]

It is surprising that some **#P-complete** problems correspond to easy **P** problems. It is very easy to determine the satisfiability of a boolean formula in DNF: such a formula is satisfiable if and only if it contains a satisfiable conjunction (one that does not contain a variable and its negation), whereas counting the number of satisfying assignments is **#P**-complete. Also deciding 2-SAT is easy in contrast to counting the number of satisfying assignments. Topologically sorting is easy in contrast to counting the number of topological sortings. The same observation can be made for the perfect matching problem. It was known before that the decision problem "Is there a perfect matching for a given bipartite graph?" can be solved in polynomial time, and in fact, for a graph with *V* vertices and *E* edges, it can be solved in O(*VE*) time. The corresponding question "How many perfect matchings does the given bipartite graph have?" is already **#P-complete**. The problem of counting the number of perfect matchings (or in directed graphs: the number of vertex cycle covers) is known to be equivalent to the problem of the computation of the permanent of a matrix. The perfect matching counting problem was the first counting problem corresponding to an easy **P** problem shown to be **#P-complete**, in a 1979 paper by Leslie Valiant which also defined the classes #P and **#P-complete** for the first time.^{[2]}

## Approximation[edit]

There are probabilistic algorithms that return good approximations to some **#P-complete** problems with high probability. This is one of the demonstrations of the power of probabilistic algorithms.

Many **#P-complete** problems have a fully polynomial-time randomized approximation scheme, or "FPRAS," which, informally, will produce with high probability an approximation to an arbitrary degree of accuracy, in time that is polynomial with respect to both the size of the problem and the degree of accuracy required. Jerrum, Valiant, and Vazirani showed that every **#P-complete** problem either has an FPRAS, or is essentially impossible to approximate; if there is any polynomial-time algorithm which consistently produces an approximation of a **#P-complete** problem which is within a polynomial ratio in the size of the input of the exact answer, then that algorithm can be used to construct an FPRAS.^{[3]}

## References[edit]

**^**Brightwell, Graham R.; Winkler, Peter (1991). "Counting linear extensions".*Order*.**8**(3): 225–242. doi:10.1007/BF00383444..**^**Leslie G. Valiant (1979). "The Complexity of Computing the Permanent".*Theoretical Computer Science*. Elsevier.**8**(2): 189–201. doi:10.1016/0304-3975(79)90044-6.**^**Mark R. Jerrum; Leslie G. Valiant; Vijay V. Vazirani (1986). "Random Generation of Combinatorial Structures from a Uniform Distribution".*Theoretical Computer Science*. Elsevier.**43**: 169–188. doi:10.1016/0304-3975(86)90174-x.

## Further reading[edit]

- Vazirani, Vijay V. (2003).
*Approximation Algorithms*. Berlin: Springer. ISBN 3-540-65367-8.