En la teoría de la complejidad computacional , una reducción del tiempo polinómico es un método para resolver un problema utilizando otro. Uno muestra que si existe una subrutina hipotética que resuelve el segundo problema, entonces el primer problema se puede resolver transformándolo o reduciéndolo a entradas para el segundo problema y llamando a la subrutina una o más veces. Si tanto el tiempo necesario para transformar el primer problema en el segundo como el número de veces que se llama a la subrutina son polinomiales , entonces el primer problema es en tiempo polinómico reducible al segundo. [1]
Una reducción del tiempo polinomial demuestra que el primer problema no es más difícil que el segundo, porque siempre que existe un algoritmo eficiente para el segundo problema, también existe uno para el primero. Por contraposición , si no existe un algoritmo eficiente para el primer problema, tampoco existe ninguno para el segundo. [1] Las reducciones de tiempo polinomial se utilizan con frecuencia en la teoría de la complejidad para definir tanto clases de complejidad como problemas completos para esas clases.
Los tres tipos más comunes de reducción en tiempo polinómico, desde el más restrictivo hasta el menos restrictivo, son las reducciones muchos uno en tiempo polinómico , las reducciones de tablas de verdad y las reducciones de Turing . Las más utilizadas son las reducciones de muchos uno y, en algunos casos, la frase "reducción de tiempo polinomial" puede usarse para referirse a una reducción de muchos uno en tiempo polinomial. [2] Las reducciones más generales son las reducciones de Turing y las más restrictivas son las reducciones de muchos uno con reducciones de tablas de verdad que ocupan el espacio intermedio. [3]
Una reducción de muchos en tiempo polinomial de un problema A a un problema B (generalmente se requiere que ambos sean problemas de decisión ) es un algoritmo de tiempo polinómico para transformar entradas al problema A en entradas al problema B , de modo que las transformadas El problema tiene el mismo resultado que el problema original. Una instancia x del problema A se puede resolver aplicando esta transformación para producir una instancia y del problema B , dando y como entrada a un algoritmo para el problema B y devolviendo su salida. Las reducciones muchos-uno en tiempo polinomial también pueden conocerse como transformaciones polinómicas o reducciones de Karp , que llevan el nombre de Richard Karp . Una reducción de este tipo se denota por o . [4] [1]
Una reducción de la tabla de verdad en tiempo polinomial de un problema A a un problema B (ambos problemas de decisión) es un algoritmo de tiempo polinomial para transformar las entradas del problema A en un número fijo de entradas al problema B , de modo que la salida del problema original se puede expresar como una función de las salidas para B . La función que asigna las salidas de B a la salida de A debe ser la misma para todas las entradas, de modo que pueda expresarse mediante una tabla de verdad . Una reducción de este tipo puede denotarse mediante la expresión . [5]
Una reducción de Turing en tiempo polinómico de un problema A a un problema B es un algoritmo que resuelve el problema A utilizando un número polinómico de llamadas a una subrutina para el problema B y tiempo polinómico fuera de esas llamadas a subrutinas. Las reducciones de Turing en tiempo polinomial también se conocen como reducciones de Cook , nombradas así en honor a Stephen Cook . Una reducción de este tipo puede denotarse mediante la expresión . [4] Las reducciones de muchos uno pueden considerarse como variantes restringidas de las reducciones de Turing donde el número de llamadas realizadas a la subrutina para el problema B es exactamente uno y el valor devuelto por la reducción es el mismo valor que el devuelto por la subrutina.
Un problema completo para una determinada clase de complejidad C y reducción ≤ es un problema P que pertenece a C , de modo que todo problema A en C tiene una reducción A ≤ P. Por ejemplo, un problema es NP completo si pertenece a NP y todos los problemas en NP tienen reducciones de muchos uno en tiempo polinomial. Se puede demostrar que un problema que pertenece a NP es NP completo encontrando una única reducción de muchos en tiempo polinomial a partir de un problema NP completo conocido. [6] Se han utilizado reducciones de muchos uno en tiempo polinomial para definir problemas completos para otras clases de complejidad, incluidos los lenguajes completos PSPACE y los lenguajes completos EXPTIME . [7]
Cada problema de decisión en P (la clase de problemas de decisión en tiempo polinomial) puede reducirse a cualquier otro problema de decisión no trivial (donde no trivial significa que no todas las entradas tienen la misma salida), mediante una reducción de muchos uno en tiempo polinomial. Para transformar una instancia del problema A en B , resuelva A en tiempo polinomial y luego use la solución para elegir una de las dos instancias del problema B con diferentes respuestas. Por lo tanto, para clases de complejidad dentro de P como L , NL , NC y el propio P , las reducciones de tiempo polinomial no pueden usarse para definir lenguajes completos: si se usaran de esta manera, todos los problemas no triviales en P estarían completos. En cambio, se utilizan reducciones más débiles, como reducciones de espacio logarítmico o reducciones NC , para definir clases de problemas completos para estas clases, como los problemas P -completos . [8]
Las definiciones de las clases de complejidad NP , PSPACE y EXPTIME no implican reducciones: las reducciones entran en su estudio sólo en la definición de lenguajes completos para estas clases. Sin embargo, en algunos casos una clase de complejidad puede definirse mediante reducciones. Si C es un problema de decisión cualquiera , entonces se puede definir una clase de complejidad C que consta de los lenguajes A para los cuales . En este caso, C se completará automáticamente para C , pero C también puede tener otros problemas completos.
Un ejemplo de esto es la clase de complejidad definida a partir de la teoría existencial de los reales , un problema computacional que se sabe que es NP -difícil y en PSPACE , pero que no se sabe que esté completo para NP , PSPACE o cualquier lenguaje en el polinomio. jerarquía . es el conjunto de problemas que tienen una reducción de muchos uno en tiempo polinomial a la teoría existencial de los reales; tiene varios otros problemas completos, como determinar el número de cruce rectilíneo de un gráfico no dirigido . Cada problema hereda la propiedad de pertenecer a PSPACE y cada problema completo es NP difícil. [9]
De manera similar, la clase de complejidad GI consta de problemas que se pueden reducir al problema de isomorfismo de grafos . Dado que se sabe que el isomorfismo de grafos pertenece tanto a NP como a co- AM , lo mismo ocurre con todos los problemas de esta clase. Un problema es GI -completo si está completo para esta clase; el problema de isomorfismo gráfico en sí es GI completo, al igual que varios otros problemas relacionados. [10]