Articulo de referencia

♯P

En la teoría de la complejidad computacional , la clase de complejidad #P (pronunciada "P fuerte" o, a veces, "P numérica" ​​o "P hash") es el conjunto de problemas de conteo as...

En la teoría de la complejidad computacional , la clase de complejidad #P (pronunciada "P fuerte" o, a veces, "P numérica" ​​o "P hash") es el conjunto de problemas de conteo asociados con los problemas de decisión en el conjunto NP . Más formalmente, #P es la clase de problemas de función de la forma "calcular f ( x )", donde f es el número de caminos de aceptación de una máquina de Turing no determinista que se ejecuta en tiempo polinomial . A diferencia de la mayoría de las clases de complejidad conocidas, no es una clase de problemas de decisión , sino una clase de problemas de función . Los problemas más difíciles y representativos de esta clase son #P-completos .

Relación con los problemas de decisión

Un problema de decisión NP a menudo se puede plantear de la forma "¿Existen soluciones que satisfagan ciertas restricciones?" Por ejemplo:

Los problemas correspondientes de la función #P preguntan "¿cuántos?" en lugar de "¿hay alguno?". Por ejemplo:

  • ¿Cuántos subconjuntos de una lista de números enteros suman cero?
  • ¿Cuántos ciclos hamiltonianos en un gráfico dado han costado menos de 100?
  • ¿Cuántas asignaciones de variables satisfacen una fórmula CNF dada?
  • ¿Cuántas raíces positivas tienen un polinomio real univariado?

Es evidente que un problema #P debe ser al menos tan difícil como el problema NP correspondiente . Si es fácil contar las respuestas, entonces debe ser fácil determinar si existen: basta con contarlas y comprobar si el recuento es mayor que cero. Algunos de estos problemas, como el conteo de raíces , son lo suficientemente fáciles como para pertenecer a FP , mientras que otros son #P-completos .

Una consecuencia del teorema de Toda es que una máquina de tiempo polinomial con un oráculo #P ( P #P ) puede resolver todos los problemas en PH , toda la jerarquía polinomial . De hecho, la máquina de tiempo polinomial solo necesita realizar una consulta #P para resolver cualquier problema en PH . Esto indica la extrema dificultad de resolver problemas #P -completos de forma exacta.

Sorprendentemente, algunos problemas #P que se consideran difíciles corresponden a problemas P fáciles (por ejemplo, de tiempo lineal) . Para más información sobre esto, consulte #P-completo .

La clase de problema de decisión más cercana a #P es PP , que pregunta si la mayoría (más de la mitad) de las rutas de cálculo aceptan. Esto encuentra el bit más significativo en la respuesta del problema #P . La clase de problema de decisión ⊕P (pronunciado "Paridad-P"), en cambio, pregunta por el bit menos significativo de la respuesta de #P .

Definiciones formales

#P se define formalmente de la siguiente manera:

#P es el conjunto de todas las funcionesF:{0,1}norte{\displaystyle f:\{0,1\}^{*}\to \mathbb {N} }de tal manera que exista una máquina de Turing no determinista de tiempo polinomial.METRO{\displaystyle M}de tal manera que para todosincógnita{0,1}{\displaystyle x\in \{0,1\}^{*}},F(incógnita){\displaystyle f(x)}es igual al número de sucursales que aceptanMETRO{\displaystyle M}gráfico de cálculo deincógnita{\displaystyle x}. [ 1 ]

#P también puede definirse de forma equivalente en términos de un verificador. Un problema de decisión pertenece a NP si existe un certificado verificable en tiempo polinomial para una instancia de problema dada; es decir, NP pregunta si existe una prueba de pertenencia para la entrada que pueda verificarse en tiempo polinomial. Las preguntas en #P preguntan cuántos certificados existen para una instancia de problema que puedan verificarse en tiempo polinomial. [ 1 ] En este contexto, #P se define de la siguiente manera:

#P es el conjunto de funcionesF:{0,1}norte{\displaystyle f:\{0,1\}^{*}\to \mathbb {N} }tal que existe un polinomiopag:nortenorte{\displaystyle p:\mathbb {N} \to \mathbb {N} }y una máquina de Turing determinista de tiempo polinomialV{\displaystyle V}, llamado el verificador, de tal manera que para cadaincógnita{0,1}{\displaystyle x\in \{0,1\}^{*}},F(incógnita)=|{y{0,1}pag(|incógnita|):V(incógnita,y)=1}|{\displaystyle f(x)={\Big |}{\big \{}y\in \{0,1\}^{p(|x|)}:V(x,y)=1{\big \}}{\Big |}}. [ 2 ] (En otras palabras,F(incógnita){\displaystyle f(x)}es igual al tamaño del conjunto que contiene todos los certificados de tamaño polinomial).

Historia

La clase de complejidad #P fue definida por primera vez por Leslie Valiant en un artículo de 1979 sobre el cálculo del permanente de una matriz cuadrada , en el que demostró que el permanente es #P-completo . [ 3 ]

Larry Stockmeyer ha demostrado que para cada problema #PPAG{\displaystyle P}Existe un algoritmo aleatorio que utiliza un oráculo para SAT, que dada una instanciaa{\displaystyle a}dePAG{\displaystyle P}yϵ>0{\displaystyle \epsilon >0}devuelve con alta probabilidad un númeroincógnita{\displaystyle x}de tal manera que(1ϵ)PAG(a)incógnita(1+ϵ)PAG(a){\displaystyle (1-\epsilon )P(a)\leq x\leq (1+\epsilon )P(a)}. [ 4 ] El tiempo de ejecución del algoritmo es polinomial ena{\displaystyle a}y1/ϵ{\displaystyle 1/\epsilon }El algoritmo se basa en el lema hash restante .

Véase también

Referencias

  1. 1 2 Barak, Boaz (Primavera de 2006). "Complejidad del conteo" (PDF) . Ciencias de la Computación 522: Complejidad Computacional . Universidad de Princeton.
  2. Arora, Sanjeev ; Barak, Boaz (2009). Complejidad computacional: un enfoque moderno . Cambridge University Press. pág. 344. ISBN  978-0-521-42426-4.
  3. Leslie G. Valiant (1979). "La complejidad del cálculo del permanente" . Theoretical Computer Science . 8 (2). Elsevier : 189–201 . doi : 10.1016/0304-3975(79)90044-6 .
  4. Stockmeyer, Larry (noviembre de 1985). "Sobre algoritmos de aproximación para #P" (PDF) . SIAM Journal on Computing . 14 (4): 849–861 . doi : 10.1137/0214060 . Archivado del original (PDF) el 28 de octubre de 2009.