En la teoría de la complejidad computacional , P , también conocida como PTIME o DTIME ( n O(1) ), es una clase de complejidad fundamental . Contiene todos los problemas de decisión que pueden resolverse mediante una máquina de Turing determinista utilizando una cantidad polinómica de tiempo de cálculo , o tiempo polinómico .
La tesis de Cobham sostiene que P es la clase de problemas computacionales que son "eficientemente solucionables" o " tratables ". Esto es inexacto: en la práctica, algunos problemas que no se sabe que están en P tienen soluciones prácticas, y otros que sí están en P no las tienen, pero esta es una regla práctica útil .
Un lenguaje L está en P si y sólo si existe una máquina de Turing determinista M , tal que
P también puede considerarse como una familia uniforme de circuitos booleanos . Un lenguaje L está en P si y solo si existe una familia uniforme de circuitos booleanos en tiempo polinomial , tal que
La definición del circuito se puede debilitar para utilizar solo una familia uniforme de espacio logarítmico sin cambiar la clase de complejidad.
Se sabe que P contiene muchos problemas naturales, incluidas las versiones de decisión de la programación lineal y la búsqueda de una coincidencia máxima . En 2002, se demostró que el problema de determinar si un número es primo está en P. [1] La clase relacionada de problemas de función es FP .
Varios problemas naturales son completos para P, incluida la st -conectividad (o alcanzabilidad ) en gráficos alternados. [2] El artículo sobre problemas P-completos enumera otros problemas relevantes en P.
Una generalización de P es NP , que es la clase de problemas de decisión decidibles por una máquina de Turing no determinista que se ejecuta en tiempo polinomial . Equivalentemente, es la clase de problemas de decisión donde cada instancia "sí" tiene un certificado de tamaño polinomial, y los certificados pueden ser verificados por una máquina de Turing determinista en tiempo polinomial. La clase de problemas para los que esto es cierto para las instancias "no" se llama co-NP . P es trivialmente un subconjunto de NP y de co-NP; la mayoría de los expertos creen que es un subconjunto adecuado, [3] aunque esta creencia (la hipótesis) sigue sin demostrarse . Otro problema abierto es si NP = co-NP; dado que P = co-P, [4] una respuesta negativa implicaría .
También se sabe que P es al menos tan grande como L , la clase de problemas decidibles en una cantidad logarítmica de espacio de memoria . Un decisor que utiliza espacio no puede utilizar más que tiempo, porque este es el número total de configuraciones posibles; por lo tanto, L es un subconjunto de P. Otro problema importante es si L = P. Sabemos que P = AL , el conjunto de problemas resolubles en memoria logarítmica mediante máquinas de Turing alternas . También se sabe que P no es mayor que PSPACE , la clase de problemas decidibles en el espacio polinomial. Nuevamente, si P = PSPACE es un problema abierto. Para resumir:
Aquí, EXPTIME es la clase de problemas que se pueden resolver en tiempo exponencial. De todas las clases mostradas arriba, solo se conocen dos contenciones estrictas:
Los problemas más difíciles en P son los problemas P-completos .
Otra generalización de P es P/poly o tiempo polinomial no uniforme. Si un problema está en P/poly, entonces se puede resolver en tiempo polinomial determinista siempre que se proporcione una cadena de consejos que dependa solo de la longitud de la entrada. Sin embargo, a diferencia de NP, la máquina de tiempo polinomial no necesita detectar cadenas de consejos fraudulentas; no es un verificador. P/poly es una clase grande que contiene casi todos los problemas prácticos, incluido todo BPP . Si contiene NP, entonces la jerarquía polinomial colapsa al segundo nivel. Por otro lado, también contiene algunos problemas imprácticos, incluidos algunos problemas indecidibles como la versión unaria de cualquier problema indecidible.
En 1999, Jin-Yi Cai y D. Sivakumar, basándose en el trabajo de Mitsunori Ogihara, demostraron que si existe un lenguaje disperso que es P-completo, entonces L = P. [5]
P está contenido en BQP ; se desconoce si esta contención es estricta.
Los algoritmos de tiempo polinomial están cerrados bajo composición. Intuitivamente, esto dice que si uno escribe una función que es de tiempo polinomial asumiendo que las llamadas de función son de tiempo constante, y si las funciones llamadas requieren tiempo polinomial, entonces todo el algoritmo toma tiempo polinomial. Una consecuencia de esto es que P es baja para sí misma. Esta es también una de las principales razones por las que P se considera una clase independiente de la máquina; cualquier "característica" de la máquina, como el acceso aleatorio , que se pueda simular en tiempo polinomial se puede simplemente componer con el algoritmo principal de tiempo polinomial para reducirlo a un algoritmo de tiempo polinomial en una máquina más básica.
Los lenguajes en P también están cerrados bajo inversión, intersección , unión , concatenación , cierre de Kleene , homomorfismo inverso y complementación . [6]
Se sabe que algunos problemas se pueden resolver en tiempo polinomial, pero no se conoce ningún algoritmo concreto para resolverlos. Por ejemplo, el teorema de Robertson-Seymour garantiza que existe una lista finita de menores prohibidos que caracteriza (por ejemplo) el conjunto de grafos que se pueden incrustar en un toro; además, Robertson y Seymour demostraron que existe un algoritmo O( n 3 ) para determinar si un grafo tiene un grafo dado como menor. Esto produce una prueba no constructiva de que existe un algoritmo en tiempo polinomial para determinar si un grafo dado se puede incrustar en un toro, a pesar del hecho de que no se conoce ningún algoritmo concreto para este problema.
En la complejidad descriptiva , P puede describirse como los problemas expresables en FO(LFP) , la lógica de primer orden con un operador de punto fijo mínimo agregado, sobre estructuras ordenadas. En el libro de texto de Immerman de 1999 sobre complejidad descriptiva, [7] Immerman atribuye este resultado a Vardi [8] y a Immerman. [9]
En 2001 se publicó que PTIME corresponde a gramáticas de concatenación de rangos (positivos) . [10]
P también puede definirse como una clase de complejidad algorítmica para problemas que no son problemas de decisión [11] (aunque, por ejemplo, encontrar la solución a una instancia de 2-satisfacibilidad en tiempo polinomial automáticamente da un algoritmo polinomial para el problema de decisión correspondiente). En ese caso, P no es un subconjunto de NP, sino que P∩DEC lo es, donde DEC es la clase de problemas de decisión.
Kozen [12] afirma que a Cobham y Edmonds "se les atribuye generalmente la invención de la noción de tiempo polinomial", aunque Rabin también inventó la noción de forma independiente y aproximadamente en la misma época (el artículo de Rabin [13] estaba en las actas de una conferencia de 1966 en 1967, mientras que el de Cobham [14] estaba en las actas de una conferencia de 1964 en 1965 y el de Edmonds [15] se publicó en una revista en 1965, aunque Rabin no menciona a ninguno de ellos y aparentemente no estaba al tanto de ellos). Cobham inventó la clase como una forma robusta de caracterizar algoritmos eficientes, lo que llevó a la tesis de Cobham . Sin embargo, HC Pocklington , en un artículo de 1910, [16] [17] analizó dos algoritmos para resolver congruencias cuadráticas y observó que uno tomaba un tiempo "proporcional a una potencia del logaritmo del módulo" y lo contrastó con uno que tomaba un tiempo proporcional "al módulo mismo o su raíz cuadrada", trazando así explícitamente una distinción entre un algoritmo que se ejecutaba en tiempo polinomial versus uno que se ejecutaba en tiempo (moderadamente) exponencial.