Análisis de Algoritmos Problemas de grafos Dra. Elisa Schaeffer elisa.schaeffer@gmail.com PISIS / FIME / UANL Problemas de grafos– p. 1 I NDEPENDENT S ET es NP-completo Necesitamos un “gadget”: el triángulo. Si el grafo de entrada contiene un triángulo, es decir, una camarilla de tres vértices, solamente uno de los tres participantes del triángulo puede ser considerado para formar un conjunto independiente, porque en un conjunto independiente, ningún par de vértices puede compartir una arista. Problemas de grafos– p. 2 Restricción Consideramos grafos los vértices de cuales se puede dividir en triángulos disjuntos. Es decir, cada vértice del grafo solamente puede tomar parte en un triángulo y cada vértice tiene que ser parte de un triángulo. Denotamos el número de tales triángulos por t. Problemas de grafos– p. 3 Análisis Por construcción, ningún conjunto independiente puede tener cardinalidad mayor a t. Un conjunto independiente de cardinalidad t existe solamente si las otras aristas del grafo permiten elegir un vértice de cada triángulo sin que tengan aristas en común los vértices elegidos. Problemas de grafos– p. 4 Reducción de 3S AT ∀ cláusula Ci de φ, generamos un triángulo en el grafo G = R(φ). Sean ai , bi y ci las tres literales de una cláusula Ci . Entonces, habrán vértices vai , vbi y vci en el grafo G y además las tres aristas {vai , vbi }, {vai , vci } y {vbi , vci } que forman el triángulo de los tres vértices de la cláusula Ci . Problemas de grafos– p. 5 Variables compartidas vi de Ci y vj de Cj , donde i 6= j, están conectadas por una arista ⇐⇒ Los literales a cuales corresponden vi y vj son de la misma variable, pero el literal es positivo en Ci y negativo en Cj Problemas de grafos– p. 6 Ejemplo (tarea en clase) Construir un grafo que corresponde a φ = (x1 ∨ x2 ∨ x3 ) ∧ (¬x1 ∨ ¬x2 ∨ ¬x3 ) ∧ (¬x1 ∨ x2 ∨ x3 ). Problemas de grafos– p. 7 Reducción correcta Con el grafo G y la cota (la cardinalidad del conjunto independiente) siendo k = t, tenemos definida la reducción. Habrá que mostrar que es correcta la reducción: existe un conjunto independiente I ⊆ V en G = R(φ) tal que |I| = k y φ tiene k cláusulas si y sólo si φ es satisfactible. Problemas de grafos– p. 8 Comienzo de (=⇒) Suponga que tal conjunto I existe. =⇒ φ tiene k cláusulas y |I| = k. Por construcción I necesariamente contiene un vértice de cada uno de los k triángulos. Problemas de grafos– p. 9 (=⇒) continua I no puede contener ningún par de vértices que corresponda una ocurrencia positiva de un variable x y una ocurrencia negativa ¬x de la misma variable. I define una asignación de valores T v ∈ I y v corresponde a una ocurrencia positiva de la variable x, x ∈ T . Problemas de grafos– p. 10 Consistencia Cada par de literales contradictorios está conectado en G por una arista, y entonces la asignación T así definida es consistente. Problemas de grafos– p. 11 Consistencia Cada par de literales contradictorios está conectado en G por una arista, y entonces la asignación T así definida es consistente. Como I contiene un vértice de cada triángulo, y cada triángulo es una cláusula, cada cláusula tiene exactamente un literal con el valor ⊤, porque necesariamente T (x) = ⊤ o T (¬x) = ⊥ que implica que T (x) = ⊤ para la variable x el vértice de cual estáincluido en el conjunto independiente I. Problemas de grafos– p. 11 (⇐=) con el mismo truco Si φ es satisfactible, dada la T que la satisface, identificamos cuáles literales tienen el valor ⊤ en T . Elegimos de cada cláusula un literal con el valor ⊤. Los vértices que corresponden a estos forman I. Son uno por cláusula. Entonces, |I| = k si φ tiene k cláusulas. Problemas de grafos– p. 12 Flujo máximo Dado un grafo dirigido con capacidades en las aristas y un flujo no-óptimo, se puede aumentar el flujo que cruza un corte desde el lado de s al lado de t o alternativamente por disminuir el flujo desde el lado de t al lado de s. Para empezar, podemos elegir el flujo cero, donde el flujo por cada arista es cero — no rompe con ninguna restricción, por lo cual es un flujo factible, aunque no óptimo. Problemas de grafos– p. 13 Camino aumentante Para aumentar el flujo, buscamos un camino aumentante C de s a t en el cual de puede viajar por las aristas según su dirección o en contra. Las aristas hv, wi incluidas serán tales que si se viaja en la dirección original, aplica que f (v, w) < c(v, w), pero si se viaja en contra, f (v, w) > 0. Problemas de grafos– p. 14 Función auxiliar δ(v, w) = c(v, w) − f (v, w), f (v, w), si hv, wi ∈ E, si hw, vi ∈ E, Sea δ = mı́nC {δ(v, w)}. El flujo se aumenta por añadir δ en todos los flujos que van según la dirección de las aristas en el camino C y restar δ de todos los flujos que van en contra en C. Problemas de grafos– p. 15 Terminación Este procedimiento se itera hasta que ya no existan caminos aumentantes. Cuando ya no existe camino aumentante ninguno, el flujo es maximal. La eficiencia del método presentado depende de cómo se construye los caminos aumentantes. Problemas de grafos– p. 16 Algoritmo polinomial La mayor eficiencia se logra por elegir siempre el camino aumentante de largo mı́nimo; el algoritmo que resulta es polinomial, O (nm2 ) = O (n5 ). Es posible que hayan más que un camino de largo mínimo — aplicándolos todos al mismo paso resulta en un algoritmo de complejidad asintótica O (n3 ). Problemas de grafos– p. 17 Grafo residual Primero construyamos un grafo posibilidades de mejoramiento: residual que captura las Gf = (V, Ef ) del grafo G = (V, E) con respeto a f tiene {v, w} ∈ E | (f (v, w) < c(v, w)) ∨ (f (w, v) > 0) . Problemas de grafos– p. 18 Capacidad de aumento La capacidad ′ de aumento de la arista {v, w} ∈ Ef es c (v, w) = c(v, w) − f (v, w) f (w, v) si {v, w} ∈ E, si {w, v} ∈ E. Cada camino simple entre s y t en el grafo residual Gf es un camino aumentante de G. El valor de δ es igual al capacidad del camino. de aumento mı́nimo Problemas de grafos– p. 19 B FS Para elegir los caminos aumentantes más cortos en el grafo residual, utilizamos B FS desde s. En subgrafo formado por los caminos cortos en Gf se llama la red de capas (inglés: layered network) G′f . Problemas de grafos– p. 20 Red de capas Se asigna a cada vértice un valor de “capa” que es su distancia desde s. Solamente vértices con distancias finitas están incluidas. {v, w} de Gf se incluye en G′f solamente si el valor de capa de w es el valor de capa de v más uno. En el grafo G′f , cada camino de s a t tiene el mismo largo. Problemas de grafos– p. 21 Flujo mayor El mejor aumento sería igual al flujo máximo en G′f , pero en el peor caso es igual en complejidad al problema original. Entonces construyamos una aproximación: definimos el flujo mayor en G′f como un flujo que ya no se puede aumentar con caminos que solamente utilizan aristas que “avanzan” hacía t. Problemas de grafos– p. 22 Flujo posible Definimos como el flujo posible de un vértice es el mínimo de la suma de las capacidades de las aristas que entran y de la suma de las capacidades de las aristas que salen: X X c′ (u, v), c′ (v, w) . vf = mı́n ′ ′ {u,v}∈Gf {v,w}∈Gf Problemas de grafos– p. 23 El algoritmo 1. Sacar de G′f todos los vértices con flujo posible cero y cada arista adyacente a estos vértices. 2. Identificar el vértice v con flujo posible mínimo. 3. Empujar una cantidad de flujo igual al flujo posible de v desde v hacía t. 4. Retirar flujo a v de sus aristas entrantes por construir caminos desde s a v hasta que se satisface la demanda de flujo que sale de v a t. 5. Actualizar las capacidades de las aristas afectadas. 6. Memorizar el flujo generado y el camino que toma. 7. Computar de nuevo los flujos posibles y eliminamos de nuevo vértices con flujo posible cero juntos con sus aristas adyacentes. 8. Si s y t quedaron fuera, el flujo construido es el flujo mayor en G′f . 9. Si todavía están, repetimos el proceso. Problemas de grafos– p. 24 Complejidad asintótica La construcción de G′f toma tiempo O (n2 ). Problemas de grafos– p. 25 Complejidad asintótica La construcción de G′f toma tiempo O (n2 ). La distancia entre s y t está en el peor caso O (n). Problemas de grafos– p. 25 Complejidad asintótica La construcción de G′f toma tiempo O (n2 ). La distancia entre s y t está en el peor caso O (n). Cada iteración de construcción de una red de capas G′f utiliza caminos más largos que el anterior, por lo cual la construcción se repite O (n) veces. Problemas de grafos– p. 25 Complejidad asintótica La construcción de G′f toma tiempo O (n2 ). La distancia entre s y t está en el peor caso O (n). Cada iteración de construcción de una red de capas G′f utiliza caminos más largos que el anterior, por lo cual la construcción se repite O (n) veces. Las operaciones de empujar y retirar flujo son ambas O (n) y de ejecutan en total O (n) veces. Problemas de grafos– p. 25 Complejidad asintótica La construcción de G′f toma tiempo O (n2 ). La distancia entre s y t está en el peor caso O (n). Cada iteración de construcción de una red de capas G′f utiliza caminos más largos que el anterior, por lo cual la construcción se repite O (n) veces. Las operaciones de empujar y retirar flujo son ambas O (n) y de ejecutan en total O (n) veces. Entonces, el algoritmo del flujo mayor tiene complejidad asintótica O (n3 ). Problemas de grafos– p. 25 Corte mínimo El problema es igual al problema del flujo máximo: se resuelve por fijar un vértice s cualquiera y después resolver el flujo máximo entre s y todos los otros vértices. El valor mínimo de los flujos máximos corresponde al corte mínimo del grafo entero. ∃ algoritmos polinomiales para el problema de flujo máximo, y solamente repetimos n − 1 veces su ejecución =⇒ corte mı́nimo ∈ P. Problemas de grafos– p. 26 M AX C UT Dado: un grafo G = (V, E) no dirigido y no ponderado y un entero k Pregunta: ¿existe un corte en G con capacidad ≥ k? M AX C UT es NP-completo Problemas de grafos– p. 27 Demostración Para multigrafosa con una reducción desde NAESAT. Para una conjunción de cláusulas φ = C1 ∧ . . . ∧ Cr , construimos un grafo G = (V, E) tal que G tiene capacidad de corte 5r si y sólo si φ es satisfactible en el sentido de NAESAT. a Un grafo simple es un caso especial de multigrafos. Problemas de grafos– p. 28 Construcción Los vértices = los literales x1 , . . . , xn , ¬x1 , . . . , ¬xn donde x1 , . . . , xn son las variables de φ. a Problemas de grafos– p. 29 Construcción Los vértices = los literales x1 , . . . , xn , ¬x1 , . . . , ¬xn donde x1 , . . . , xn son las variables de φ. Para cada cláusula α ∨ β ∨ γ, incluimos las aristas del triángulo entre los vértices α, β y γ. a Problemas de grafos– p. 29 Construcción Los vértices = los literales x1 , . . . , xn , ¬x1 , . . . , ¬xn donde x1 , . . . , xn son las variables de φ. Para cada cláusula α ∨ β ∨ γ, incluimos las aristas del triángulo entre los vértices α, β y γ. Si la cláusula tiene solamente dos literales, ponemos dos aristas entre los vértices que correspondena . a Mejor convertir cada cláusula a uno con tres literales por repetir un literal según necesidad. Problemas de grafos– p. 29 Construcción Los vértices = los literales x1 , . . . , xn , ¬x1 , . . . , ¬xn donde x1 , . . . , xn son las variables de φ. Para cada cláusula α ∨ β ∨ γ, incluimos las aristas del triángulo entre los vértices α, β y γ. Si la cláusula tiene solamente dos literales, ponemos dos aristas entre los vértices que correspondena . =⇒ tenemos en total 3r ocurrencias de variables. a Mejor convertir cada cláusula a uno con tres literales por repetir un literal según necesidad. Problemas de grafos– p. 29 Construcción Los vértices = los literales x1 , . . . , xn , ¬x1 , . . . , ¬xn donde x1 , . . . , xn son las variables de φ. Para cada cláusula α ∨ β ∨ γ, incluimos las aristas del triángulo entre los vértices α, β y γ. Si la cláusula tiene solamente dos literales, ponemos dos aristas entre los vértices que correspondena . =⇒ tenemos en total 3r ocurrencias de variables. Además, incluyemos ni copias de {xi , ¬xi } donde ni es el número total de ocurrencias de los literales xi y ¬xi en φ. a Mejor convertir cada cláusula a uno con tres literales por repetir un literal según necesidad. Problemas de grafos– p. 29 Construcción correcta Suponga que existe un corte (S, V \ S) con capacidad 5r o mayor. Si un literal que corresponde a vi participa en ni cláusulas, vi tiene al máximo 2ni aristas a otros vértices además de las ni aristas a su negación. Se supone que una variable y su negación no aparecen en la misma cláusula porque así la cláusula sería una tautología. =⇒ Los dos vértices representando a xi y ¬xi tienen en total al máximo 2ni aristas a vértices que representan a otros literales. Problemas de grafos– p. 30 El corte Si estuvieran cada variable y su negación las dos en el mismo lado, su contribución a la capacidad del corte sería por máximo 2ni . Si cambiamos al otro lado el vértice con menos aristas “externas”, la contribución al tamaño de corte del par no puede disminuir (las aristas ni entre los dos vértices cruzarían el corte después del cambio). =⇒ Asumir que caigan en lados distintos. Problemas de grafos– p. 31 Asignación y el corte Sea S el conjunto de literales asignadas ⊤, por lo cual V \ S contiene los literales que tienen asignado el valor ⊥. Cada variable y su negación están el lados diferentes =⇒ contribuyen una arista por ocurrencia en φ: en total 3r aristas. Problemas de grafos– p. 32 Triángulos separados Para lograr que sea mayor o igual a 5r la capacidad del corte, habrá que ser 2r aristas que son aristas de los triángulos representando a las cláusulas cruzando el corte. ⇒ Cada triángulo tiene que estar separado ⇒ Cada uno de los r triángulos necesariamente contribuye dos aristas. Por lo menos un vértice de cada cláusula pertenece a T y por lo menos un vértice no pertenece al T , T satisface a φ en el sentido de NAESAT. Problemas de grafos– p. 33 La otra dirección Dada una asignación T a φ en el sentido de NAESAT, podemos agrupar los vértices a darnos un corte con capacidad mayor o igual a 5r. Problemas de grafos– p. 34 M AX B ISECTION versus M AX C UT La reducción de M AX C UT a M AX B ISECTION por modificar la entrada: Añadimos n vértices no conectados a G. Cada corte de G se puede balancear a ser una bisección por organizar los vértices no conectados apropiadamente a los dos lados. Entonces, el grafo original tiene un corte (S, V \ S) de tamaño k o mayor si y sólo si el grafo modificado tiene un corte de tamaño k o mayor con |S| = |V \ S|. Problemas de grafos– p. 35 M IN C UT versus M IN B ISECTION M IN C UT∈ P, M IN B ISECTION es NP-completo M IN B ISECTION: Dado: un grafo no dirigido y un entero k Pregunta: ¿existe una bisección con cardinalidad menor o igual a k? Problemas de grafos– p. 36 Una reducción de M AX B ISECTION La instancia es un grafo G = (V, E) con un número par de vértices n = 2c. Ese grafo tiene una bisección de tamaño k o más si y sólo si el grafo complemento Ḡ tiene una bisección de tamaño c2 − k o menos. Problemas de grafos– p. 37 3M ATCHING es NP-completo Dado: conjuntos A, B y C, cada uno con n elementos y una relación ternaria T ⊆ A × B × C Pregunta: ¿existe un conjunto de n triples (a, b, c) en T que no comparten ningún componente entre cualesquiera dos triples? Una reducción sería de 3S AT. Problemas de grafos– p. 38