Articulo de referencia

Teoría de la complejidad computacional

En la informática teórica y las matemáticas, la teoría de la complejidad computacional se centra en clasificar los problemas computacionales según su uso de recursos y explora l...

En la informática teórica y las matemáticas, la teoría de la complejidad computacional se centra en clasificar los problemas computacionales según su uso de recursos y explora las relaciones entre estas clasificaciones. Un problema computacional es una tarea que resuelve una computadora y que se puede resolver mediante la aplicación mecánica de pasos matemáticos, como un algoritmo .

Se considera que un problema es intrínsecamente difícil si su solución requiere recursos significativos, independientemente del algoritmo utilizado. La teoría formaliza esta intuición mediante la introducción de modelos matemáticos de computación para estudiar estos problemas y cuantificar su complejidad computacional, es decir, la cantidad de recursos necesarios para resolverlos, como tiempo y almacenamiento.

También se utilizan otras medidas de complejidad, como la cantidad de comunicación (utilizada en la complejidad de la comunicación ), el número de compuertas en un circuito (utilizado en la complejidad de circuitos ) y el número de procesadores (utilizado en la computación paralela ). Una de las funciones de la teoría de la complejidad computacional es determinar los límites prácticos de lo que las computadoras pueden y no pueden hacer. El problema P versus NP , uno de los siete Problemas del Premio del Milenio , [ 1 ] forma parte del campo de la complejidad computacional.

En la informática teórica, el análisis de algoritmos y la teoría de la computabilidad son campos estrechamente relacionados. Una distinción clave entre el análisis de algoritmos y la teoría de la complejidad computacional radica en que el primero se centra en analizar la cantidad de recursos que necesita un algoritmo específico para resolver un problema, mientras que el segundo plantea una pregunta más general sobre todos los algoritmos posibles que podrían utilizarse para resolver el mismo problema. Más precisamente, la teoría de la complejidad computacional intenta clasificar los problemas que pueden o no resolverse con recursos adecuadamente restringidos. A su vez, la imposición de restricciones a los recursos disponibles es lo que distingue a la complejidad computacional de la teoría de la computabilidad: esta última se pregunta qué tipos de problemas pueden, en principio, resolverse algorítmicamente.

Problemas computacionales

Una gira de un vendedor ambulante por 14 ciudades alemanas.

Casos de problemas

Un problema computacional puede considerarse como una colección infinita de instancias junto con un conjunto (posiblemente vacío) de soluciones para cada instancia. La cadena de entrada para un problema computacional se denomina instancia del problema y no debe confundirse con el problema en sí. En la teoría de la complejidad computacional, un problema se refiere a la pregunta abstracta que se debe resolver. En cambio, una instancia de este problema es una expresión bastante concreta, que puede servir como entrada para un problema de decisión. Por ejemplo, consideremos el problema de la prueba de primalidad . La instancia es un número (por ejemplo, 15) y la solución es "sí" si el número es primo y "no" en caso contrario (en este caso, 15 no es primo y la respuesta es "no"). Dicho de otro modo, la instancia es una entrada particular para el problema, y ​​la solución es la salida correspondiente a la entrada dada.

Para resaltar aún más la diferencia entre un problema y un caso práctico, consideremos el siguiente ejemplo del problema del viajante : ¿Existe una ruta de como máximo 2000 kilómetros que atraviese las 14 ciudades más grandes de Alemania? La respuesta cuantitativa a este caso práctico resulta poco útil para resolver otros casos, como por ejemplo, un viaje de ida y vuelta que recorra 14 lugares en Milán con una longitud total máxima de 10 km. Por esta razón, la teoría de la complejidad aborda problemas computacionales y no casos prácticos específicos.

Representación de instancias de problemas

Al considerar problemas computacionales, una instancia de problema es una cadena sobre un alfabeto . Generalmente, el alfabeto se considera el alfabeto binario (es decir, el conjunto {0,1}), por lo que las cadenas son cadenas de bits . Al igual que en una computadora real , los objetos matemáticos que no son cadenas de bits deben codificarse adecuadamente. Por ejemplo, los números enteros pueden representarse en notación binaria , y los grafos pueden codificarse directamente mediante sus matrices de adyacencia , o codificando sus listas de adyacencia en binario.

Si bien algunas demostraciones de teoremas de la teoría de la complejidad suelen presuponer una codificación de entrada concreta, se procura que la discusión sea lo suficientemente abstracta como para ser independiente de la elección precisa de dicha codificación. Esto se logra asegurando que las diferentes representaciones puedan transformarse eficientemente entre sí.

Los problemas de decisión como lenguajes formales

Un problema de decisión tiene solo dos posibles resultados, o no (o alternativamente 1 o 0) para cualquier entrada.

Los problemas de decisión son uno de los principales objetos de estudio en la teoría de la complejidad computacional. Un problema de decisión es un tipo de problema computacional cuya respuesta es o no (o 1 o 0). Un problema de decisión puede considerarse como un lenguaje formal , donde los miembros del lenguaje son instancias cuya salida es sí, y los no miembros son aquellas cuya salida es no. El objetivo es decidir, con la ayuda de un algoritmo , si una cadena de entrada dada pertenece al lenguaje formal en cuestión. Si el algoritmo que resuelve este problema devuelve la respuesta , se dice que el algoritmo acepta la cadena de entrada; de lo contrario, se dice que la rechaza.

Un ejemplo de problema de decisión es el siguiente: la entrada es un grafo arbitrario . El problema consiste en decidir si el grafo dado es conexo o no. El lenguaje formal asociado a este problema de decisión es el conjunto de todos los grafos conexos; para obtener una definición precisa de este lenguaje, es necesario decidir cómo se codifican los grafos como cadenas binarias.

Problemas de funcionamiento

Un problema de función es un problema computacional en el que se espera una única salida (de una función total ) para cada entrada, pero la salida puede ser más compleja que la de un problema de decisión ; es decir, la salida no es simplemente sí o no. Ejemplos notables incluyen el problema del viajante y el problema de factorización de enteros .

Resulta tentador pensar que la noción de problemas de función es mucho más rica que la noción de problemas de decisión. Sin embargo, esto no es realmente así, ya que los problemas de función pueden reformularse como problemas de decisión. Por ejemplo, la multiplicación de dos enteros puede expresarse como el conjunto de ternas.(a,b,do){\displaystyle (a,b,c)}de tal manera que la relacióna×b=do{\displaystyle a\times b=c}Se cumple. Decidir si una terna dada pertenece a este conjunto equivale a resolver el problema de multiplicar dos números.

Medir el tamaño de una instancia

Para medir la dificultad de resolver un problema computacional, se puede observar cuánto tiempo requiere el mejor algoritmo para resolverlo. Sin embargo, el tiempo de ejecución puede, en general, depender de la instancia. En particular, las instancias más grandes requerirán más tiempo para resolverse. Por lo tanto, el tiempo requerido para resolver un problema (o el espacio requerido, o cualquier medida de complejidad) se calcula en función del tamaño de la instancia. El tamaño de entrada se mide típicamente en bits. La teoría de la complejidad estudia cómo escalan los algoritmos a medida que aumenta el tamaño de entrada. Por ejemplo, en el problema de determinar si un grafo está conectado, ¿cuánto más tiempo se necesita para resolver un problema para un grafo con2norte{\displaystyle 2n}vértices comparados con el tiempo que se tarda en un gráfico connorte{\displaystyle n}¿vértices?

Si el tamaño de entrada esnorte{\displaystyle n}, el tiempo empleado puede expresarse como una función denorte{\displaystyle n}Dado que el tiempo empleado en diferentes entradas del mismo tamaño puede ser diferente, la complejidad temporal en el peor de los casos esT(norte){\displaystyle T(n)}se define como el tiempo máximo empleado en todas las entradas de tamañonorte{\displaystyle n}. SiT(norte){\displaystyle T(n)}es un polinomio ennorte{\displaystyle n}Entonces, se dice que el algoritmo es un algoritmo de tiempo polinomial . La tesis de Cobham sostiene que un problema puede resolverse con una cantidad factible de recursos si y solo si admite un algoritmo de tiempo polinomial.

Modelos de máquinas y medidas de complejidad

Máquina de Turing

Ilustración de una máquina de Turing

Una máquina de Turing es un modelo matemático de una máquina de computación general. Es un dispositivo teórico que manipula símbolos contenidos en una tira de cinta. Las máquinas de Turing no están concebidas como una tecnología de computación práctica, sino como un modelo general de una máquina de computación, desde una supercomputadora avanzada hasta un matemático con lápiz y papel. Se cree que si un problema puede resolverse mediante un algoritmo, existe una máquina de Turing que lo resuelve. De hecho, esta es la afirmación de la tesis de Church-Turing . Además, se sabe que todo lo que se puede calcular en otros modelos de computación conocidos hoy en día, como una máquina RAM , el Juego de la Vida de Conway , autómatas celulares , cálculo lambda o cualquier lenguaje de programación, se puede calcular en una máquina de Turing. Dado que las máquinas de Turing son fáciles de analizar matemáticamente y se consideran tan potentes como cualquier otro modelo de computación, son el modelo más utilizado en la teoría de la complejidad.

Existen muchos tipos de máquinas de Turing para definir clases de complejidad, como las máquinas de Turing deterministas , probabilísticas , no deterministas , cuánticas , simétricas y alternantes . En principio, todas son igualmente potentes, pero cuando los recursos (como el tiempo o el espacio) son limitados, algunas pueden ser más potentes que otras.

Una máquina de Turing determinista es la máquina de Turing más básica, que utiliza un conjunto fijo de reglas para determinar sus acciones futuras. Una máquina de Turing probabilística es una máquina de Turing determinista con un suministro adicional de bits aleatorios. La capacidad de tomar decisiones probabilísticas a menudo ayuda a los algoritmos a resolver problemas de manera más eficiente. Los algoritmos que utilizan bits aleatorios se denominan algoritmos aleatorios . Una máquina de Turing no determinista es una máquina de Turing determinista con la característica adicional del no determinismo, lo que le permite tener múltiples acciones futuras posibles desde un estado dado. Una forma de ver el no determinismo es que la máquina de Turing se ramifica en muchas rutas computacionales posibles en cada paso, y si resuelve el problema en cualquiera de estas ramas, se dice que lo ha resuelto. Claramente, este modelo no pretende ser un modelo físicamente realizable, sino simplemente una máquina abstracta teóricamente interesante que da lugar a clases de complejidad particularmente interesantes. Para ejemplos, véase algoritmo no determinista .

Otros modelos de máquinas

En la literatura se han propuesto muchos modelos de máquinas diferentes de las máquinas de Turing multitape estándar, por ejemplo , máquinas de acceso aleatorio . Quizás sorprendentemente, cada uno de estos modelos puede convertirse en otro sin proporcionar ninguna potencia computacional adicional. El consumo de tiempo y memoria de estos modelos alternativos puede variar. [ 2 ] Lo que todos estos modelos tienen en común es que las máquinas operan de forma determinista .

Sin embargo, algunos problemas computacionales son más fáciles de analizar en términos de recursos menos convencionales. Por ejemplo, una máquina de Turing no determinista es un modelo computacional que puede ramificarse para comprobar simultáneamente diversas posibilidades. Si bien la máquina de Turing no determinista tiene poco que ver con la forma física en que queremos calcular algoritmos, su capacidad de ramificación reproduce con precisión muchos de los modelos matemáticos que deseamos analizar, por lo que el tiempo no determinista se convierte en un recurso fundamental para el análisis de problemas computacionales.

Medidas de complejidad

Para una definición precisa de lo que significa resolver un problema utilizando una cantidad determinada de tiempo y espacio, se utiliza un modelo computacional como la máquina de Turing determinista . El tiempo requerido por una máquina de Turing deterministaMETRO{\displaystyle M}en la entradaincógnita{\displaystyle x}es el número total de transiciones de estado, o pasos, que realiza la máquina antes de detenerse y emitir la respuesta ("sí" o "no"). Una máquina de TuringMETRO{\displaystyle M}Se dice que funciona dentro del tiempoF(norte){\displaystyle f(n)}si el tiempo requerido porMETRO{\displaystyle M}en cada entrada de longitudnorte{\displaystyle n}es como máximoF(norte){\displaystyle f(n)}Un problema de decisiónA{\displaystyle A}se puede resolver a tiempoF(norte){\displaystyle f(n)}Si existe una máquina de Turing que funcione en el tiempoF(norte){\displaystyle f(n)}que resuelve el problema. Dado que la teoría de la complejidad se interesa en clasificar los problemas en función de su dificultad, se definen conjuntos de problemas en función de ciertos criterios. Por ejemplo, el conjunto de problemas que se pueden resolver dentro de un tiempoF(norte){\displaystyle f(n)}en una máquina de Turing determinista se denota entonces por DTIME (F(norte){\displaystyle f(n)}).

Se pueden establecer definiciones análogas para los requisitos de espacio. Si bien el tiempo y el espacio son los recursos de complejidad más conocidos, cualquier medida de complejidad puede considerarse un recurso computacional . Las medidas de complejidad se definen generalmente mediante los axiomas de complejidad de Blum . Otras medidas de complejidad utilizadas en la teoría de la complejidad incluyen la complejidad de la comunicación , la complejidad de los circuitos y la complejidad de los árboles de decisión .

La complejidad de un algoritmo se suele expresar utilizando la notación O grande .

Complejidad en el mejor, peor y promedio de los casos

Visualización del algoritmo quicksort , que tiene un rendimiento promedio en el caso de rendimiento promedio.O(norteregistronorte){\displaystyle {\mathcal {O}}(n\log n)}

La complejidad del mejor, peor y caso promedio se refiere a tres formas diferentes de medir la complejidad temporal (o cualquier otra medida de complejidad) de diferentes entradas del mismo tamaño. Dado que algunas entradas de tamañonorte{\displaystyle n}Puede que sea más rápido de resolver que otros, definimos las siguientes complejidades:

  1. Complejidad del mejor caso: Esta es la complejidad de resolver el problema para la mejor entrada de tamañonorte{\displaystyle n}.
  2. Complejidad del caso promedio: Esta es la complejidad de resolver el problema en promedio, para entradas de tamaño n . Esta complejidad solo se define con respecto a una distribución de probabilidad sobre las entradas. Por ejemplo, si se supone que todas las entradas del mismo tamaño tienen la misma probabilidad de aparecer, la complejidad del caso promedio se puede definir con respecto a la distribución uniforme sobre todas las entradas de tamañonorte{\displaystyle n}.
  3. Análisis amortizado : El análisis amortizado considera tanto las operaciones costosas como las menos costosas en conjunto a lo largo de toda la serie de operaciones del algoritmo.
  4. Complejidad en el peor de los casos : Esta es la complejidad de resolver el problema para la peor entrada de tamañonorte{\displaystyle n}.

El orden de menor a mayor costo es: Mejor, promedio (de distribución uniforme discreta ), amortizado, peor.

Por ejemplo, el algoritmo de ordenación determinista quicksort aborda el problema de ordenar una lista de enteros. El peor caso es cuando el pivote es siempre el valor más grande o más pequeño de la lista (por lo que la lista nunca se divide). En este caso, el algoritmo tarda un tiempo O (norte2{\displaystyle n^{2}}). Si asumimos que todas las permutaciones posibles de la lista de entrada son igualmente probables, el tiempo promedio que se tarda en ordenar esO(norteregistronorte){\displaystyle O(n\log n)}. El mejor caso se da cuando cada pivote divide la lista por la mitad, necesitando tambiénO(norteregistronorte){\displaystyle O(n\log n)}tiempo.

Límites superiores e inferiores de la complejidad de los problemas

Para clasificar el tiempo de cálculo (o recursos similares, como el consumo de espacio), es útil demostrar límites superiores e inferiores para el tiempo máximo requerido por el algoritmo más eficiente para resolver un problema dado. La complejidad de un algoritmo generalmente se considera su complejidad en el peor de los casos, a menos que se especifique lo contrario. El análisis de un algoritmo en particular se enmarca dentro del campo del análisis de algoritmos . Para mostrar un límite superiorT(norte){\displaystyle T(n)}En cuanto a la complejidad temporal de un problema, basta con demostrar que existe un algoritmo particular con un tiempo de ejecución máximoT(norte){\displaystyle T(n)}Sin embargo, demostrar cotas inferiores es mucho más difícil, ya que las cotas inferiores hacen una afirmación sobre todos los algoritmos posibles que resuelven un problema dado. La frase "todos los algoritmos posibles" incluye no solo los algoritmos conocidos hoy, sino cualquier algoritmo que pueda descubrirse en el futuro. Para demostrar una cota inferior deT(norte){\displaystyle T(n)}para un problema requiere demostrar que ningún algoritmo puede tener una complejidad temporal menor queT(norte){\displaystyle T(n)}.

Los límites superior e inferior se suelen expresar utilizando la notación O grande , que oculta los factores constantes y los términos más pequeños. Esto hace que los límites sean independientes de los detalles específicos del modelo computacional utilizado. Por ejemplo, siT(norte)=7norte2+15norte+40{\displaystyle T(n)=7n^{2}+15n+40}En notación Big O se escribiría:T(norte)O(norte2){\displaystyle T(n)\in O(n^{2})}.

Clases de complejidad

Definición de clases de complejidad

Una clase de complejidad es un conjunto de problemas de complejidad relacionada. Las clases de complejidad más simples se definen por los siguientes factores:

Algunas clases de complejidad tienen definiciones complicadas que no se ajustan a este marco. Por lo tanto, una clase de complejidad típica tiene una definición como la siguiente:

El conjunto de problemas de decisión que puede resolver una máquina de Turing determinista dentro de un tiempoF(norte){\displaystyle f(n)}. (Esta clase de complejidad se conoce como DTIME(F(norte){\displaystyle f(n)}).)

Pero limitando el tiempo de cálculo anterior por alguna función concretaF(norte){\displaystyle f(n)}a menudo produce clases de complejidad que dependen del modelo de máquina elegido. Por ejemplo, el lenguaje{incógnitaincógnitaincógnita es cualquier cadena binaria}{\displaystyle \{xx\mid x{\text{ es cualquier cadena binaria}}\}}puede resolverse en tiempo lineal en una máquina de Turing de múltiples cintas, pero necesariamente requiere tiempo cuadrático en el modelo de máquinas de Turing de una sola cinta. Si permitimos variaciones polinómicas en el tiempo de ejecución, la tesis de Cobham-Edmonds afirma que "las complejidades temporales en cualesquiera dos modelos de computación razonables y generales están relacionadas polinómicamente" ( Goldreich 2008 , Capítulo 1.2) . Esto constituye la base de la clase de complejidad P , que es el conjunto de problemas de decisión resolubles por una máquina de Turing determinista en tiempo polinómico. El conjunto correspondiente de problemas de función es FP .

Clases de complejidad importantes

Una representación de la relación entre clases de complejidad; L sería otro paso "dentro" de NL.

Se pueden definir muchas clases de complejidad importantes limitando el tiempo o el espacio utilizado por el algoritmo. Algunas clases de complejidad importantes de problemas de decisión definidas de esta manera son las siguientes:

Las clases de espacio logarítmico no tienen en cuenta el espacio necesario para representar el problema.

Resulta que PSPACE = NPSPACE y EXPSPACE = NEXPSPACE según el teorema de Savitch .

Otras clases de complejidad importantes incluyen BPP , ZPP y RP , que se definen usando máquinas de Turing probabilísticas ; AC y NC , que se definen usando circuitos booleanos; y BQP y QMA , que se definen usando máquinas de Turing cuánticas. #P es una clase de complejidad importante de problemas de conteo (no de problemas de decisión). Clases como IP y AM se definen usando sistemas de prueba interactivos . ALL es la clase de todos los problemas de decisión.

Teoremas de jerarquía

Para las clases de complejidad definidas de esta manera, es deseable demostrar que relajar los requisitos sobre (por ejemplo) el tiempo de computación define efectivamente un conjunto mayor de problemas. En particular, aunque DTIME(norte{\displaystyle n}) está contenido en DTIME(norte2{\displaystyle n^{2}}Sería interesante saber si la inclusión es estricta. En cuanto a los requisitos de tiempo y espacio, la respuesta a estas preguntas la proporcionan los teoremas de jerarquía de tiempo y espacio, respectivamente. Se denominan teoremas de jerarquía porque inducen una jerarquía adecuada en las clases definidas al restringir los recursos correspondientes. Así, existen pares de clases de complejidad tales que una está incluida adecuadamente en la otra. Una vez deducidas estas inclusiones de conjuntos adecuadas, podemos proceder a formular afirmaciones cuantitativas sobre cuánto tiempo o espacio adicional se necesita para aumentar el número de problemas que se pueden resolver.

Más precisamente, el teorema de la jerarquía temporal establece que DTIMETROmi(o(F(norte)))DTIMETROmi(F(norte)registro(F(norte))){\displaystyle {\mathsf {DTIME}}{\big (}o(f(n)){\big )}\subsetneq {\mathsf {DTIME}}{\big (}f(n)\cdot \log(f(n)){\big )}}.

El teorema de la jerarquía espacial establece que DSPAGAdomi(o(F(norte)))DSPAGAdomi(F(norte)){\displaystyle {\mathsf {DSPACE}}{\big (}o(f(n)){\big )}\subsetneq {\mathsf {DSPACE}}{\big (}f(n){\big )}}.

Los teoremas de jerarquía temporal y espacial constituyen la base de la mayoría de los resultados de separación de clases de complejidad. Por ejemplo, el teorema de jerarquía temporal nos dice que P está estrictamente contenido en EXPTIME, y el teorema de jerarquía espacial nos dice que L está estrictamente contenido en PSPACE.

Reducción

Muchas clases de complejidad se definen utilizando el concepto de reducción. Una reducción es una transformación de un problema en otro. Captura la noción informal de que un problema es, como máximo, tan difícil como otro. Por ejemplo, si un problemaincógnita{\displaystyle X}se puede resolver utilizando un algoritmo paraY{\displaystyle Y},incógnita{\displaystyle X}no es más difícil queY{\displaystyle Y}y decimos queincógnita{\displaystyle X}se reduce aY{\displaystyle Y}. Existen muchos tipos diferentes de reducciones, según el método de reducción, como las reducciones de Cook, las reducciones de Karp y las reducciones de Levin, y el límite de la complejidad de las reducciones, como las reducciones de tiempo polinomial o las reducciones de espacio logarítmico .

La reducción más común es la reducción en tiempo polinomial. Esto significa que el proceso de reducción se ejecuta en tiempo polinomial. Por ejemplo, el problema de elevar al cuadrado un número entero se puede reducir al problema de multiplicar dos números enteros. Esto significa que un algoritmo para multiplicar dos números enteros se puede usar para elevar al cuadrado un número entero. De hecho, esto se puede lograr proporcionando la misma entrada a ambas entradas del algoritmo de multiplicación. Así, vemos que elevar al cuadrado no es más difícil que multiplicar, ya que elevar al cuadrado se puede reducir a multiplicar.

Esto motiva el concepto de que un problema sea difícil para una clase de complejidad. Un problemaincógnita{\displaystyle X}es difícil para una clase de problemasdo{\displaystyle C}si cada problema endo{\displaystyle C}puede reducirse aincógnita{\displaystyle X}Por lo tanto, no hay problema endo{\displaystyle C}es más difícil queincógnita{\displaystyle X}, ya que un algoritmo paraincógnita{\displaystyle X}nos permite resolver cualquier problema endo{\displaystyle C}La noción de problemas difíciles depende del tipo de reducción que se utilice. Para clases de complejidad mayores que P, se suelen usar reducciones en tiempo polinomial. En particular, el conjunto de problemas que son difíciles para NP es el conjunto de problemas NP-difíciles .

Si hay un problemaincógnita{\displaystyle X}está endo{\displaystyle C}y difícil parado{\displaystyle C}, entoncesincógnita{\displaystyle X}Se dice que está completo parado{\displaystyle C}Esto significa queincógnita{\displaystyle X}es el problema más difícil endo{\displaystyle C}. (Dado que muchos problemas podrían ser igualmente difíciles, se podría decir queincógnita{\displaystyle X}es uno de los problemas más difíciles endo{\displaystyle C}.) Por lo tanto, la clase de problemas NP-completos contiene los problemas más difíciles en NP, en el sentido de que son los que tienen más probabilidades de no estar en P. Debido a que el problema P = NP no está resuelto, ser capaz de reducir un problema NP-completo conocido,Π2{\displaystyle \Pi _{2}}, a otro problema,Π1{\displaystyle \Pi _{1}}, indicaría que no existe una solución conocida de tiempo polinomial paraΠ1{\displaystyle \Pi _{1}}Esto se debe a que existe una solución de tiempo polinomial paraΠ1{\displaystyle \Pi _{1}}produciría una solución de tiempo polinomial paraΠ2{\displaystyle \Pi _{2}}. De manera similar, dado que todos los problemas NP pueden reducirse al conjunto, encontrar un problema NP-completo que pueda resolverse en tiempo polinomial significaría que P = NP. [ 3 ]

Problemas abiertos importantes

Diagrama de clases de complejidad siempre que P ≠ NP. La existencia de problemas en NP fuera de P y NP-completos en este caso fue establecida por Ladner. [ 4 ]

Problema P versus NP

La clase de complejidad P se suele considerar una abstracción matemática que modela aquellas tareas computacionales que admiten un algoritmo eficiente. Esta hipótesis se conoce como la tesis de Cobham-Edmonds . Por otro lado, la clase de complejidad NP contiene muchos problemas que se desearía resolver de manera eficiente, pero para los que no se conoce ningún algoritmo eficiente, como el problema de satisfacibilidad booleana , el problema del camino hamiltoniano y el problema de la cobertura de vértices . Dado que las máquinas de Turing deterministas son máquinas de Turing no deterministas especiales, se observa fácilmente que cada problema en P también pertenece a la clase NP.

La cuestión de si P es igual a NP es una de las preguntas abiertas más importantes en la informática teórica debido a las amplias implicaciones de una solución. [ 3 ] Si la respuesta es afirmativa, se puede demostrar que muchos problemas importantes tienen soluciones más eficientes. Estos incluyen varios tipos de problemas de programación entera en investigación operativa , muchos problemas en logística , predicción de la estructura de proteínas en biología , [ 5 ] y la capacidad de encontrar demostraciones formales de teoremas de matemáticas puras . [ 6 ] El problema P versus NP es uno de los Problemas del Premio del Milenio propuestos por el Instituto Clay de Matemáticas . Hay un premio de US$1.000.000 por resolver el problema. [ 7 ]

Problemas en NP que no se sabe que estén en P o NP-completos

Ladner demostró que siPAGnotario público{\displaystyle {\textsf {P}}\neq {\textsf {NP}}}entonces existen problemas ennotario público{\displaystyle {\textsf {NP}}}que no están enPAG{\displaystyle {\textsf {P}}}ninotario público{\displaystyle {\textsf {NP}}}-completo. [ 4 ] Estos problemas se denominan problemas NP-intermedios . El problema del isomorfismo de grafos , el problema del logaritmo discreto y el problema de la factorización de enteros son ejemplos de problemas que se consideran NP-intermedios. Son algunos de los pocos problemas NP que no se sabe que estén enPAG{\displaystyle {\textsf {P}}}o sernotario público{\displaystyle {\textsf {NP}}}-completo.

El problema del isomorfismo de grafos es el problema computacional de determinar si dos grafos finitos son isomorfos . Un problema importante sin resolver en la teoría de la complejidad es si el problema del isomorfismo de grafos esPAG{\displaystyle {\textsf {P}}},notario público{\displaystyle {\textsf {NP}}}-completo, o NP-intermedio. La respuesta no se conoce, pero se cree que el problema al menos no es NP-completo. [ 8 ] Si el isomorfismo de grafos es NP-completo, la jerarquía de tiempo polinomial colapsa a su segundo nivel. [ 9 ] Dado que se cree ampliamente que la jerarquía polinomial no colapsa a ningún nivel finito, se cree que el isomorfismo de grafos no es NP-completo. El mejor algoritmo para este problema, debido a László Babai y Eugene Luks, tiene un tiempo de ejecuciónO(2norteregistronorte){\displaystyle O(2^{\sqrt {n\log n}})}para gráficos connorte{\displaystyle n}vértices, aunque algunos trabajos recientes de Babai ofrecen algunas perspectivas potencialmente nuevas sobre esto. [ 10 ]

El problema de factorización de enteros es el problema computacional de determinar la factorización prima de un entero dado. Formulado como un problema de decisión, es el problema de decidir si la entrada tiene un factor primo menor quek{\displaystyle k}No se conoce ningún algoritmo eficiente de factorización de enteros, y este hecho constituye la base de varios sistemas criptográficos modernos, como el algoritmo RSA . El problema de la factorización de enteros se encuentra ennotario público{\displaystyle {\textsf {NP}}}y enco-NP{\displaystyle {\textsf {co-NP}}}(e incluso en UP y co-UP [ 11 ] ). Si el problema esnotario público{\displaystyle {\textsf {NP}}}-completa, la jerarquía de tiempo polinomial colapsará a su primer nivel (es decir,notario público{\displaystyle {\textsf {NP}}}será igualco-NP{\displaystyle {\textsf {co-NP}}}). El algoritmo más conocido para la factorización de enteros es la criba de cuerpos numéricos general , que requiere tiempoO(mi(6493)(registronorte)3(registroregistronorte)23){\displaystyle O(e^{\left({\sqrt[{3}]{\frac {64}{9}}}\right){\sqrt[{3}]{(\log n)}}{\sqrt[{3}]{(\log \log n)^{2}}}})}[ 12 ] factorizar un número entero imparnorte{\displaystyle n}Sin embargo, el algoritmo cuántico más conocido para este problema, el algoritmo de Shor , se ejecuta en tiempo polinomial. Desafortunadamente, este hecho no aclara mucho sobre la complejidad del problema en comparación con otras clases de complejidad no cuántica.

Separaciones entre otras clases de complejidad

Se sospecha que muchas clases de complejidad conocidas son desiguales, pero esto no se ha demostrado. Por ejemploPAGnotario públicoPÁGINASPSPACE{\displaystyle {\textsf {P}}\subseteq {\textsf {NP}}\subseteq {\textsf {PP}}\subseteq {\textsf {PSPACE}}}, pero es posible quePAG=PSPACE{\displaystyle {\textsf {P}}={\textsf {PSPACE}}}. SiPAG{\displaystyle {\textsf {P}}}no es igual anotario público{\displaystyle {\textsf {NP}}}, entoncesPAG{\displaystyle {\textsf {P}}}no es igual aPSPACE{\displaystyle {\textsf {PSPACE}}}cualquiera. Dado que existen muchas clases de complejidad conocidas entrePAG{\displaystyle {\textsf {P}}}yPSPACE{\displaystyle {\textsf {PSPACE}}}, comorol{\displaystyle {\textsf {RP}}},BPP{\displaystyle {\textsf {BPP}}},PÁGINAS{\displaystyle {\textsf {PP}}},BQP{\displaystyle {\textsf {BQP}}},MAMÁ{\displaystyle {\textsf {MA}}},Filipinas{\displaystyle {\textsf {PH}}}, etc., es posible que todas estas clases de complejidad se reduzcan a una sola. Demostrar que alguna de estas clases es desigual supondría un gran avance en la teoría de la complejidad.

En la misma línea,co-NP{\displaystyle {\textsf {co-NP}}}es la clase que contiene los problemas complementarios (es decir, problemas con las respuestas / no invertidas) denotario público{\displaystyle {\textsf {NP}}}problemas. Se cree [ 13 ] quenotario público{\displaystyle {\textsf {NP}}}no es igual aco-NP{\displaystyle {\textsf {co-NP}}}Sin embargo, aún no se ha demostrado. Está claro que si estas dos clases de complejidad no son iguales, entoncesPAG{\displaystyle {\textsf {P}}}no es igual anotario público{\displaystyle {\textsf {NP}}}, desdePAG=policía{\displaystyle {\textsf {P}}={\textsf {co-P}}}. Por lo tanto, siPAG=nortePAG{\displaystyle P=NP}hubiéramos tenidopolicía=co-NP{\displaystyle {\textsf {co-P}}={\textsf {co-NP}}}De dóndenotario público=PAG=policía=co-NP{\displaystyle {\textsf {NP}}={\textsf {P}}={\textsf {co-P}}={\textsf {co-NP}}}.

De igual modo, se desconoce siL{\displaystyle {\textsf {L}}}(el conjunto de todos los problemas que se pueden resolver en el espacio logarítmico) está estrictamente contenido enPAG{\displaystyle {\textsf {P}}}o igual aPAG{\displaystyle {\textsf {P}}}. Nuevamente, existen muchas clases de complejidad entre las dos, como por ejemplo:NL{\displaystyle {\textsf {NL}}}yCAROLINA DEL NORTE{\displaystyle {\textsf {NC}}}y se desconoce si son clases distintas o iguales.

Se sospecha quePAG{\displaystyle {\textsf {P}}}yBPP{\displaystyle {\textsf {BPP}}}son iguales. Sin embargo, actualmente está abierto siBPP=NEXP{\displaystyle {\textsf {BPP}}={\textsf {NEXP}}}.

Dificultad

Un problema que teóricamente puede resolverse, pero que requiere una cantidad impracticamente grande, casi infinita, de recursos (por ejemplo, tiempo) para hacerlo, se conoce como unproblema intratable . [ 14 ] Por el contrario, un problema que puede resolverse en la práctica se denomina un problema que puede resolverse en la práctica.Problema manejable , literalmente "un problema que se puede resolver". El términoinviable(literalmente "no se puede hacer") se usa a veces indistintamente conintratable, [ 15 ] aunque esto conlleva el riesgo de confusión con unasolución factibleenoptimización matemática. [ 16 ]

Los problemas tratables se identifican frecuentemente con problemas que tienen soluciones en tiempo polinomial (PAG{\displaystyle {\textsf {P}}},PTIME{\displaystyle {\textsf {PTIME}}}); esto se conoce como la tesis de Cobham-Edmonds . Los problemas que se sabe que son intratables en este sentido incluyen aquellos que son EXPTIME -difíciles. Sinotario público{\displaystyle {\textsf {NP}}}no es lo mismo quePAG{\displaystyle {\textsf {P}}}, entonces los problemas NP-difíciles también son intratables en este sentido.

Sin embargo, esta identificación es inexacta: una solución de tiempo polinomial con un grado grande o un coeficiente principal grande crece rápidamente y puede ser poco práctica para problemas de tamaño práctico; por el contrario, una solución de tiempo exponencial que crece lentamente puede ser práctica con datos de entrada realistas, o una solución que tarda mucho tiempo en el peor de los casos puede tardar poco tiempo en la mayoría de los casos o en el caso promedio, y por lo tanto seguir siendo práctica. Decir que un problema no está enPAG{\displaystyle {\textsf {P}}}Esto no implica que todos los casos grandes del problema sean difíciles, ni siquiera que la mayoría de ellos lo sean. Por ejemplo, se ha demostrado que el problema de decisión en la aritmética de Presburger no esPAG{\displaystyle {\textsf {P}}}Sin embargo, se han escrito algoritmos que resuelven el problema en tiempos razonables en la mayoría de los casos. De manera similar, los algoritmos pueden resolver el problema de la mochila NP-completo en un amplio rango de tamaños en menos de un tiempo cuadrático, y los solucionadores SAT manejan habitualmente instancias grandes del problema de satisfacibilidad booleana NP-completo .

Para ver por qué los algoritmos de tiempo exponencial son generalmente inutilizables en la práctica, considere un programa que realiza2norte{\displaystyle 2^{n}}operaciones antes de detenerse. Para pequeñasnorte{\displaystyle n}, digamos 100, y suponiendo a modo de ejemplo que la computadora lo hace1012{\displaystyle 10^{12}}operaciones cada segundo, el programa se ejecutaría durante aproximadamente4×1010{\displaystyle 4\times 10^{10}}años, que es del mismo orden de magnitud que la edad del universo . Incluso con una computadora mucho más rápida, el programa solo sería útil para instancias muy pequeñas y, en ese sentido, la intratabilidad de un problema es algo independiente del progreso tecnológico. Sin embargo, un algoritmo de tiempo exponencial que toma1.0001norte{\displaystyle 1.0001^{n}}Las operaciones son prácticas hastanorte{\displaystyle n}se vuelve relativamente grande.

De manera similar, un algoritmo de tiempo polinomial no siempre es práctico. Si su tiempo de ejecución es, por ejemplo,norte15{\displaystyle n^{15}}, es irrazonable considerarlo eficiente y sigue siendo inútil excepto en casos pequeños. De hecho, en la práctica inclusonorte3{\displaystyle n^{3}}onorte2{\displaystyle n^{2}}Los algoritmos suelen ser poco prácticos para problemas de tamaño realista.

teoría de la complejidad continua

La teoría de la complejidad continua puede referirse a la teoría de la complejidad de problemas que involucran funciones continuas que se aproximan mediante discretizaciones, como se estudia en el análisis numérico . Un enfoque de la teoría de la complejidad del análisis numérico [ 17 ] es la complejidad basada en la información .

La teoría de la complejidad continua también puede referirse a la teoría de la complejidad del uso de la computación analógica , que utiliza sistemas dinámicos continuos y ecuaciones diferenciales . [ 18 ] La teoría de control puede considerarse una forma de computación y las ecuaciones diferenciales se utilizan en el modelado de sistemas de tiempo continuo e híbridos discreto-continuo. [ 19 ]

Historia

Un ejemplo temprano de análisis de complejidad de algoritmos es el análisis del tiempo de ejecución del algoritmo euclidiano realizado por Gabriel Lamé en 1844.

Antes de que comenzara la investigación propiamente dicha dedicada a la complejidad de los problemas algorítmicos, diversos investigadores sentaron numerosas bases. La más influyente fue la definición de máquinas de Turing propuesta por Alan Turing en 1936, que resultó ser una simplificación muy robusta y flexible de un ordenador.

El inicio de los estudios sistemáticos en complejidad computacional se atribuye al artículo fundamental de 1965 «Sobre la complejidad computacional de los algoritmos» de Juris Hartmanis y Richard E. Stearns , que estableció las definiciones de complejidad temporal y espacial , y demostró los teoremas de jerarquía. [ 20 ] Además, en 1965 Edmonds sugirió considerar un algoritmo «bueno» como aquel cuyo tiempo de ejecución está acotado por un polinomio del tamaño de la entrada. [ 21 ]

Entre los trabajos anteriores que estudian problemas resolubles por máquinas de Turing con recursos limitados específicos se incluyen [ 20 ] la definición de autómatas lineales limitados de John Myhill (Myhill 1960), el estudio de conjuntos rudimentarios de Raymond Smullyan (1961), así como el artículo de Hisao Yamada [ 22 ] sobre computación en tiempo real (1962). Un poco antes, Boris Trakhtenbrot (1956), un pionero en el campo de la URSS, estudió otra medida de complejidad específica. [ 23 ] Como él recuerda:

Sin embargo, mi interés inicial en la teoría de autómatas fue relegado progresivamente en favor de la complejidad computacional, una fascinante fusión de métodos combinatorios, heredados de la teoría de conmutación , con el arsenal conceptual de la teoría de algoritmos. Estas ideas se me ocurrieron a principios de 1955, cuando acuñé el término "función de señalización", que hoy en día se conoce comúnmente como "medida de complejidad". [ 24 ]

En 1967, Manuel Blum formuló un conjunto de axiomas (ahora conocidos como axiomas de Blum ) que especifican propiedades deseables de las medidas de complejidad en el conjunto de funciones computables y demostró un resultado importante, el llamado teorema de aceleración . El campo comenzó a florecer en 1971 cuando Stephen Cook y Leonid Levin demostraron la existencia de problemas prácticamente relevantes que son NP-completos . En 1972, Richard Karp llevó esta idea un paso más allá con su artículo fundamental, "Reducibilidad entre problemas combinatorios", en el que demostró que 21 problemas diversos de teoría combinatoria y de grafos , cada uno tristemente célebre por su intratabilidad computacional, son NP-completos. [ 25 ]

Véase también

Funciona en la complejidad

  • Wuppuluri, Shyam; Doria, Francisco A., eds. (2020), Desentrañando la complejidad: La vida y obra de Gregory Chaitin , World Scientific, doi : 10.1142/11270 , ISBN 978-981-12-0006-9, S2CID 198790362 

Referencias

Citas

  1. "Problema P vs NP | Instituto de Matemáticas Clay" . www.claymath.org . Archivado del original el 6 de julio de 2018. Consultado el 6 de julio de 2018 .
  2. Véase Arora y Barak 2009 , Capítulo 1: El modelo computacional y por qué no importa.
  3. 1 2 Véase Sipser 2006 , Capítulo 7: Complejidad temporal
  4. 1 2 Ladner, Richard E. (1975), "Sobre la estructura de la reducibilidad en tiempo polinomial", Journal of the ACM , 22 (1): 151– 171, doi : 10.1145/321864.321877 , S2CID 14352974 . 
  5. Berger, Bonnie A. ; Leighton, T (1998), "El plegamiento de proteínas en el modelo hidrofóbico-hidrofílico (HP) es NP-completo", Journal of Computational Biology , 5 (1): 27– 40, CiteSeerX 10.1.1.139.5547 , doi : 10.1089/cmb.1998.5.27 , PMID 9541869 .  
  6. Cook, Stephen (abril de 2000), El problema P versus NP (PDF) , Clay Mathematics Institute , archivado del original (PDF) el 12 de diciembre de 2010 , recuperado el 18 de octubre de 2006 .
  7. Jaffe, Arthur M. (2006), "El gran desafío del milenio en matemáticas" (PDF) , Notices of the AMS , 53 (6), archivado (PDF) del original el 12 de junio de 2006 , recuperado el 18 de octubre de 2006 .
  8. Arvind, Vikraman; Kurur, Piyush P. (2006), "El isomorfismo de grafos está en SPP", Information and Computation , 204 (5): 835– 852, doi : 10.1016/j.ic.2006.02.002 .
  9. Schöning, Uwe (1988), "El isomorfismo de grafos se encuentra en la jerarquía baja", Journal of Computer and System Sciences , 37 (3): 312– 323, doi : 10.1016/0022-0000(88)90010-4
  10. Babai, László (2016). "Isomorfismo gráfico en tiempo cuasipolinomial". arXiv : 1512.03547 [ cs.DS ].
  11. Fortnow, Lance (13 de septiembre de 2002). "Blog sobre complejidad computacional: factorización" . weblog.fortnow.com .
  12. Wolfram MathWorld: Criba de cuerpos numéricos
  13. Curso de Boaz Barak sobre Complejidad Computacional, Lección 2
  14. Hopcroft, JE, Motwani, R. y Ullman, JD (2007) Introducción a la teoría de autómatas, lenguajes y computación , Addison Wesley, Boston/San Francisco/Nueva York (página 368)
  15. ^ Meurant, Gerard (2014). Algoritmos y Complejidad . Elsevier. pag. pag. 4 . ISBN  978-0-08093391-7.
  16. ↑ Zobel , Justin (2015). Writing for Computer Science . Springer. p. 132. ISBN  978-1-44716639-9.
  17. Smale, Steve (1997). "Teoría de la complejidad y análisis numérico". Acta Numerica . 6. Cambridge Univ Press: 523–551 . Bibcode : 1997AcNum...6..523S . CiteSeerX 10.1.1.33.4678 . doi : 10.1017/s0962492900002774 . S2CID 5949193 .  
  18. Babai, László; Campagnolo, Manuel (2009). "Una encuesta sobre cálculos de tiempo continuo". arXiv : 0907.3117 [ cs.CC ].
  19. Tomlin, Claire J.; Mitchell, Ian; Bayen, Alexandre M.; Oishi, Meeko (julio de 2003). "Técnicas computacionales para la verificación de sistemas híbridos". Actas del IEEE . 91 (7): 986– 1001. Bibcode : 2003IEEEP..91..986T . CiteSeerX 10.1.1.70.4296 . doi : 10.1109/jproc.2003.814621 . 
  20. 1 2 Fortnow y Homer (2003)
  21. Richard M. Karp, " Combinatoria, complejidad y aleatoriedad ", Conferencia del Premio Turing de 1985
  22. Yamada, H. (1962). "Real-Time Computation and Recursive Functions Not Real-Time Computable". IEEE Transactions on Electronic Computers . EC-11 (6): 753– 760. Bibcode : 1962IRTEC..11..753Y . doi : 10.1109/TEC.1962.5219459 .
  23. Trakhtenbrot, BA: Funciones de señalización y operadores tabulares. Uchionnye Zapiski Penzenskogo Pedinstituta (Actas del Instituto Pedagógico de Penza) 4, 75–87 (1956) (en ruso)
  24. Boris Trakhtenbrot, " De la lógica a la informática teórica: una actualización ". En: Pilares de la informática , LNCS 4800, Springer 2008.
  25. Karp, Richard M. (1972), "Reducibilidad entre problemas combinatorios" (PDF) , en Miller, RE; Thatcher, JW (eds.), Complejidad de los cálculos informáticos , Nueva York: Plenum, pp. 85–103 , archivado del original (PDF) el 29 de junio de 2011 , recuperado el 28 de septiembre de 2009. 

Libros de texto

Encuestas

  • Khalil, Hatem; Ulery, Dana (1976), "Una revisión de los estudios actuales sobre la complejidad de los algoritmos para ecuaciones diferenciales parciales", Actas de la conferencia anual sobre ACM 76 , pp. 197–201 , doi : 10.1145/800191.805573 , ISBN  9781450374897, S2CID 15497394 
  • Cook, Stephen (1983), "Una visión general de la complejidad computacional", Communications of the ACM , 26 (6): 400– 408, doi : 10.1145/358141.358144 , ISSN 0001-0782 , S2CID 14323396  
  • Fortnow, Lance; Homer, Steven ( 2003), "Una breve historia de la complejidad computacional" (PDF) , Boletín de la EATCS , 80 : 95–133
  • Mertens, Stephan (2002), "Complejidad computacional para físicos", Computing in Science & Engineering , 4 (3): 31– 47, arXiv : cond-mat/0012185 , Bibcode : 2002CSE.....4c..31M , doi : 10.1109/5992.998639 , ISSN 1521-9615 , S2CID 633346  
  • El zoológico de la complejidad
  • "Clases de complejidad computacional" , Enciclopedia de Matemáticas , EMS Press , 2001 [1994]
  • Scott Aaronson: Por qué los filósofos deberían interesarse por la complejidad computacional