Complejidad computacional Contenido 1 Complejidad computacional Introducción Problemas de decisión Reducción polinomial Carlos Testuri Fundamentos de Programación Entera 1/20 Complejidad computacional Introducción Problemas de decisión Reducción polinomial Complejidad computacional La teoría de complejidad computacional permite clasificar los problemas según su grado de dificultad de resolución. Un objetivo es determinar cuando un problema puede ser resuelto mediante un uso de orden polinomial de los recursos dedicados (tiempo, memoria), donde las bases del polinomio son medidas de las dimensiones del problema (ej. tamaño entrada). Para la mayoría de los problemas IP no se conoce un algoritmo de resolución eficiente. Carlos Testuri Fundamentos de Programación Entera 2/20 Complejidad computacional Introducción Problemas de decisión Reducción polinomial Problemas según resolubilidad Resolubles eficientemente Determinación de lotes no-cap. Flujo en red Camino más corto Flujo máximo Transporte Asignación Arbol de expansión minimal Programación entera con TU Carlos Testuri Resolución eficiente desconocida Mochilero Covertura, empaque y partición Vendedor viajero (TSP) Localización instalación no-cap. Arbol de Steiner Programación entera (general) Fundamentos de Programación Entera 3/20 Complejidad computacional Introducción Problemas de decisión Reducción polinomial Problemas según resolubilidad Resolubles eficientemente Determinación de lotes no-cap. Flujo en red Camino más corto Flujo máximo Transporte Asignación Arbol de expansión minimal Programación entera con TU Resolución eficiente desconocida Mochilero Covertura, empaque y partición Vendedor viajero (TSP) Localización instalación no-cap. Arbol de Steiner Programación entera (general) ¿Cómo caracterizar los problemas según resolución? Carlos Testuri Fundamentos de Programación Entera 3/20 Complejidad computacional Introducción Problemas de decisión Reducción polinomial Clasificación de problemas según dificultad Los problemas se pueden caracterizar según su grado de dificultad de resolución en fáciles y difíciles. Un mecanismo de comparación (o reducción) es Proposición Dados los problemas P y Q, 1. Si Q es fácil y P no es más difícil que Q, entonces P es fácil. 2. Si P es difícil y P no es más difícil que Q, entonces Q es difícil. Carlos Testuri Fundamentos de Programación Entera 4/20 Complejidad computacional Introducción Problemas de decisión Reducción polinomial Problemas de decisión La teoría de complejidad es establecida sobre problemas de decisión. Los problemas de decisión retornan las respuestas: SI o NO. Por lo que se necesita representar los problemas de optimización en términos de problemas de decisión asociados. Dado el problema de optimización max{c(x) : x ∈ X}, se puede establecer el problema de decisión equivalente en términos de dificultad de resolución: - Dada una constante K, ¿existe x ∈ X con valor c(x) ≥ K? Carlos Testuri Fundamentos de Programación Entera 5/20 Complejidad computacional Introducción Problemas de decisión Reducción polinomial Problemas: instancias y tamaño Se denomina instancia de un problema a su conjunto factible y su función objetivo. [El problema es la colección de todas las instancias]. Para comparar instancias de problemas según tamaño se establece un formato estándar que describe las instancias. Se denomina tamaño de la instancia, a la cantidad de bits usada en la representación binaria de la descripción de la instancia. Carlos Testuri Fundamentos de Programación Entera 6/20 Complejidad computacional Introducción Problemas de decisión Reducción polinomial Problemas: instancias y tamaño: ejemplo Dado el problema max cτ x s.a. Ax ≤ b x ∈ Zn+ . se tiene la instancia I = {c, A, P Pb} con P tamaño Pm L = L(I) = ni=1 dlog ci e + ni=1 m j=1 dlog aij e + j=1 dlog bj e. Si todas los componentes de la instancia están acotados por un valor u, se puede considerar como cota superior a (n + mn + m)(log(u)). Para simplificar aún más se utiliza la notación de orden, (mn + m + n)(log(u)) = O(?) Carlos Testuri Fundamentos de Programación Entera 7/20 Complejidad computacional Introducción Problemas de decisión Reducción polinomial Problemas: algoritmos Los algoritmos son diseñados para los problemas, pero se aplican para resolver instancias de los mismos. Se dice que un algoritmo resuelve un problema si para todas sus instancias se ejecuta en tiempo finito. Dado un problema y un algoritmo que lo resuelve, se denomina f (I) a la cantidad de operaciones necesarias para resolver la instancia I del problema mediante el algoritmo. Dada cierta dimensión de la instancia de un problema, l, se denomina cantidad de operaciones del algoritmo para el peor caso a f ∗ (l) = maxI {f (I) : |I| = l}. Se dice que el algoritmo es polinomial para resolver el problema si existe un entero k tal que f ∗ (l) = O(lk ). Carlos Testuri Fundamentos de Programación Entera 8/20 Complejidad computacional Introducción Problemas de decisión Reducción polinomial Clases de problemas de decisión N P y P Los problemas se clasifican según su grado de dificultad de resolución en clases. La clase de problemas de decisión N P esta integrada por los problemas para cuyas instancias con respuesta SI existe una demostración polinomial de la respuesta. Sea P la clase de problemas de decisión en N P para los que existe un algoritmo polinomial. Carlos Testuri Fundamentos de Programación Entera 9/20 Complejidad computacional Introducción Problemas de decisión Reducción polinomial Clase de problema P: ejemplo MST Arbol de expansión minimal. Sea G = (V, E) con m = P|E| y n = |V|. P Dada la instancia I = { e∈E ce xe ≤ K, e∈E xe = n − 1, P ∀S ⊆ V, S 6= ∅, V, x ∈ Bm }, e∈E(S) xe ≤ |S| − 1, el tamaño P de la entrada es P |S| L(I) = e∈E dlog ce e + dlog Ke + dlog (n − 1)e + 2i=1 dlog |S|e. El algoritmo de Kruskal resuelve el problema en O(m log(m)), por lo que la cantidad de operaciones para obtener la respuesta SI es O(L log(L)). Entonces MST esta en P. Carlos Testuri Fundamentos de Programación Entera 10/20 Complejidad computacional Introducción Problemas de decisión Reducción polinomial Clase de problema N P: ejemplo mochilero Mochilero. P P Dada la instancia I = { ni=1 ci xi ≥ K, ni=1 ai xi ≤ b, x ∈ Bn }, el tamaño P de la entrada es P L(I) = ni=1 dlog ci e + dlog Ke + ni=1 dlog ai e + dlog be. Para una instancia cuya respuesta es SI, se pueden verificar que su solución x∗ cumple ax∗ ≤ b y cx∗ ≥ K en tiempo polinomial de L(I). Por lo tanto el problema está en N P. Se puede resolver en O(l2 cmax ) mediante programación dinámica; pero esto es exponencial con respecto al tamaño de la entrada O(n(log cmax + log amax ) + log K + log b). Carlos Testuri Fundamentos de Programación Entera 11/20 Complejidad computacional Introducción Problemas de decisión Reducción polinomial Clase de problema N P: ejemplo ∆TSP TSP con desigualdad triangular (por simetría en grafo no dirigido). Dada P la instancia P P I = { e∈E ce xe ≤ K, e∈E(S) xe = 2, e∈E(S) xe ≤ |S| − 1, V, 2 ≤ |S| ≤ n, x ∈ Bm }, el tamaño de la entrada es P P |S| L(I) = e∈E dlog ce e + dlog Ke + 2i=1 dlog |S|e. ∀S ⊆ Para una instancia cuya respuesta es SI, se pueden verificar que su solución forma un tour que no excede K en tiempo polinomial. Por lo tanto el problema está en N P. No se conoce algoritmo que resuelva polinomialmente el problema. Todos los problemas de la lista con resolución eficiente desconocida están entre los más difíciles en N P. Carlos Testuri Fundamentos de Programación Entera 12/20 Complejidad computacional Introducción Problemas de decisión Reducción polinomial Reducción polinomial y la clase N PC Dados P y Q ∈ N P, se dice que P es polinomialmente reducible a Q, si una instancia de P puede convertirse en tiempo polinomial a Q. Es decir si existe un algoritmo que resuelve Q, entonces éste puede ser utilizado para resolver P con un costo adicional que es polinomial en términos del tamaño de la instancia. Carlos Testuri Fundamentos de Programación Entera 13/20 Complejidad computacional Introducción Problemas de decisión Reducción polinomial Reducción polinomial y la clase N PC Dados P y Q ∈ N P, se dice que P es polinomialmente reducible a Q, si una instancia de P puede convertirse en tiempo polinomial a Q. Es decir si existe un algoritmo que resuelve Q, entonces éste puede ser utilizado para resolver P con un costo adicional que es polinomial en términos del tamaño de la instancia. Se define la clase de problemas N P − completo, N PC, como el subconjunto de problemas P ∈ N P tales que para todo Q ∈ N P, Q es reducible polinomialmente a P. ¿Cómo determinar que un problema esta en N PC? Carlos Testuri Fundamentos de Programación Entera 13/20 Complejidad computacional Introducción Problemas de decisión Reducción polinomial Determinación de la clase N PC El esquema de reducción necesita de un primer problema para N PC. El problema de satisfacibilidad booleana (SAT) busca determinar si una expresión booleana (sin cuantificadores) tiene una valoración de sus variables que hace que la expresión sea verdadera. Ejemplo (tres literales por cláusula disyuntiva, 3SAT) (x1 ∨ ¬x2 ∨ x3 ) ∧ (x2 ∨ x4 ∨ ¬x5 ) ∧ . (¬x3 ∨ x4 ∨ x6 ) ∧ ... Carlos Testuri Fundamentos de Programación Entera 14/20 Complejidad computacional Introducción Problemas de decisión Reducción polinomial Problema de satisfacibilidad booleana (SAT) En términos de IP, es resolver el problema de factibilidad (BIP): x1 + (1 − x2 ) + x3 ≥ 1 x2 + x4 + (1 − x5 ) ≥ 1 (1 − x3 ) + x4 + x6 ) ≥ 1 ... x ∈ Bn . Stephen Cook demostró (1971) que el problema SAT está en N PC. Para demostrar que BIP está en N PC, se necesita mostrar que: 1. BIP está en N P (directo), y 2. SAT se reduce a BIP (la reducción está implícita en el ej. anterior). Carlos Testuri Fundamentos de Programación Entera 15/20 Complejidad computacional Introducción Problemas de decisión Reducción polinomial Lema de reducción La formalización del mecanismo de comparación (o reducción) es Proposición Dados los problemas P y Q en N P, 1. Si Q está en P y P es polinomialmente reducible a Q, entonces P está en P. 2. Si P está en N PC y P es polinomialmente reducible a Q, entonces Q está en N PC. Carlos Testuri Fundamentos de Programación Entera 16/20 Complejidad computacional Introducción Problemas de decisión Reducción polinomial Comparación entre P y N P Los problemas vistos están en P o en N PC. Proposición Si P ∩ N PC 6= ∅, entonces P = N P. No se ha podido demostrar que P = N P o que P = 6 N P. En la práctica se asume que P = 6 N P. El conocimiento de la teoría, el desarrollo de algoritmos especializados y la experiencia permiten determinar soluciones validadas de grandes instancias de problemas. Carlos Testuri Fundamentos de Programación Entera 17/20 Complejidad computacional Introducción Problemas de decisión Reducción polinomial Problemas N P − hard Se denomina problemas N P − hard a los problemas de optimización cuyos problemas de decisión están en N PC. Carlos Testuri Fundamentos de Programación Entera 18/20 Complejidad computacional Introducción Problemas de decisión Reducción polinomial Diagrama de clases Las clases se pueden representar mediante un diagrama de Euler. N P − hard NP P N PC Complejidad Carlos Testuri Fundamentos de Programación Entera 19/20 Complejidad computacional Introducción Problemas de decisión Reducción polinomial Optimización y problema de separación Una forma de determinar que un problema está en P es encontrando un algoritmo que lo resuelva en tiempo polinomial. Otra forma es utilizando una reducción polinomial. Por otra parte, el grupo de problemas de optimización max{c(x) : x ∈ conv(X)} es resoluble polinomialmente si y solo si el grupo de problemas de separación: ¿Pertenece x a conv(X)? Si no, determinar una inecuación que satisfagan todos los elementos de X, excepto x. es resoluble polinomialmente. Ambas propiedades son equivalentes. Carlos Testuri Fundamentos de Programación Entera 20/20