Análisis de Algoritmos Algoritmos pseudo-polinomiales Dra. Elisa Schaeffer elisa.schaeffer@gmail.com PISIS / FIME / UANL Algoritmos pseudo-polinomiales p. 1
HAMILTON PATH es NP-completo La reducción es de 3SAT a HAMILTON PATH: dada una expresión φ en CNF con las variables x 1,...,x n y cláusulas C 1,...,C r así que cada cláusula contiene tres literales, un grafo G(φ) está construida así que G(φ) contiene un camino de Hamilton si y sólo si φ es satisfactible. En continuación a la clase pasada empezamos con esto. Algoritmos pseudo-polinomiales p. 2
Tres tipos de gadgets 1. gadgets de elección que eligen la asignación a las variables x i, 2. gadgets de consistencia que verifican que todas las ocurrencias de x i tengan el mismo valor asignado y que todas las ocurrencias de x i tengan el valor opuesto, 3. gadgets de restricción que garantizan que cada cláusula sea satisfecha. Algoritmos pseudo-polinomiales p. 3
Las conexiones De elección: en serie. Cada cláusula tiene un gadget de restricción. Entre los de restricción y elección: un gadget de consistencia conectando los de restricción a la arista de verdad de x i si el literal es positivo y a la arista de falso de x i si el literal es negativo. Algoritmos pseudo-polinomiales p. 4
Ilustración = A la izquierda, el gadget de elección, en el centro, el gadget de consistencia y a la derecha, el gadget de restricción. Algoritmos pseudo-polinomiales p. 5
Elementos adicionales Aristas para conectar todos los triángulos, el último vértice de la cadena de los gadgets de elección y un vértice adicional v así que formen una camarilla estos 3n+2 vértices. Un vértice auxiliar w conectado con una arista a v. Algoritmos pseudo-polinomiales p. 6
Idea de la construcción Un lado de un gadget de restricción está recorrida por el camino de Hamilton si y sólo si el literal a cual corresponde es falso. = por lo menos un literal de cada cláusula es verdad porque en el otro caso todo el triángulo será recorrido. El camino empezará en el primer vértice de la cadena de los gadgets de elección y termina en w. Algoritmos pseudo-polinomiales p. 7
Programación entera La cantidad de problemas NP-completos de conjuntos es muy grande y uno de ellos sirve para dar una reducción que muestra que programación entera es NP-completo, mientras programación lineal pertenece a P. Algoritmos pseudo-polinomiales p. 8
Problema de la mochila Dada: una lista de N diferentes artículos ϕ i Φ y cada objeto tiene una utilidad ν(ϕ i ) y un peso ω(ϕ i ) Pregunta: Qué conjunto M Φ de artículo debería uno elegir para tener un valor total por lo menos k si tiene una mochila que solamente soporta peso hasta un cierto límite superior Ψ. Algoritmos pseudo-polinomiales p. 9
En ecuaciones Con la restricción Ψ ϕ Mω(ϕ) se aspira maximizar la utilidad total ν(ϕ) k. ϕ M Algoritmos pseudo-polinomiales p. 10
Complejidad El problema de la mochila es NP-completo, lo que se muestra por un problema de conjuntos (cubierto exacto, inglés: exact cover). Sin embargo, cada instancia del problema de la mochila se puede resolver en tiempo O(N Ψ)....? Algoritmos pseudo-polinomiales p. 11
El algoritmo Definimos variables auxiliares V(w,i) que es el valor total máximo posible seleccionando algunos entre los primeros i artículos así que su peso total es exactamente w. Cada uno de los V(w,i) con w = 1,...,Ψ y i = 1,...,N se puede calcular a través de la ecuación recursiva siguiente: V(w,i+1) = máx{v(w,i),v i+1 +V(w w i+1,i)} donde V(w,0) = 0 para todo w y V(w,i) = si w 0. Algoritmos pseudo-polinomiales p. 12
La salida del algoritmo Podemos calcular en tiempo constante un valor de V(w,i) conociendo algunos otros y en total son NΨ elementos. = Tiempo de ejecución O(N Ψ) La respuesta de la problema de decisión es sí únicamente en el caso que algún valor V(w,i) sea mayor o igual a k. Algoritmos pseudo-polinomiales p. 13
Entonces? Para pertenecer a P, necesitaría tener un algoritmo polinomial en el tamaño de la instancia. Eso es más como N logψ y así menor que el parámetro obtenido N Ψ (tomando en cuenta que Ψ = 2 logψ ). Algoritmos pseudo-polinomiales p. 14
Algoritmo pseudo-polinomial Tales algoritmos donde la cota de tiempo de ejecución es polinomial en los enteros de la entrada y no sus logaritmos se llama un algoritmo pseudo-polinomial. Algoritmos pseudo-polinomiales p. 15
Fuertemente NP-completo Un problema es fuertemente NP-completo si permanece NP-completo incluso en el caso que toda instancia de tamaño n está restringida a contener enteros de tamaño máximo p(n) para algún polinomial p. Un problema fuertemente NP-completo no puede tener algoritmos pseudo-polinomiales salvo que si aplica que P sea igual a NP. Los problemas SAT, MAXCUT, TSPD y HAMILTON PATH, por ejemplo, son fuertemente NP-completos, pero KNAPSACK no lo es. Algoritmos pseudo-polinomiales p. 16
Tareas para entregar el martes En las siguientes diapositivas se detalla dos reducciones. Muestra que sean correctas las dos, en las dos direcciones. 1. TSPD es NP-completo (de HAMILTON PATH) 2. 3COLORING es NP-completo (de NAESAT) Tarea extra: argumentar porqué 2COLORING P. Algoritmos pseudo-polinomiales p. 17
Primera reducción Dado un grafo G = (V,E) con n vértices, hay que construir una matriz de distancias d ij y decidir un presupuesto B así que existe un ciclo de largo menor o igual a B si y sólo si G contiene un camino de Hamilton (nota: no un ciclo, sino un camino). Algoritmos pseudo-polinomiales p. 18
Inicio para la demostración Etiquetamos los vértices V = {1,2,...,n} y asignamos simplemente d ij = { 1, si {i,j} E, 2, en otro caso. El presupuesto será B = n+1. Nota que así el grafo ponderado que es la instancia de TSPD es completo. Algoritmos pseudo-polinomiales p. 19
La segunda reducción De una conjunción de cláusulas φ = C 1... C m con variables x 1,...,x n, construyamos un grafo G(φ) tal que se puede colorear G(φ) con tres colores, denotados {0, 1, 2} si y sólo si existe una asignación de valores que satisface a φ en el sentido NAESAT. Algoritmos pseudo-polinomiales p. 20
Los gadgets para usar Para las variables: de elección en forma de triángulo así que los vértices del triángulo son v, x i y x i Para cada cláusula: ponemos un triángulo de [C i1,c i2,c i3 ] donde además cada C ij está conectado al vértice del literal número j de la cláusula C i Algoritmos pseudo-polinomiales p. 21