Análisis de Algoritmos Problemas NP-completos Dra. Elisa Schaeffer [email protected] PISIS / FIME / UANL Problemas NP-completos– p. 1 Problemas NP-completos La clase NP contiene numerosos problemas de importancia práctica. Típicamente el problema tiene que ver con la construcción o existencia de un objeto matemático que satisface ciertas especificaciones. Problemas NP-completos– p. 2 Optimización versus decisión La versión de la construcción misma es un problema de optimización, donde la mejor construcción posible es la solución deseada. En la versión de decisión, que es la versión que pertenece a la clase NP, la pregunta es si existe por lo menos una configuración que cumpla con los requisitos del problema. Problemas NP-completos– p. 3 Demostraciones Se puede decir que la mayoría de los problemas interesantes de computación en el mundo real pertenecen a la clase NP. La aplicación “cotidiana” de la teoría de complejidad computacional es el estudio sobre las clases a las cuales un dado problema pertenece: solamente a NP o también a P, o quizás a ninguna de las dos. Problemas NP-completos– p. 4 Método básico Mostrar que el problema de interés sea NP-completo, porque este implicaría que el problema es entre los menos probables de pertenecer en la clase P. Si algún problema NP-completo perteneciera a NP, aplicaría NP = P. Problemas NP-completos– p. 5 Nivel de estudio Si se sube a un nivel suficientemente general, muchos problemas resultan NP-completos. En muchos casos es importante identificar qué requisitos causan que el problema resulte NP-completo versus polinomial. Una técnica básica es estudiar el conjunto de instancias producidas por una reducción utilizada en la demostración de ser NP-completo para capturar otro problema NP-completo. Problemas NP-completos– p. 6 Diseño de demostraciones Demostrar NP-completitud para un problema Q: Jugar con instancias pequeñas de Q para desarrollar unos “gadgets” u otros componentes básicos para usar en la prueba. Problemas NP-completos– p. 7 Diseño de demostraciones Demostrar NP-completitud para un problema Q: Jugar con instancias pequeñas de Q para desarrollar unos “gadgets” u otros componentes básicos para usar en la prueba. Buscar por problemas que ya tengan prueba de ser NP-completos que podrían servir para la reducción necesaria. Problemas NP-completos– p. 7 Diseño de demostraciones Demostrar NP-completitud para un problema Q: Jugar con instancias pequeñas de Q para desarrollar unos “gadgets” u otros componentes básicos para usar en la prueba. Buscar por problemas que ya tengan prueba de ser NP-completos que podrían servir para la reducción necesaria. Construir un reducción R problema Q. de un problema P conocido y NP-completo al Problemas NP-completos– p. 7 Diseño de demostraciones Demostrar NP-completitud para un problema Q: Jugar con instancias pequeñas de Q para desarrollar unos “gadgets” u otros componentes básicos para usar en la prueba. Buscar por problemas que ya tengan prueba de ser NP-completos que podrían servir para la reducción necesaria. Construir un reducción R problema Q. de un problema P conocido y NP-completo al Probar que con la entrada R(x), si la solución de Q es “sí” que este implica que la solución de P con x también es siempre “sí”. Problemas NP-completos– p. 7 Diseño de demostraciones Demostrar NP-completitud para un problema Q: Jugar con instancias pequeñas de Q para desarrollar unos “gadgets” u otros componentes básicos para usar en la prueba. Buscar por problemas que ya tengan prueba de ser NP-completos que podrían servir para la reducción necesaria. Construir un reducción R problema Q. de un problema P conocido y NP-completo al Probar que con la entrada R(x), si la solución de Q es “sí” que este implica que la solución de P con x también es siempre “sí”. Probar que con la entrada x, si la solución de P es “sí” que este implica que la solución de Q con R(x) también es “sí”. Problemas NP-completos– p. 7 La dificultad En la construcción típicamente se busca por representar las elecciones hechas, la consistencia y restricciones. Lo difícil es cómo expresar la naturaleza del problema P en términos de Q. Problemas NP-completos– p. 8 Estudios de continuación Cuando ya está establecido que un problema de interés es NP-completo, normalmente se dirige el esfuerzo de investigación a estudiar casos especiales algoritmos de aproximación análisis asintótica del caso promedio algoritmos aleatorizados algoritmos exponenciales para instancias pequeñas métodos heurísticos de búsqueda local Problemas NP-completos– p. 9 Relacion polinomialmente balanceada Una relación R ⊆ Σ∗ × Σ∗ se puede decidir en tiempo polinomial si y sólo si existe una TM determinista que decide el lenguaje {x; y | (x, y) ∈ R} en tiempo polinomial. Una relación R está polinomialmente balanceada si (x, y) ∈ R → (∃k ≥ 1 tal que |y| ≤ |x|k ). Problemas NP-completos– p. 10 Conexión con la clase NP Sea L ⊆ Σ∗ un lenguaje. Aplica que L ∈ NP si y sólo si existe una relación polinomialmente balanceada R que se puede decidir en tiempo polinomial tal que L = {x ∈ Σ∗ | (x, y) ∈ R para algún y ∈ Σ∗ } . Problemas NP-completos– p. 11 Demostración (⇒) Suponga que existe tal relación R. Entonces L está decidida por una máquina Turing no determinista que con la entrada x “adivina” un valor y con largo máximo |x|k y utiliza la máquina para R para decidir en tiempo polinomial si aplica (x, y) ∈ R. Problemas NP-completos– p. 12 Demostración (⇐) Suponga que L ∈ NP. Esto implica que existe una máquina Turing no determinista N que decide a L en tiempo |x|k para algún valor de k. Definimos (x, y) ∈ R si y sólo si y es una codificación de una computación de N que acepta la entrada x. Problemas NP-completos– p. 13 (⇐) continua... Esta R está polinomialmente balanceada, como cada computación de N tiene cota polinomial. Además se puede decidir R en tiempo polinomial, como se puede verificar en tiempo polinomial si o no y es una codificación de una computación que acepta a x en N . Como N decide a L, tenemos L = {x | (x, y) ∈ R para algún y} , exactamente como queríamos. Problemas NP-completos– p. 14 Certificado conciso Un problema A pertenece a la clase NP si cada instancia con la respuesta “sí” del problema A tiene por lo menos un certificado concisoa y. En los problemas típicos que tratan de la existencia de un objeto matemático que cumple con ciertos criterios, el objeto mismo sirve como un certificado. a también llamado un testigo polinomial Problemas NP-completos– p. 15 Problemas kS AT El lenguaje kS AT, donde k ≥ 1 es un entero, es el conjunto de expresiones booleanas φ ∈ S AT (en C NF) en las cuales cada cláusula contiene exactamente k literales. 3S AT es NP-completo Problemas NP-completos– p. 16 Demostración 3S AT ∈ NP por ser un caso especial de S AT ∈ NP. C IRCUITSAT es NP-completo y tenemos una reducción de C IRCUITSAT a S AT. Vamos a reconsiderar las cláusulas producidas en esa reducción: ¡todas tienen tres literales o menos! Problemas NP-completos– p. 17 Aumento de literales Como las cláusulas son disyunciones, podemos “aumentar” cada cláusula de uno o dos literales a tener tres simplemente por copiar literales. Entonces, tenemos una reducción de C IRCUITSAT a 3S AT. Problemas NP-completos– p. 18 Transformaciones A veces es posible aplicar transformaciones que eliminen algunas propiedades de un lenguaje NP-completo así que el hecho que está NP-completo no está afectado. 3S AT es NP-completo aún cuando solamente se permite que cada variable aparezca por máximo tres veces en la expresión φ ∈ 3S AT y además que cada literal aparezca por máximo dos veces en φ. Problemas NP-completos– p. 19 Demostración Una reducción donde cada instancia φ ∈ 3S AT está transformada a eliminar las propiedades no permitidas. Considera una variable x que aparece k > 3 veces en φ. Introducimos variables nuevas x1 , . . . , xk y reemplazamos la primera ocurrencia de x en φ por x1 , la segunda por x2 , etcétera. Problemas NP-completos– p. 20 Cláusulas auxiliares Para asegurar que las variables nuevas tengan todas el mismo valor, añademos las cláusulas siguientes en φ: (¬x1 ∨ x2 ), (¬x2 ∨ x3 ), . . . , (¬xk ∨ x1 ). Denota por φ′ la expresión que resulta cuando cada ocurrencia extra de una variable en φ ha sido procesada de esta manera. Resulta que φ′ ya cumple con las propiedades deseadas y que φ es satisfactible si y sólo si φ es satisfactible. Problemas NP-completos– p. 21 2S AT Para cada instancia φ de 2S AT, existe un algoritmo polinomial basado en el problema R EACHABILITY en un grafo G(φ). Las variables x de φ y sus negaciones ¬x forman el conjunto de vértices de G(φ). Una arista conecta dos vértices xi y xj si y sólo si existe una cláusula ¬xi ∨ xj o xj ∨ ¬xi en φ: {xi , xj } ∈ E ⇔ {¬xj , ¬xi } ∈ E Problemas NP-completos– p. 22 Demostración φ no es satisfactible si y sólo si existe una variable x tal que existen caminos de x a x̄ y viceversa en G(φ). Entonces, sabemos que 2S AT es polinomial. Problemas NP-completos– p. 23 2S AT ∈ NL Además, resulta que 2S AT ∈ NL ⊆ P. Como NL está cerrada bajo el complemento, podemos mostrar que 2S AT Complement ∈ NL. La existencia del camino de “no satisfiabilidad” del resultado anterior puede ser verificada en espacio logarítmico por computación no determinista por “adivinar” una variable x y el camino entre x y ¬x. Problemas NP-completos– p. 24 M AX 2S AT Una generalización de 2S AT: Dada: una expresión booleana φ en C NF con no más de dos literales por cláusula y un entero k Pregunta: ¿existe una asignaciones de valores T que satisfecha por lo menos k cláusulas de φ? M AX 2S AT es NP-completo Problemas NP-completos– p. 25 NAESAT El lenguaje NAESAT⊂ 3S AT contiene las expresiones booleanas φ para las cuales existe una asignación de valores T tal que en ninguna cláusula de φ, todas las literales tengan el mismo valor ⊤ o ⊥. NAESAT es NP-completo Problemas NP-completos– p. 26 Demostración C IRCUITSAT es NP-completo. Además para todo circuito C, tenemos que C ∈ C IRCUITSAT si y sólo si R(C) ∈S AT. Primero aumentamos todas las clausulas de la reducción a contener exactamente tres literales por añadir uno o dos duplicados de un literal z donde hace falta. Vamos a mostrar que para la expresión booleana Rz (C) en C NF de tipo 3S AT aplica que Rz (C) ∈ NAESAT⇔ C ∈C IRCUITSAT. Problemas NP-completos– p. 27 La dirección (⇒) Si T satisface a R(C) en el sentido de NAESAT, también la asignación complementaria T̄ lo satisface por la condición NAESAT. En una de las dos asignaciones asigna ⊥ al literal z, por lo cual todas las cláusulas originales están satisfechas en esta asignación. Entonces, por la reducción de C IRCUITSAT a S AT, existe una asignación que satisface el circuito. Problemas NP-completos– p. 28 La dirección (⇐) Si C es satisfactible, existe una T que satisface a Rz (C). Extendemos T para Rz (C) por asignar T (z) = ⊥. En ninguna cláusula de Rz (C) es permitido que todos los literales tengan el valor ⊤ (y tampoco que todos tengan el valor ⊥). Problemas NP-completos– p. 29 Análisis de T Cada cláusula que corresponde a una puerta tipo ⊤, ⊥, ¬ o variable tenía originalmente dos literales o menos, por lo cual contienen z y T (z) = ⊥. Sin embargo, todas las cláusulas están satisfechas por T , por lo cual algún literal es necesariamente asignado el valor ⊤ en T para cada cláusula. Problemas NP-completos– p. 30 Puertas ∧ y ∨ En el caso de ∧, las cláusulas tienen la forma (¬g ∨ h ∨ z), (¬g ∨ h′ ∨ z), (g ∨ ¬h ∨ ¬h′ ), donde las primeras dos tienen z con su valor ⊥. En la tercera, no todas las tres pueden tener el valor ⊤ porque así no es posible satisfacer a las dos primeras. El caso de ∨ es parecido. Problemas NP-completos– p. 31 Tarea para entregar el martes El problema S AT trata de una expresión booleana φ en C NF y es NP-completo. ¿Qué podemos deducir sobre la complejidad del problema de satisfacción de expresiones en D NF? Después, busca en la literatura o en línea la definición de la clase de complejidad #P y vuelve a analizar la pregunta anterior considerando en especial la clase #P. Problemas NP-completos– p. 32