Parsimonious reduction
Parsimonious reduction
In computational complexity theory and game-complexity, a parsimonious reduction is a transformation from one problem to another (a reduction) that preserves the number of solutions. Informally, it is a bijection between the respective sets of solutions of two problems. A general reduction from problem <math>A</math> to problem <math>B</math> is a transformation that guarantees that whenever <math>A</math> has a solution <math>B</math> also has at least one solution and vice versa. A parsimonious reduction guarantees that for every solution of <math>A</math>, there exists a unique solution of <math>B</math> and vice versa.
Parsimonious reductions are commonly used in computational complexity for proving the hardness of counting problems, for counting complexity classes such as #P. Additionally, they are used in game complexity, as a way to design hard puzzles that have a unique solution, as many types of puzzles require.
Formal definition A parsimonious reduction <math>R</math> from problem <math>X</math> to problem <math>Y</math> is a reduction such that for each instance <math>x</math> of <math>X</math>, the number of solutions to <math>x</math> is equal to the number of solutions to the instance <math>R(x)</math> of <math>Y</math>. If such a reduction exists, and if we have an oracle that counts the number of solutions to any given instance of <math>Y</math>, then we can design an algorithm that counts the number of solutions to any given instance of <math>X</math>. Consequently, if counting the number of solutions to the instances of <math>X</math> is hard, then counting the number of solutions to <math>Y</math> must be hard as well.
Applications Just as many-one reductions are important for proving NP-completeness, parsimonious reductions are important for proving completeness for counting complexity classes such as #P.
Specific types of parsimonious reductions may be defined by the computational complexity or other properties of the transformation algorithm. For instance, a polynomial-time parsimonious reduction is one in which the transformation algorithm takes polynomial time. These are the types of reduction used to prove #P-completeness.
Polynomial-time parsimonious reductions are a special case of a more general class of reductions for counting problems, the polynomial-time counting reductions.
One common technique used in proving that a reduction <math>R</math> is parsimonious is to show that there is a bijection between the set of solutions to <math>x</math> and the set of solutions to <math>R(x)</math>, which guarantees that the number of solutions to both problems is the same.