Introducción a la Complejidad Computacional • El análisis sobre decidibilidad que hemos hecho nos permite saber qué podemos hacer y qué no podemos hacer. • Pero nada sabemos de qué tan difı́cil resolver los problemas en términos de complejidad computacional. • Más que clasificar los problemas en cuanto a su tiempo de ejecución, nos interesa clasificarlos en términos de su tratabilidad. • Diremos que un problema de decisión es tratable si se conoce un algoritmo polinomial que lo resuelva, para cada instancia posible del problema. • Normalmente utilizaremos indistintamente los términos tratable y eficiente. • Consideremos el problema de satisfacibilidad de lógica proposicional: Sea ϕ ∈ L(P ), ¿es ϕ satisfactible? Jorge Baier Aranda, PUC << Atrás 250 • Sabemos que este problema es decidible, pero, en términos computacionales ¿qué tan difı́cil es resolverlo? • Lamentablemente, para este problema no se conoce un algoritmo polinomial (eficiente)... • Pero tampoco se ha demostrado que no exista. • Sin embargo, existe suficiente evidencia para creer que efectivamente no existe un algoritmo eficiente para resolverlo. • A continuación detallaremos un poco más acerca de la teorı́a de complejidad que hay detrás de estas afirmaciones. Jorge Baier Aranda, PUC << Atrás 251 ¿Qué es resolver un problema de decisión? • Llevemos esta pregunta a un ejemplo más sencillo: ¿qué significa determinar si una fórmula proposicional ϕ es satisfactible? significa que debemos encontrar al menos una valuación σ tal que σ |= ϕ. • En este caso, la valuación corresponde a una solución al problema. • Una vez encontrada esta valuación, podemos dar una respuesta. • Para analizar qué tan complejo es resolver un problema de decisión deberemos preguntarnos qué tan complejo es generar la solución. Jorge Baier Aranda, PUC << Atrás 252 Algunos problemas de decisión • Los siguientes son algunos problemas de decisión tı́picos: 1. Dado un grafo (V, E), existe un camino cerrado que recorra a todos los nodos del grafo (circuito hamiltoniano). 2. Dada una fórmula en 3-FNC (una fórmula proposicional con a lo más tres literales por cláusula), ¿esta satisfactible? (3SAT) 3. La misma pregunta pero para cláusulas con a los más 2 literales. (2SAT) 4. Dado un conjunto de enteros a0, a1, . . . , an y un entero b, ¿existe un conjunto de enteros x0, x1, . . . , xn? tales que a0x0 + a1x1 + · · · + anxn ≤ b? (Programación entera) 5. Dado un número N , existen dos factores P y Q distintos de 1 tales que N = P Q (NUMCOMP). Jorge Baier Aranda, PUC << Atrás 253 Las clases P y N P • Las clases P y N P son clases de problemas de decisión. • Un problema de decisión pertenece a la clase P si existe un algoritmo determinı́stico polinomial, en el largo de la entrada, que lo resuelve. • El algoritmo es polinomial para cualquier entrada. • ¿qué es un algoritmo determinı́stico? Es esencialmente una máquina de Turing como la que hemos visto hasta ahora. • Algunos ejemplos de problemas de decisión en la clase P: – dado un grafo (V, E), ¿es d la distancia mı́nima entre el nodo v1 y el nodo v2 (v1, v2 ∈ V )? – dada una lista de números L, ¿es la lista L0 una ordenación ascendente de L? • Un problema pertenece a la clase N P si es que es posible generar una solución con una máquina no determinı́stica y luego verificarla en tiempo polinomial. Jorge Baier Aranda, PUC << Atrás 254 • La N de N P viene de la generación no determinı́stica y la P de la verificación polinomial. • El proceso de generación y verificación puede ser aclarado con el siguiente esquema: Instancia del problema Sí Algoritmo Adivinador de la solución (no determinístico) Jorge Baier Aranda, PUC Algoritmo Verificador (determinístico y polinomial) No << Atrás 255 Algoritmos no determinísticos • Ası́ como relacionábamos los algoritmos con las Máquinas de Turing, relacionaremos los algoritmos no determinı́sticos con las máquinas de Turing no determinı́sticas. • Las MT’s no determinı́sticas, bajo una misma entrada, pueden tener distintas posibles ejecuciones. • En la siguiente figura se muestran distintas alternativas de ejecución. Jorge Baier Aranda, PUC << Atrás 256 estado palabra en la cinta (q0 , w) (p, w1 ) (r1 , x1 ) ... ... (r2 , x2 ) (r3 , x3 ) ... ... ... (qf , y ) ... ... (qf , y 0 ) (qf , y 000 ) (qf , y 00 ) • En esta figura representa un árbol de ejecución, en el cual cada nodo (q, w) es un par que contiene el estado de la máquina y el string que contiene la cinta. Cada flecha corresponde a una transición. En el estado p, la máquina podrı́a tomar Jorge Baier Aranda, PUC << Atrás 257 cualquiera de las alternativas r1, r2 o r3 • Las hojas del árbol contienen los estados en los que la máquina se detiene junto con la solución al problema, representada por la palabra en la cinta. • Es importante notar que algunas de las ramas pueden ser infinitas. • Decimos que la máquina ha resuelto el problema para una instancia w si al menos una hoja del árbol construido a partir de (q0, w) (con q0 el estado inicial de la máquina) contiene una hoja (p, wF ) tal que wF representa una solución para el problema. • Podemos decir que el tiempo que toma el algoritmo en llegar a una solución es proporcional al largo de la rama hasta la hoja que la representa. • Una forma alternativa de definir la pertenencia de un problema P a la clase N P es que, para toda instancia w de P existe una rama del arbol de ejecución acotada por un polinomio y que tiene como hoja a una solución para el problema. Jorge Baier Aranda, PUC << Atrás 258 Reducción Polinomial • Dentro de la clase de problemas N P existen algunos problemas que son más difı́ciles que otros. • Tal como en el caso de los algoritmos de decisión, diremos que un problema de decisión P1 (con un lenguaje asociado L1) es reducible a un problema de decisión P2 (con un lenguaje asociado L2 12) si es que es posible encontrar un función de transformación f tal que w ∈ L1 ssi f (w) ∈ L2 • En este caso decimos que L1 ≤ L2. • Ahora, si la función f es computable en un tiempo polinomial dependiente del largo de la entrada, diremos que L1 ≤pol L2 12 En el futuro, designaremos los problemas de decisión sólo por su lenguaje. Jorge Baier Aranda, PUC << Atrás 259 • ¿Para qué puede servir ahora el concepto de reducción? • Por el momento, si sabemos que L es un problema que pertenece a la clase P y demostramos que L0 ≤pol L entonces habremos demostrado que el problema L0 también pertenece a la clase P ¿Por qué? Porque en tiempo polinomial transformamos una instancia del problema L0 a un problema de L y luego usamos el algoritmo de decisión para L (polinomial) para resolver el problema. Jorge Baier Aranda, PUC << Atrás 260 Problemas NP-completos • Los problemas NP-completos son los más difı́ciles de la clase NP. Ya veremos por qué... • Definición 30. Un problema de decisión L es NP-completo ssi: – L ∈ NP – Para todo lenguaje L0 ∈ N P es posible demostrar que L0 ≤pol L • En términos prácticos esto significa que si encontramos un algoritmo eficiente para resolver un problema NP-completo, podremos resolver eficientemente todos los problemas de la clase NP. • Teorema 8. [de Cook] El problema de decisión asociado al siguiente lenguaje: SAT = {ϕ | es fórmula proposicional en FNC satisfactible} Es NP-completo. Jorge Baier Aranda, PUC << Atrás 261 ¿Cómo podemos demostrar esto? Sabemos que si un problema está en la clase N P, entonces éste es resuelto por una MT no determinı́stica cuyo tiempo de ejecución está acotado por un polinomio en el largo de la entrada. En términos resumidos, la idea es que para toda MT no determinı́stica cuyo tiempo de ejecución está acotado por un polinomio p en el largo de la entrada, es posible construir una fórmula proposicional, en forma normal conjuntiva, que describe el estado de la máquina y el estado de la cinta en todo momento de la computación de la solución. La fórmula construida es satisfactible ssi la máquina acepta. • Esto significa que cualquier problema de la clase N P puede ser reducido a SAT. • Esto implica que basta con resolver SAT eficientemente, para resolver eficientemente todos los problemas de la clase N P. • Una vez que se estableció que SAT es NP-completo, se demostró que muchos otros problemas también son NP-completos: Jorge Baier Aranda, PUC << Atrás 262 – – – – – Circuito Hamiltoniano. 3-SAT. Progamación entera. Matching de expresiones regulares de Perl. Buscaminas (!) • Sin embargo, hay otros problemas que pertenecen a la clase NP, pero que aún no se demuestra si son NP-completos: – NUMCOMP (problema de encontrar los factores no triviales de un número natural). Jorge Baier Aranda, PUC << Atrás 263 ¿Cómo demostramos que L es NP-completo? • Lo que hay que demostrar son dos cosas: 1. Que el problema pertenece a la clase N P. Para demostrar esto, basta que sea posible verificar en tiempo polinomial una solución para el problema. 2. Que todos los problemas de la clase N P se pueden reducir a L. Para hacer esto basta reducir cualquier problema NP-completo a L. La idea es que, dada tal reducción, inmediatamente sabemos que todos los problemas de N P se pueden reducir a L. En el siguiente esquema se muestra esta idea en forma gráfica lo que sucede si reducimos SAT a L. NP CLIQUE MINESWEEPER SAT L CH 3−SAT ... Jorge Baier Aranda, PUC << Atrás 264 3-SAT es NP-completo • La demostración de este hecho la haremos reduciendo SAT a 3-SAT. • Debemos demostrar que cualquier problema de SAT lo podemos reducir a un problema 3-SAT. • Supongamos que tenemos una fórmula arbitrara ϕ ∈ L(P ) en FNC. • La función de transformación la podemos definir de la siguiente manera: Jorge Baier Aranda, PUC << Atrás 265 Reemplazar cada cláusula l1 ∨ l2 ∨ l3 ∨ . . . ∨ ln Por: (l1 ∨ l2 ∨ z1)∧ (¬z1 ∨ l3 ∨ z2)∧ ... (¬zk−2 ∨ lk ∨ zk−1)∧ ... (¬zn−4 ∨ ln−2 ∨ zn−3)∧ ... (¬zn−3 ∨ ln−1 ∨ ln) donde n ≥ 4. Es sencillo darse cuenta que la cláusula original es satisfecha si y sólo si este nuevo conjunto es satisfecho. Nuevamente, estas transformaciones están acotadas por un polinomio en el largo de la cláusula. Jorge Baier Aranda, PUC << Atrás 266 • Finalmente, podemos concluir que SAT ≤pol 3-SAT por lo que 3-SAT es NP-completo. Jorge Baier Aranda, PUC << Atrás 267 CLIQUE es NP-completo • Denominamos CLIQUE al siguiente problema: Dado un grafo G y un entero k, ¿es posible encontrar un subgrafo de G completo de tamaño k?13 • Claramente CLIQUE pertenece a N P. • Ahora deberemos hacer una reducción de SAT a N P. • Supongamos que tenemos una fórmula en FNC: C1 ∨ C2 ∨ . . . ∨ Ck con n variables proposicionales. Formaremos un grafo G con un nodo por cada literal que aparece en cada cláusula. Cada nodo está etiquetado con el literal que le dio origen. 13 Un grafo completo es aquel en el que todos los nodos están conectados entre sı́. Jorge Baier Aranda, PUC << Atrás 268 Agregaremos un arco entre un nodo etiquetado con l y un nodo etiquetado con l0 si y solo si: – l y l0 están en cláusulas distintas. – l no es el literal complementario de l. Supongamos la siguiente fórmula: (x1 ∨ x2 ∨ ¬x3) ∧ (¬x1 ∨ ¬x3) ∧ (x3 ∨ x2) El grafo resultante queda como: x1 x2 ¬x1 ¬x3 x2 Jorge Baier Aranda, PUC ¬x3 x3 << Atrás 269 Ahora deberemos demostrar que G tiene un subgrafo completo de tamaño k ssi ϕ es satisfactible. ⇒. Como todos los miembros del subgrafo pertenecen a cláusulas distintas, cualquier valuación σ que hace verdadero a todo literal en el subgrafo hace verdadera a la fórmula. (recordemos que dos literales complementarios no pueden estar en un subgrafo completo) ⇐. Si la fórmula ϕ es satisfecha, debe existir una valuación σ que haga verdaderos a al menos un literal en cada cláusula. Sean l1 ∈ C1, l2 ∈ C2, . . . , lk ∈ Ck estos literales. Notemos que no es posible que existan dos literales complementarios li y lj (1 ≤ i < j ≤ k). Necesariamente, entonces, podemos construir arcos entre cada par de nodos en donde aparecen dichos literales siguiendo las reglas de construcción del grafo. Jorge Baier Aranda, PUC << Atrás 270 2-SAT está en P • Recordemos que 2SAT es el problema de satisfacer fórmulas en 2-FNC (con exactamente dos literales por cláusula). • Una fórmula en 2-FNC se ve de la siguiente manera: ϕ = (l1 ∨ m1) ∧ (l2 ∨ m2) ∧ . . . ∧ (ln ∨ mn), donde li, lj son literales que corresponden a un conjunto de variables P . • Reduciremos este problema a encontrar un camino con ciertas caracterı́sticas en un grafo formado a partir de las variables en P . • Se construye un grafo G = (V, E) en el cual V = {`|` ∈ P o ` ∈ P }, es decir, para cada variable p ∈ P hay un nodo etiquetado con p y otro etiquetado con ¬p. Jorge Baier Aranda, PUC << Atrás 271 Por otro lado, por cada li ∨ mi, agregamos una arista entre ¬li y mi y entre ¬mi y li (estos arcos provienen de considerar la disyunción como una implicación). Proposición: El grafo construido contiene un ciclo ` → . . . → ` → . . . → ` si y solo si ϕ es insatisfactible. ⇒ Supongamos que G contiene un ciclo de ese estilo y que ϕ es satisfactible. En ese caso sabemos que existe un σ tal que σ |= ϕ. Hay dos casos: – σ(`) = 1. Debido a la estructura del ciclo esto obliga a que σ(`) = 1, lo cual es una contradicción. – σ(`) = 0. Lleva a una contradicción, igual que en el caso anterior. ⇐ Si no hay un ciclo de este estilo, es posible siempre construir una valuación σ tal que σ |= ϕ de la siguiente manera: 1. Para cada literal ` sin un valor de verdad asignado, le asignamos valor de verdad verdadero. 2. Asignamos valor de verdad verdadero a todos los nodos que son alcanzables desde `. 3. Asignamos valor de verdad falso a las negaciones de cada uno de los nodos asignados. Jorge Baier Aranda, PUC << Atrás 272 4. Si aún existen nodos sin valor de verdad asignado, volver al paso 1. Este algoritmo siempre producirá valuaciones consistentes, ya que nunca es posible que se asigne al mismo tiempo valor de verdad 1 y valor de verdad 0 a un mismo nodo (no hay ciclos). Por otra parte, con esta asignación se satisfacen todos las disyunciones de la fórmula que están representadas a través de los arcos del grafo. Importante: Este grafo se puede construir en tiempo polinomial en el largo de la fórmula. • Una vez demostrado este teorema, para chequear la satisfactibilidad de.ϕ, basta con revisar si existe un camino ` → . . . → ` → . . . → ` en el grafo. • ¡Este problema es polinomial! Existe un algoritmo O(n3) que encuentra las distancias entre todo par de nodos de un grafo de n nodos. Jorge Baier Aranda, PUC << Atrás 273