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:
- ¿Existen subconjuntos de una lista de números enteros cuya suma sea cero? ( problema de suma de subconjuntos )
- ¿Existen ciclos hamiltonianos en un grafo dado con un coste inferior a 100? ( problema del viajante )
- ¿Existen asignaciones de variables que satisfagan una fórmula dada en forma normal conjuntiva (FNC) ? ( Problema de satisfacibilidad booleana o SAT)
- ¿Tiene un polinomio real univariado alguna raíz positiva? ( búsqueda de raíces )
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?
Clases de complejidad relacionadas
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 funcionesde tal manera que exista una máquina de Turing no determinista de tiempo polinomial.de tal manera que para todos,es igual al número de sucursales que aceptangráfico de cálculo de. [ 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 funcionestal que existe un polinomioy una máquina de Turing determinista de tiempo polinomial, llamado el verificador, de tal manera que para cada,. [ 2 ] (En otras palabras,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 #PExiste un algoritmo aleatorio que utiliza un oráculo para SAT, que dada una instanciadeydevuelve con alta probabilidad un númerode tal manera que. [ 4 ] El tiempo de ejecución del algoritmo es polinomial enyEl algoritmo se basa en el lema hash restante .
Véase también
- Computación cuántica#Relación con la teoría de la computabilidad y la complejidad – Tecnología de hardware informático que utiliza la mecánica cuántica
Referencias
- 1 2 Barak, Boaz (Primavera de 2006). "Complejidad del conteo" (PDF) . Ciencias de la Computación 522: Complejidad Computacional . Universidad de Princeton.
- ↑ Arora, Sanjeev ; Barak, Boaz (2009). Complejidad computacional: un enfoque moderno . Cambridge University Press. pág. 344. ISBN 978-0-521-42426-4.
- ↑ 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 .
- ↑ 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.
Enlaces externos
- Zoológico de la complejidad : Clase #P
- Clases de complejidad