¡Descarga teoria y más Apuntes en PDF de Matemáticas solo en Docsity! Enrique Benavent. Universitat de València Teoría de Grafos 1 1 Tema 1. Definiciones y conceptos básicos 1.1 Grafos. Isomorfismo de grafos Un grafo no dirigido es un triple ordenado (V(G), E(G), ΨG), donde: • V(G) finito y no vacío: conjunto de vértices • E(G) finito: conjunto de aristas (V(G)∩E(G)≠∅) • ΨG : función de incidencia, asigna a cada arista e∈E(G) un par no ordenado de vértices (u,v), u y v son los extremos de la arista e. Un grafo dirigido es un triple ordenado (V(G), E(G), ΨG), donde: • V(G) finito y no vacío: conjunto de vértices • E(G) finito: conjunto de arcos (V(G)∩E(G)≠∅) • ΨG : función de incidencia, asigna a cada arco a∈E(G) un par ordenado de vértices (u,v); el arco a está dirigido de u a v (el arco es saliente de u y entrante en v). Normalmente se denota un grafo simplemente como G = (V,E), siendo: • V: conjunto de vértices • E: conjunto de aristas o arcos (Se entiende que cada arista (arco) es un par (par ordenado) de vértices) Representación gráfica (grafo mixto: con arcos y aristas) 2 a4 a1 a2 a7 4 5 1 a6 a8 a3 a5 a9 3 La arista a4 es incidente con los vértices 2 y 4 Dos vértices incidentes con una misma arista se dicen adyacentes (ejemplos: 2 y 4, 4 y 5) Bucle: arista cuyos dos extremos son el mismo vértice (a8) Aristas paralelas: tienen el mismo par de vértices extremos (a5, a9) Arcos paralelos: tienen el mismo par ordenado de vértices. Enrique Benavent. Universitat de València Teoría de Grafos 2 Grafo simple: un grafo sin bucles ni aristas (arcos) paralelos. En este caso una arista (arco) se puede representar por el par (par ordenado) de vértices que une. Dos grafos G y H son isomorfos si existen dos biyecciones FV y FE entre los conjuntos de vértices y aristas, respectivamente, de G y H, tales que: ))(),(())((),()( vFuFeFvue VVEHG =Ψ⇔=Ψ . Si los grafos son simples, basta con especificar la biyección entre los conjuntos de vértices y que se cumpla: )())(),(()(),( HEvFuFGEvu VV ∈⇔∈ Notación: • n, n(G): número de vértices • m, m(G): número de aristas/arcos Algunos grafos especiales: Grafo completo con n vértices (notación: Kn): cada par de vértices está unido por una arista. Grafo vacío: sin aristas, grafo trivial: grafo vacío con un sólo vértice. Grafo bipartido: existe una bipartición de V = X∪Y; X, Y no vacíos, tal que toda arista del grafo tiene un extremo en X y el otro en Y. Grafo bipartido completo: es bipartido y todo vértice de X es adyacente a todo vértice de Y. Si |X|=p y |Y|=q, se denota Kp,q. Grafo k-regular: cada vértice es incidente con k aristas exactamente. 1.2 Subgrafos H es un subgrafo de G (se denota H⊆G) sii: • V(H)⊆V(G) • E(H)⊆E(G) • ΨH = ΨG|E(H) (También se dice que G es un supergrafo de H) Además, se llama: • Subgrafo generador: si V(H)=V(G). • Subgrafo de G inducido por V'⊆V(G): (se denota G[V']) si tiene V' como conjunto de vértices y todas las aristas de G con ambos extremos en V'. • Subgrafo de G inducido por E'⊆E(G) (se denota G[E']) si tiene E' como conjunto de aristas y todos los vértices de G que son extremo de alguna arista de E'. Notaciones: • G-V' = G[V-V'] • G+E', (G-E'): se añaden a G (o se eliminan) las aristas de E'. Enrique Benavent. Universitat de València Teoría de Grafos 5 • grafo dirigido: = caso otroen 0, en v entrante arcoun es e si 1,- vde saliente arcoun es e si ij ij,1 ijb • grafo no dirigido: = caso otroen con v incidente es e si ij ,0 ,1 ijb Enrique Benavent. Universitat de València Teoría de Grafos 6 1.7 Ejercicios (Si no se indica lo contrario, los grafos que se mencionan en los ejercicios son no dirigidos) 1. Mostrar que si el grafo G es simple, entonces m ≤ y que G es completo sii m = . 2 n 2 n Nota: n ó n(G) denota el número de vértices del grafo, mientras que m ó m(G) denota el número de aristas o arcos. 2. Mostrar que hay 11 grafos simples no isomorfos sobre 4 vértices. 3. Demostrar que: (a) m(Kp,q) = pq. (b) si G es simple y bipartido: m ≤ n2/4. 4. Mostrar que: δ ≤ 2m/n ≤ ∆. 5. Sea S un conjunto de n puntos del plano tales que la distancia entre cualquier par de puntos es al menos 1. Demostrar que hay como máximo 3n pares de puntos a distancia exactamente 1. Sugerencia: Definir un grafo en el que dos puntos son adyacentes si están a distancia 1 y mostrar que el grado máximo en este grafo es 6. 6. Mostrar que en cualquier grupo de 2 ó más personas, hay siempre al menos dos con exactamente el mismo número de amigos dentro del grupo. 7. Si G tiene los vértices v1,v2,...vn, a la secuencia (d(v1), d(v2), ...,d(vn)) se le llama secuencia de grados de G. Mostrar que una secuencia de enteros no negativos (d1, d2, ..., dn) es la secuencia de grados de un grafo (simple o no) sii ∑di= par. Comprueba que las secuencias (7,6,5,4,3,3,2) y (6,6,5,4,3,3,1) no son secuencias de grados de un grafo simple. 8. Demostrar que si la secuencia de enteros no negativos (d1, d2, ..., dn), con d1 ≥ d2≥ ... ≥ dn es la secuencia de grados de un grafo simple, entonces: i k = ∑ 1 di ≤ k(k-1) + i k n = + ∑ 1 min(k,di), ∀k, 1 ≤ k ≤ n. (Se puede demostrar que esta condición es también suficiente) 9. Sea G un grafo con 4 vértices y secuencia de grados (4,3,2,1). Dibujar todos los grafos sin bucles y no isomorfos, con esa secuencia de grados. 10. Probar que no existe un grafo con 7 vértices que sea 3-regular. 11. ¿Qué puedes decir de la suma de los números en cualquier fila o columna de una matriz de adyacencia? 12. Mostrar que si G es simple, los elementos de las diagonales de BBt y de A2 son los grados de los vértices de G (Bt es la traspuesta de B) . 13. Demostrar que si un grafo bipartido k-regular con k>0 tiene bipartición (X,Y), entonces |X|= |Y|. Enrique Benavent. Universitat de València Teoría de Grafos 7 14. Mostrar que si δ ≥ 2, entonces G contiene un ciclo. 15. Demostrar que si G es simple y δ ≥ 2, entonces G contiene un ciclo de longitud al menos δ+1. AYUDA: Considerar un camino de longitud máxima y los vértices adyacentes al origen de dicho camino. 16. Caracterizar la matriz de adyacencia A de un grafo bipartido. 17. Probar que un grafo y su complementario no pueden ser desconexos los dos (El complementario de un grafo G=(V,E) es un grafo GC, con el mismo conjunto de vértices que G, y se cumple que, para todo u,v∈V, u y v son adyacentes en GC sii u y v no son adyacentes en G). 18. Demostrar que para toda terna de vértices u,v,w se cumple: d(u,v) + d(v,w) ≥ d(u,w). (Si u,v∈V, d(u,v) es el número de aristas del (u,v)-camino con menos aristas) 19. Demostrar que si G es simple y δ≥k, entonces G tiene un camino de longitud k. 20. Demostrar que el número de (vi,vj) cadenas de longitud k en G es la componente (i,j) de Ak. 21. Dada una colección de intervalos de la recta real I = {I1,I2,...,In}. El grafo intervalo para I es el grafo de n vértices v1,v2,...,vn tal que vi es adyacente con vj sii Ii∩Ij≠∅ a. Dibujar el grafo intervalo para los intervalos abiertos (0,2), (3,8),(1,4), (3,4), (2,5), (7,9). b. Demostrar que Kn es siempre un grafo intervalo para todo n≥1. 22. Dado un grupo de nueve personas, ¿es posible que cada persona le estreche la mano a exactamente tres personas distintas? 23. Demostrar que si existe una (u,v)-cadena en G, entonces también existe un (u,v)-camino en G. 24. Demostrar que G es conexo sii para toda partición de V en dos subconjuntos no vacíos V1 y V2, existe al menos una arista con un extremo en V1 y el otro en V2. 25. Demostrar que si G es simple y δ(G) ≥ (n-1)/2, entonces G es conexo. 26. Demostrar que si G es simple y m > (n -1)(n -2)/2, entonces G es conexo. 27. Demostrar que si G es simple y δ > n/2 - 1, entonces G es conexo. Hallar un grafo simple desconexo ( n/2 - 1)-regular para un n par. 28. Demostrar que si a ∈ E, entonces ω(G) ≤ ω(G - a) ≤ ω(G) + 1. Ver que esto no se cumple si a es un vértice en lugar de una arista. 29. Demostrar que en un grafo conexo, dos caminos más largos siempre tienen un vértice en común. 30. Demostrar que si G es simple y conexo, pero no completo, entonces tiene tres vértices u, v y w tales que (u,v), (v,w) ∈E, pero (u,w) ∉E. 31. Demostrar que si m≥n, G contiene un ciclo. Enrique Benavent. Universitat de València Teoría de Grafos 10 Ejemplo. P: calcular el máximo común divisor de n números enteros. Ejemplo de P: {3456, 987, 57}. Se dice que un algoritmo resuelve el problema P cuando su aplicación a cualquier ejemplo de P proporciona la solución en un número finito de pasos. Se define el tamaño de un ejemplo de un problema como el número de dígitos que se usan para especificar los valores de los parámetros que definen el ejemplo. Suponemos que se utiliza un sistema de representación "razonable". En el ejemplo anterior el tamaño sería 13, incluyendo los signos que separan los números y dos delimitadores que indican el principio y final de los datos (representando los números en sistema decimal). La eficiencia de un algoritmo para resolver un determinado problema se mide por el número de operaciones que necesita para resolver un ejemplo en función de su tamaño. Notación O(⋅): se dice que una función f(t), definida sobre los números naturales, es O(g(t)) si existe un número real c y un número natural t0, tal que f(t) ≤ c⋅g(t) para todo t ≥ t0. Se dice que un algoritmo para el problema P es polinómico si el número máximo de operaciones que realiza para resolver cualquier ejemplo de tamaño t del problema, está acotado superiormente por un polinomio en t. Si el polinomio es de grado p, esto es equivalente a decir que el número de operaciones es O(tp). En el caso de que el número de operaciones no pueda ser acotado por un polinomio, se dice que el algoritmo es exponencial. Dado que las funciones exponenciales crecen muy rápidamente con la variable independiente, un algoritmo exponencial suele ser eficiente sólo para ejemplos de tamaño pequeño. Sin embargo, un polinomio tiene un crecimiento mucho más lento en general, sobre todo si el grado del polinomio es bajo, y por lo tanto puede ser eficiente para tamaños mucho más grandes. Para representar un problema de grafos hace falta un número de dígitos que depende del número de vértices y el de aristas o arcos, así como de los posibles costes, capacidades, etc. asociados a los vértices y/o aristas/arcos. Notar que para representar un número u en el sistema decimal hacen falta 1log +u dígitos (esto es, del orden de log u). Así pues, el tamaño de un ejemplo de un problema de grafos depende normalmente de n, m y log U (siendo U el mayor entero en valor absoluto que aparece en los datos). Por lo tanto, se puede demostrar que un algoritmo para un problema de grafos es polinómico si necesita un número de operaciones que está acotado superiormente por un polinomio en n, m y/o log U. Un problema se dice que está en la clase P si existe un algoritmo polinómico para resolverlo. Los problemas de la clase P son problemas que pueden ser resueltos muy eficientemente. La clase NP es más difícil de definir, nos limitaremos a definirla para los problemas de optimización. Se puede decir que un problema de optimización está en la clase NP, si el coste de una solución posible de un ejemplo del problema se puede calcular con un algoritmo polinómico. Naturalmente es mucho más fácil calcular el coste de una solución que encontrar la solución óptima; como consecuencia, casi todos Enrique Benavent. Universitat de València Teoría de Grafos 11 los problemas de optimización están en la clase NP. Muchos de los problemas de la clase NP son considerados muy difíciles y no se conocen algoritmos polinómicos para resolverlos. Conjetura: ¿P = NP? Un problema P se dice que es NP -difícil si tiene la siguiente propiedad: "si existiera un algoritmo polinómico para P, existirían algoritmos polinómicos para todos los problemas de la clase NP " (En algunos problemas se utiliza también el término NP -completo) Por lo tanto, si se encontrara un algoritmo polinómico para un problema NP -difícil, la consecuencia sería que P = NP. Existen muchos problemas de todo tipo que son NP -difíciles; y hay muy pocas esperanzas de que se consiga encontrar un algoritmo polinómico que resuelva cualquiera de ellos. 2.4 Árbol generador de coste mínimo (SST) Sea G=(V, E) un grafo conexo no dirigido con n vértices y m aristas. Sea cij = c(i,j) el coste de la arista (i,j)∈E. El coste de un árbol generador de G se define como la suma de las aristas que contiene. El problema de encontrar el árbol generador de G con coste mínimo (abreviadamente SST, de Shortest Spanning Tree) tiene aplicaciones en gran cantidad de situaciones en las que se busca conectar una serie de elementos con coste mínimo. Por simplicidad, si T es un árbol generador de G, su conjunto de aristas se denotará también por T. Algoritmo de Kruskal para el SST Inicio. Sea T el subgrafo generador vacío de G y sea E':=E. Mientras |T| < n-1 Sea e la arista de menor coste de E'; hacer E':=E'-e. Si T+e no contiene un ciclo, hacer T:=T+e. FinMientras La demostración de que el algoritmo es válido se hace por inducción sobre |T|. Si |T| = k < n-1, T es unión de subárboles. Dados dos subárboles Ts y Tr de T, definimos: d(Ts, Tr) = min {cij : i∈Ts, j∈Tr, (i,j)∈E} Enrique Benavent. Universitat de València Teoría de Grafos 12 Teorema 2.13 Teorema 2.13 Teorema 2.13 Sea T, con |T| < n-1, un subgrafo generador de G contenido en un SST y sea Ts uno de sus subárboles. Sea (vs, vj*) la arista que cumple: c(vs, vj*) = min { d(Ts, Tr): Tr subárbol de T distinto de Ts} entonces T + (vs, vj*) está contenido en un SST. Inicialmente, T es vacío, por lo que se cumple la hipótesis del . En cada iteración del algoritmo de Kruskal, se añade la arista de menor coste que no forma ciclo y, por lo tanto, esta arista es la de menor coste entre dos subárboles cualesquiera. Complejidad del algoritmo de Kruskal. Para averiguar de forma eficiente si la adición de una arista cierra un ciclo, se utiliza una etiqueta para cada vértice: l(i) = s si el vértice i pertenece al subárbol s Es evidente, entonces, que la arista (i,j) cerraría un ciclo al ser añadida a T sii l(i) = l(j). La asignación de etiquetas se hace de la siguiente forma. Inicialmente (cuando T = ∅), se hace l(i) := i, para todo i∈V. Si se añade una arista (i,j) a T, supongamos que l(i) < l(j), entonces basta con: Hacer l(v) := l(i), para todo v tal que l(v)=l(j). Para aplicar el algoritmo, podemos ordenar de menor a mayor coste todas las aristas, con un número de operaciones del orden de m⋅log2m < m⋅log2n2 = 2 m⋅log2n < 2mn (las desigualdades se deben cumplir para números "grandes"). Para saber si cierta arista cierra un ciclo, basta comparar la etiqueta de los vértices (una operación), y se prueba, como máximo con las m aristas. Además, para actualizar las etiquetas cada vez que se añade efectivamente la arista, hay que cambiar, como máximo, la etiqueta de n vértices; como se añaden n-1 aristas, en total, por este concepto tenemos del orden de n⋅(n-1) operaciones. En resumen, el algoritmo es O(mn). Teorema 2.14 El SST es el árbol generador para el que el coste de la arista de mayor coste que contiene es mínimo. Otros problemas relacionados La demostración del se basa en el hecho de que el coste de un árbol disminuye si se sustituye una arista por otra de coste menor. Por lo tanto, el algoritmo de Kruskal es válido siempre que el coste del árbol sea una función simétrica en todos sus componentes (depende del conjunto de aristas, no del orden en que aparecen) y creciente. Enrique Benavent. Universitat de València Teoría de Grafos 15 17. Dado v∈V, sea av una arista incidente con v de coste mínimo. a).- Demostrar que existe un árbol generador de coste mínimo que contiene a av. b).- ¿Puede A’={av, v∈V } contener un ciclo?. c).- En el caso en que G[A’] sea acíclico: ¿Existe siempre un árbol generador de coste mínimo que contiene a A’?. 18. Considera el algoritmo que intenta hallar un árbol generador de coste mínimo T* eliminando las aristas de coste máximo, una a una, de un grafo conexo G siempre y cuando no desconecten el grafo. Probar que T* es en efecto un árbol generador de coste mínimo. 19. El algoritmo de Kruskal puede proporcionar diferentes árboles generadores de coste mínimo del mismo grafo G dependiendo de cómo se deshagan los empates cuando las aristas son ordenadas. Demostrar que para cada árbol generador de coste mínimo T, existe una manera de ordenar las aristas de G en el algoritmo de Kruskal para que el algoritmo proporcione T. 20. Describir un algoritmo eficiente que, dado un grafo G, halle un árbol generador de G tal que el mayor coste de sus aristas sea mínimo entre todos los árboles generadores. 21. Sea T un árbol generador de coste mínimo de un grafo G. ¿Cómo se podría modificar T si se añadiese a G un nuevo vértice y aristas incidentes con él? 22. Sea a una arista de coste mínimo en G. Demostrar que existe un árbol generador de coste mínimo que la contiene. 23. Sea C un ciclo de G y a una de sus aristas de coste máximo. Demostrar que existe un árbol generador de coste mínimo en G-a que es también un árbol generador de coste mínimo de G. 24. Mostrar que si en cada cortadura de G existe una única arista de coste mínimo, entonces el grafo tiene un único árbol generador de coste mínimo. Mostrar que el contrario no es cierto. 25. Encontrar el árbol generador de mínimo peso en los grafos 5 6 1 1 1 6 6 3 2 1 15 2 79 4 36 1 14 1 8 3 1 8 (b) (a) Enrique Benavent. Universitat de València Teoría de Grafos 16 3 Tema 3. Caminos más cortos 3.1 Introducción Sea G = (V, E) un grafo dirigido en el que cada arco e=(i,j) tiene asociado un coste (o longitud) cij. El coste de una cadena entre dos vértices s y t es la suma de los costes de los arcos que contiene. Llamaremos cadena más corta de s a t a una cadena s-t con coste mínimo (o longitud mínima). Si en G existe un ciclo con coste total negativo (abreviadamente: ciclo negativo) y existe algún camino de s a t que pasa por alguno de sus vértices, entonces, recorriendo el ciclo repetidamente, podemos construir cadenas de s a t con coste menor que cualquier número (problema no acotado). Por otro lado, si no existen tales ciclos, siempre habrá una cadena más corta de s a t que sea en realidad un camino, por lo tanto, en este caso, es equivalente hablar de camino más corto o cadena más corta. En este tema veremos algoritmos polinómicos para calcular el camino más corto en un grafo sin ciclos negativos y estudiaremos también otros problemas relacionados. Sin embargo, el problema de encontrar el camino más corto entre dos vértices dados en un grafo con ciclos negativos es NP-difícil. Si el grafo es no dirigido, podemos transformarlo en uno dirigido desdoblando cada arista en dos arcos opuestos con el mismo coste. Sin embargo, si existe una arista con coste negativo, al desdoblarla aparece un ciclo negativo, por lo que no se podrá, en este caso, aplicar los algoritmos que vamos a estudiar. (Sin embargo, si el grafo no dirigido original no tiene ciclos negativos, es posible calcular caminos más cortos en tiempo polinómico utilizando técnicas basadas en acoplamientos). Todos los algoritmo que veremos en este tema son de Programación Dinámica y permiten calcular los caminos más cortos desde un vértice dado s al resto de vértices del grafo con un coste computacional similar al de calcular el camino más corto desde s a un único vértice t. 3.2 Ecuaciones de Bellman Supongamos que no existen ciclos negativos. Definimos cij = ∞ para todo (i,j) ∉ E. Por simplicidad, supondremos que queremos calcular los caminos más cortos desde el vértice 1 al resto de vértices. Sea: uj = longitud del camino más corto del vértice 1 al vértice j. Es obvio que u1 = 0. Notar que si P es un camino más corto entre dos vértices s y t, entonces cualquier sección del camino es también un camino más corto entre los vértices extremos de la sección (Principio de optimalidad de la Programación Dinámica). Enrique Benavent. Universitat de València Teoría de Grafos 17 Por lo tanto, si P es un camino más corto de 1 a j y k es el vértice anterior a j en ese camino, se cumplirá que uj = uk + ckj. Entonces, es evidente que se cumplen las ecuaciones de Bellman: (3.1) { } =≠+= = min njjkcuu u kjkj ,...,2: 01 Estas ecuaciones no permiten, en general, calcular el valor de cada uj, sin embargo veremos casos en los que es posible resolverlas. Supongamos que hemos resuelto estas ecuaciones y conocemos los uj para todo vértice j. Entonces, el vértice anterior a j en el camino más corto de 1 a j, es el vértice k que cumple que uj = uk + ckj, el vértice anterior al k será un vértice r que cumpla uk = ur + crk, y así sucesivamente. De esta forma, podemos determinar los vértices que forman el camino más corto de 1 a j. Si todos los ciclos de G tienen longitud estrictamente positiva, se puede demostrar que las ecuaciones de Bellman tienen una única solución que representa las longitudes de los caminos más cortos desde el vértice 1 al resto de vértices. Si existen ciclos de longitud cero, estas ecuaciones pueden tener varias soluciones (ver ejercicio 1) aunque los algoritmos que vamos a estudiar proporcionan las longitudes correctas. 3.3 Grafos acíclicos. Método del camino crítico Si G es un grafo sin ciclos, es posible ordenar los vértices de forma que las ecuaciones (3.1) se pueden resolver recursívamente. Notar que para calcular uj, sólo es necesario considerar los vértices k para los que (k,j)∈E (para el resto, ckj=∞). Teorema 3.1 Un grafo dirigido es acíclico sii es posible numerar sus vértices de forma que se cumple que si (i,j)∈E entonces i<j. Para ello se numera como primer vértice un vértice con grado de entrada cero y se eliminan los arcos que salen de él, a continuación se numera como segundo un vértice con grado de entrada cero en el grafo resultante; y así sucesivamente hasta numerar todos los vértices. Este método tiene complejidad O(n2) ya que, para numerar un vértice hay que examinar los grados de entrada de los vértices aún sin numerar (máximo n) y luego modificar los grados de entrada del resto (máximo n). Si los vértices están numerados de esta forma, las ecuaciones (3.1) pueden ser reemplazadas por: (3.2) =∈+= = njEjkcuu u kjkj ,...,2}),(:{ 01 min Enrique Benavent. Universitat de València Teoría de Grafos 20 (3.3) = 0)1(1u ==∈+= ∞=∈∀= + (b) ,...,1,...,2,1 }}),(:min{ ,{min resto el para , ,),1( que tal )()()1( )1( 1 )1( njtEjkcuuu uEjjcu kj t k t j t j jjj Notar que y que en cada iteración se revisan todas las etiquetas considerando todos s arcos del grafo. Vamos a ver que estas etiquetas son aproximaciones sucesivas de los uj, la longitud ás cortos, y qu i no hay ciclos negativos, y se aplican recursivamente las ecuaciones (3.3), entonces, para todo t y todo es la longitud del camino más corto del vértice 1 al j, sujeto a la condición de que el mo máximo n-1 arcos, es obvio que . Por otro lado, es cil ver que si para un t < n-1 se cumple que , para todo j; entonces será para todo p > t y para todo j; y por lo tanto s cortos en menos de n-1 iteraciones. ue puede ocurrir que , y que la cadena que corresponde a la longitud negativa o cero. De hecho, las etiquetas corresponden en realidad a cadenas más cortas por lo que la única garantía de que el resultado fina inos m s cortos es que no existan detectar la existencia de ciclos negativos. para la minimización en (b) los vértices k para los que ...)3(2()1( ≥≥≥ jjj uuu de los caminos m e convergen a estos valores en un número finito de pasos. Teorema 3.2 lo S vértice j, )(tju camino tenga como máximo t arcos. Dado que un camino puede tener co j n j uu = − )1( u os calculado los cam )1()( −= tj t j uu para todo j y habrem )()( t j p j u= inos májj uu = t )( Observar que las ecuaciones (3.3) no evitan que la longitud mínima calculada corresponda a una cadena que contenga un ciclo ya q fá kj t k t j cuu += + )()1( )(t ju l corresponda a cam etiqueta )(tu pase por el vértice j, con lo que la cadena cuya longitud es )1( +tu contiene un ciclo de ciclos negativos. Por otro lado, si existe un ciclo negativo alcanzable desde el vértice 1, a partir de cierta iteración las etiquetas de los vértices del ciclo corresponderán en realidad a cadenas que contienen al ciclo negativo. De hecho, si )1()( −< nj n j uu para algún vértice j, podemos asegurar que la cadena cuya longitud es )(nu contiene un ciclo negativo. Por lo tanto, las ecuaciones (3.3) pueden ser utilizadas para Por último, se puede demostrar fácilmente por inducción que, en cada iteración de la aplicación de las ecuaciones (3.3), es suficiente considerar k j á j )(t ku representa la longitud del camino más corto de 1 a k con exactamente t arcos, y que estos vértices son precisamente aquellos para los que )1()( −< tt uu . kk Enrique Benavent. Universitat de València Teoría de Grafos 21 Estas observaciones permiten establecer el algoritmo de una forma más eficiente, aunque no afectan su complejidad. Como ya hemos dicho ci, las opera ones de minimización en (3.3) (b), se tienen que hacer, plejid Supongamos que además de la longitud cij existe un entero positivo tij > 0 asociado a cada arco (i,j) del io para recorrer ese arco (puede representar también como máximo para t = 1, 2, ..., n-1, y, para cada valor de t, el cálculo de los mínimos para cada vértice j implica realizar )( jd − sumas y comparaciones, por lo que, considerando todos los vértices, el número total de operaciones es del orden de m (recordar que la suma de los grados )( jd − para todo los vértices es m). Así, la com ad del algoritmo es O(mn). Denotaremos por Γ(i) al conjunto de vértices j para los que existe el arco (i,j); y por Γ(S) a la unión de los conjuntos Γ(i) para todos los vértices i∈S. 3.6 Grafos con tiempos de recorrido nicio. Hacer t:= 1, )1(1u := 0, )1( ju := c1j, pj:= 1, para todo j∈Γ(1) y )1( ju := ∞ para el resto de vértices. S), ck+ , y kj t k t j cuu += + )()1( hacer pj:= k. )()1( : tj t j u= + . Paso 2 • S do j, estos lores representan los valores de los caminos más rtos. PARAR. )()1( t j t j u< + • )(tju< para algún j, existe un ciclo negativo en el grafo. PARAR. Paso 3 jj acer t:= t+1 y volver al Paso 1. Algoritmo de Bellman-Ford I Hacer S:= Γ(1). Paso 1. Para todo vértice j∈Γ( hacer }),(,:{,{: )()()1( EjkSkuuu j t k t j t j ∈∈= + min min ; si )()1( t j t j uu < + Para el resto de vértices, hacer u i t ≤ n-1 y )()1( tj t j uu = + para to va co • Si t < n-1 y u para algún j, ir al Paso 3. Si t = n-1 y )1(tju + . Actualizar el conjunto S := {j∈V: )()1( tt uu <+ }, h grafo que representa, por ejemplo, el tiempo necesar una carga que haya que recoger en el arco). Se plantea el problema de encontrar los caminos más cortos desde un vértice al resto con la condición de que los caminos no requieran más de cierta cantidad de tiempo T. Definimos: Enrique Benavent. Universitat de València Teoría de Grafos 22 uj(t) = longitud del camino más corto desde el vértice 1 al j, sujeto a la condición de que el camino requiera no más de t unidades de tiempo. Se puede demostrar fácilmente que se cumplen las siguientes ecuaciones: <∈∞= y todo Vj todopara ttu j 0)( (3.4) u Estas ecuaciones permiten calcular recursivamente uj(t) para t = 1, 2, ..., T (suponemos que los tiempos tij son enteros) con un número de operaciones que es O(n2T). Observar que las ecuaciones (3.4) son una ostar en ciertos vértices (x y z están entre estos vértices) y 0)0(1 ==∈+−−= min{ min njtEjkcttututu kjkjkjj ,...,1,...,2,1}),(:)(),1({)( = generalización de las ecuaciones de Bellman-Ford, en las que la restricción impuesta a los caminos se refería al número máximo de arcos utilizados. Considerar el problema de encontrar una ruta para un vehículo desde un origen, x, a un destino, z, dados, dentro de un grafo en el que sólo se puede rep al recorrer un arco (i,j) tiene un consumo de carburante tij. Si la capacidad del depósito de carburante es T, el consumo realizado desde que sale de un vértice en el que puede repostar hasta que llega a otro de esos vértices, no puede ser mayor que T. El problema es encontrar la ruta con longitud mínima sujeta a la condición de que el vehículo no se quede en ningún momento sin carburante. Dado que puede ser que el camino más corto de x a z tenga un consumo mayor que T, no es posible resolver este problema directamente. En cambio, se puede resolver en dos fases. Primero aplicamos las ecuaciones (3.4) n veces, tomando como vértice inicial cada uno de los vértices en los que se puede repostar; así podemos calcular uij(T): longitud del camino más corto entre i y j con un consumo no mayor que T. A continuación resolvemos un problema de camino más corto (sin otra restricción) entre el vértice x y el z, en un grafo que contiene sólo los vértices en los que se puede repostar y cuyos arcos tienen como longitudes los valores uij(T) previamente calculados. Enrique Benavent. Universitat de València Teoría de Grafos 25 11. Demostrar que, si en la aplicación de las ecuaciones de Bellman-Ford a un grafo G, en una iteración t, 1 ≤ t ≤ n-1, existen al menos n-t vértices j para los cuales se cumple: , entonces G contiene un ciclo negativo. )()1( t j t j uu < + 12. Determinar los caminos más cortos del vértice 1 al resto de vértices en el grafo de la figura, que emplean como máximo 4 unidades de tiempo (los números representan la longitud y el tiempo de cada arco, en este orden). 2, 1 2 3 3, 1 1, 21, 2 1, 4 1 4 5 1, 3 4, 1 Enrique Benavent. Universitat de València Teoría de Grafos 26 4 Tema 4. Acoplamientos 4.1 Acoplamientos Sea G = (V, E) un grafo no dirigido. Un subconjunto M de aristas se dice que es un acoplamiento de G si no contiene bucles y no hay dos aristas incidentes con el mismo vértice. Un vértice v∈V se dice M-saturado si alguna arista de M es incidente con v, en caso contrario se dice M- insaturado. Si todo vértice de G es M-saturado, se dice que M es un acoplamiento perfecto. M es un acoplamiento máximo de G si no hay otro acoplamiento M' de G tal que |M'| > |M|. Ejemplo: 7 7 6 1 6 1 5 8 5 8 2 2 4 3 4 3 (a) Acoplamiento máximo (b) Acoplamiento perfecto Un camino M-alternado es un camino cuyas aristas son alternativamente de E-M y de M. Por ejemplo, en el grafo de la figura (a): 5, 8, 1, 7, 6. Un camino M-aumentado es un camino M-alternado con los vértices inicial y final M-insaturados. Teorema 4.1 Un acoplamiento M de G es máximo sii G no contiene ningún camino M-aumentado. 4.2 Acoplamientos y recubrimientos en grafos bipartidos Sea S ⊆ V en G = (V, E). Llamamos entorno de S en G al conjunto de vértices de G que son adyacentes a algún vértice de S; lo denotaremos por N(S). Enrique Benavent. Universitat de València Teoría de Grafos 27 Teorema 4.2 (Hall) Sea G un grafo bipartido con bipartición (X, Y), entonces, G tiene un acoplamiento que satura todo vértice de X sii: (4.1) |N(S)| ≥ |S| para todo S ⊆ X Un árbol alternado, relativo a un acoplamiento M, es un árbol T que cumple: a) Un vértice de T es M-insaturado y se le llama raíz de T. b) Todos los caminos de T que empiezan en la raíz son M-alternados. c) Todos los caminos maximales desde la raíz de T son de cardinalidad par (por lo tanto la última arista de estos caminos siempre es de M). Ejemplo: I E EI E II E E IE E I E I Etiquetamos los vértices de un árbol alternado con I (interior) o E (exterior) según que el camino desde la raíz a ese vértice sea de cardinalidad impar o par, respectivamente. Llamamos predecesor de un vértice v, distinto de la raíz, al vértice anterior a v en el único camino desde la raíz a v. Si w es el predecesor de v, entonces diremos que v es un sucesor de w (puede no ser el único). Las siguientes propiedades de los árboles alternados son inmediatas. • Todos los vértices extremos de caminos más largos desde la raíz, tendrán etiqueta E. • Todo vértice etiquetado I tiene un único sucesor. • El número de vértices etiquetados E es una unidad mayor que el número de vértices etiquetados I. Un árbol húngaro es un árbol alternado de G, en el que todas las aristas de G incidentes con vértices etiquetados E, tienen el otro extremo en vértices del árbol etiquetados I. Teorema 4.3 Si G es bipartido y k-regular, entonces G tiene un acoplamiento perfecto. Enrique Benavent. Universitat de València Teoría de Grafos 30 − + = caso otroen I marca tiene vsi E marca tiene vsi )( )( )( :)( vl vl vl vl l l α α Algoritmo de Asignación Óptima (Kuhn-Munkres) Inicio Encontrar un etiquetado admisible l, construir Gl y tomar como acoplamiento M = ∅. Paso 1 Si X es M-saturado. PARAR, M es un acoplamiento óptimo. En otro caso, sea u∈X un vértice M-insaturado. Tomar u como raíz de un árbol alternado, marcarlo E y hacer A={u}. Paso 2 Mientras exista un vértice marcado E, sin explorar: Sea x0 un vértice marcado E y sin explorar. Para toda arista (x0, yj) de Gl, con yj∉A, hacer: a) Si yj es M-saturado, sea (xi, yj)∈M. Marcar yj como I, xi como E y hacer A := A∪{yj, xi} y añadir las aristas (x0, yj) y (xi, yj) al árbol alternado. b) Si yj es M-insaturado, el camino de de u a yj en el árbol alternado es un camino M-aumentado, sea E(P) el conjunto de aristas del camino. Hacer M := M∆E(P), rechazar el árbol alternado, borrar las marcas E, I de los vértices, e ir al Paso 1. FinPara-toda-arista FinMientras No quedan vértices E por explorar (árbol húngaro); ir al Paso 3. Paso 3 Calcular αl = min {wij - l(xi) - l(yj): para todo xi∈A, marcado E, y para todo yj∉A}. Para todo vértice v, hacer: Construir el nuevo subgrafo igualdad Gl, e ir al Paso 2. El árbol alternado se conserva, pero todos sus vértices se consideran no explorados. Si el árbol alternado generado en el Paso 2 no puede ser prolongado, llamando S al conjunto de vértices etiquetados E, se cumple , lo que demuestra que el subgrafo igualdad no contiene un acoplamiento perfecto y es necesario cambiar el etiquetado admisible y el subgrafo igualdad. Todas las aristas del árbol y del acoplamiento siguen estando en el nuevo subgrafo igualdad, por lo que no tenemos que empezar un nuevo árbol alternado, sino que se puede seguir desarrollando el que ya tenemos. De hecho, el cambio de etiquetado hace que aparezcan nuevas aristas en el subgrafo igualdad, que permitirán desarrollar el mismo árbol. |)(||)(| SNSN lG < Complejidad El número total de árboles alternados que será necesario desarrollar es como máximo p. Para construir un árbol alternado, hay que explorar los vértices marcados E, para lo que se analizan las aristas incidentes Enrique Benavent. Universitat de València Teoría de Grafos 31 con cada uno, lo que implica del orden de p operaciones para cada vértice, en total, p2 operaciones para construir el árbol, sin contar las operaciones del paso 3. En el paso 3 también se hacen del orden de p2 operaciones y es posible que tenga que ser ejecutado p veces durante la construcción del árbol (cada vez que se ejecuta podremos añadir al menos una arista y un vértice al árbol). Por lo tanto, cada árbol implica un número de operaciones del orden de p3, y dado que el número de árboles construidos es p, el algoritmo es O(n4). Sin embargo, existen implementaciones de este algoritmo que son O(n3). Ejemplo Utilizamos la siguiente matriz de costes de asignación 1 2 3 4 5 6 7 8 1 13 21 20 12 8 26 22 11 2 12 36 25 41 40 11 4 8 3 35 32 13 36 26 21 13 37 4 34 54 7 8 12 22 11 40 5 21 6 45 18 24 34 12 48 6 42 19 39 15 14 16 28 46 7 16 34 38 3 34 40 22 24 8 26 20 5 17 45 31 37 43 Utilizando el etiquetado inicial que se ha descrito, los costes reducidos son: l(yj) → 5 0 0 0 0 2 0 3 l(xi) ↓ 1 2 3 4 5 6 7 8 8 1 0 13 12 4 0 16 14 0 4 2 3 32 21 37 36 5 0 1 13 3 17 19 0 23 13 6 0 21 7 4 22 47 0 1 5 13 4 30 6 5 10 0 39 12 18 26 6 39 14 6 23 5 25 1 0 0 14 29 3 7 8 31 35 0 31 35 19 18 5 8 16 15 0 12 40 24 32 35 Primer cambio de etiquetado: l(yj) → 5 0 -1 0 0 2 -1 3 l(xi) ↓ 1 2 3 4 5 6 7 8 8 1 0 13 13 4 0 16 15 0 5 2 2 31 21 36 35 4 0 0 14 3 16 18 0 22 12 5 0 20 8 4 21 46 0 0 4 12 4 29 6 5 10 0 40 12 18 26 7 39 14 6 23 5 26 1 0 0 15 29 3 7 8 31 36 0 31 35 20 18 5 8 16 15 1 12 40 24 33 35 Enrique Benavent. Universitat de València Teoría de Grafos 32 Segundo cambio de etiquetado: l(yj) → 5 0 -1 0 0 2 -1 3 l(xi) ↓ 1 2 3 4 5 6 7 8 8 1 0 13 13 4 0 16 15 0 5 2 2 31 21 36 35 4 0 0 14 3 16 18 0 22 12 5 0 20 8 4 21 46 0 0 4 12 4 29 6 5 10 0 40 12 18 26 7 39 14 6 23 5 26 1 0 0 15 29 3 7 8 31 36 0 31 35 20 18 6 8 15 14 0 11 39 23 32 34 Tercer cambio de etiquetado: l(yj) → 5 0 -5 -4 0 2 -1 3 l(xi) ↓ 1 2 3 4 5 6 7 8 8 1 0 13 17 8 0 16 15 0 5 2 2 31 25 40 35 4 0 0 14 3 16 18 4 26 12 5 0 20 12 4 17 42 0 0 0 8 0 25 6 5 10 0 44 16 18 26 7 39 14 6 23 5 30 5 0 0 15 29 7 7 4 27 36 0 27 31 16 14 10 8 11 10 0 11 35 19 28 30 4.4 Acoplamiento Perfecto de Coste Mínimo Dado un grafo cualquiera G, con un número par de vértices y cuyas aristas tienen asociado un coste, el Problema del Acoplamiento Perfecto de Coste Mínimo consiste en encontrar un acoplamiento perfecto en G (si existe) que tenga coste total mínimo. En el apartado anterior hemos visto un algoritmo que es válido para el caso en que el grafo es bipartido. Edmonds (1965) generalizó este algoritmo para aplicarlo a un grafo cualquiera. El algoritmo de Edmonds es bastante más complejo que el de Kuhn-Munkres y no lo estudiaremos; sin embargo su complejidad es O(n3), aunque normalmente exige mayor coste computacional resolver el problema en un grafo general que en un grafo bipartido del mismo tamaño. 4.5 Grafos eulerianos. El Problema del Cartero Chino Dado un grafo no dirigido G, un tour de G es una cadena cerrada que atraviesa cada arista de G al menos una vez. Si atraviesa todas las aristas exactamente una vez, se dice que es un tour euleriano. G es un Enrique Benavent. Universitat de València Teoría de Grafos 35 4.6 Ejercicios 1. Encontrar el número de acoplamientos perfectos en K2n y Kn,n. 2. Mostrar que un árbol tiene, como máximo, un acoplamiento perfecto. 3. Dos personas juegan sobre un grafo eligiendo, alternativamente, vértices distintos: v0, v1, v2 ... , tales que vi+1 debe ser adyacente a vi, para i ≥ 0. El último jugador que es capaz de elegir un vértice, gana. Mostrar que el primer jugador tiene una estrategia de éxito seguro si, y sólo si, G no tiene ningún acoplamiento perfecto. 4. Mostrar que es imposible, utilizando rectángulos de dimensiones 1x2, cubrir completamente un cuadrado 8x8 al que se le ha quitado, en dos esquinas opuestas, un cuadrado 1x1. 5. Mostrar que un grafo bipartido G tiene un acoplamiento perfecto si, y sólo si, |N(S)| ≥ |S|, para todo S ⊆ V. 6. Una línea de una matriz es una fila o una columna de la matriz. Demostrar que el mínimo número de líneas que contienen todos los unos de una matriz de ceros y unos, es igual al máximo número de unos que se pueden escoger de manera que no haya dos en la misma línea. 7. Sean A1, A2, ..., Am subconjuntos de un conjunto S. Un sistema de representantes distintos para la familia { A1, A2, ..., Am } es un subconjunto {a1,a2,...,am}de S tal que ai∈Ai, 1 ≤ i ≤ m, y ai≠aj para i≠j. Demostrar que (A1, A2, ..., Am) tiene un sistema de representantes distintos sii U Ji iA∈ ≥Jpara todos los subconjuntos J de {1,2,...,m}. 8. Demostrar la siguiente generalización del Teorema de Hall. Si G es un grafo bipartido con bipartición (X,Y), el número de aristas en un acoplamiento máximo es . |})(||{|max|| SNSX XS −− ⊆ 9. Deducir el Teorema de Hall a partir del teorema de König. 10. Una diagonal de una matriz nxn es un conjunto de n elementos, no dos de los cuales pertenecen a la misma fila o columna. El peso de una diagonal es la suma de los pesos de sus elementos. Encontrar la diagonal de mínimo peso de la matriz: 89754 7101366 691258 47567 1110854 Enrique Benavent. Universitat de València Teoría de Grafos 36 11. Construir métodos que permitan resolver los siguientes problemas de acoplamientos en grafos bipartidos: a) Calcular el acoplamiento perfecto de coste mínimo cuando |X| = |Y| pero el grafo no es completo. b) Calcular el acoplamiento de coste mínimo que satura todo X, cuando |X| < |Y|. c) Calcular el acoplamiento perfecto de coste máximo cuando |X| = |Y| y el grafo es completo. d) Calcular el acoplamiento de coste mínimo cuando |X| = |Y| y el grafo es completo. (notar que el acoplamiento no tiene porqué ser perfecto y entonces las aristas de coste positivo no a parecerán nunca en la solución) e) Calcular el acoplamiento máximo de coste mínimo cuando |X| = |Y| y el grafo no es completo. 12. Adaptar el algoritmo de Kuhn-Munkres para calcular el acoplamiento de coste mínimo que sature todos los vértices de X en un grafo bipartido G(X,Y) con |X| < |Y|, en el que todo vértice de X es adyacente a todo vértice de Y (notar que el no es aplicable en este caso). Teorema 4.5 13. Un taller posee 6 máquinas taladradoras. Un cierto día, llegan 5 piezas que necesitan ser taladradas. Cada pieza puede ser trabajada en cualquiera de las 6 máquinas. Cada pieza ha de procesarse en una única máquina y cada máquina sólo puede procesar una pieza. El número de horas máquina que se requeriría para realizar cada trabajo en cada máquina aparece en la tabla siguiente. Hallar la forma de asignar las piezas a las máquinas con mínimo número total de horas máquina. Pieza A B C D E ______________________________ Máquina 1 5 7 6 4 9 2 8 10 3 4 7 3 6 11 5 4 7 4 5 8 7 3 9 5 3 6 4 2 7 6 3 7 5 3 7 14. Una agencia inmobiliaria tiene a la venta una variedad de casas y un número de potenciales compradores. Cada comprador potencial está interesado posiblemente en más de una casa. La inmobiliaria puede estimar muy ajustadamente cuánto pagaría cada comprador por cada casa en la que está interesado. Si la inmobiliaria recibe un 7% de cada venta. ¿Cuál sería la asociación comprador/casa que le proporcionaría un beneficio máximo? ESTIMACIONES EN MILLONES DE PESETAS Comprador 1/casa1: 12 Comprador 1/casa3: 13 Comprador 1/casa4: 10’5 Comprador 2/casa1: 13 Comprador 2/casa2: 12’5 Comprador 3/casa1: 12’5 Comprador 3/casa4: 16 Comprador 3/casa5: 18 Comprador 4/casa3: 13 Comprador 4/casa1: 14 Comprador 4/casa2: 13 Comprador 5/casa3: 10’5 Comprador 5/casa1: 12 Comprador 6/casa3: 17’5 Comprador 6/casa1: 10 Enrique Benavent. Universitat de València Teoría de Grafos 37 Comprador 7/casa4: 15 Comprador 7/casa3: 13 Comprador 7/casa5: 17’5 15. Como parte de su proceso de fabricación, un fabricante de altavoces estéreos debe emparejar altavoces individuales antes de poder venderlos. Para medir la calidad del emparejamiento, la compañía genera coeficientes de emparejamiento para cada posible par. Un coeficiente bajo indica una buena pareja y un coeficiente alto indica un mal emparejamiento. Actualmente debe emparejar 6 altavoces entre si, cuyos coeficientes de acoplamiento son: Altavoz 1 2 3 4 5 6 1 - 22 13 6 7 8 2 22 - 3 12 14 5 3 13 3 - 8 9 1 4 6 12 8 - 9 2 5 7 14 9 9 - 12 6 8 5 1 2 12 - Hallar el máximo número de pares de altavoces que se pueden formar de manera que ningún coeficiente de emparejamiento sea superior a 9. Emparejar el máximo número de altavoces de manera que la suma de los coeficientes de acoplamiento de las parejas formadas sea mínima. (Nota. El grafo no es bipartido, utilizar el programa Netsolve) 16. Un conjunto independiente en una matriz nxn es un conjunto de n componentes de la matriz tal que no hay dos de ellos en la misma fila ni en la misma columna. El peso de un conjunto independiente es la suma de las componentes que hay en él. Hallar un conjunto independiente de mínimo peso de la matriz: 8 5 4 5 8 10 1 7 6 5 7 4 12 9 6 6 6 13 10 7 4 5 7 9 8 1 5 2 17. Un primer ministro quiere reorganizar su consejo de ministros el cual consta de 5 ministros que ocupan 5 carteras. El conoce las preferencias de cada ministro por cada cartera, que pueden ser expresadas por una puntuación del 1 al 5, donde 1 indica la máxima preferencia y 5, la mínima. La tabla de preferencias es la siguiente: m c c c c c m m m m 1 2 3 4 1 3 2 1 4 5 2 2 5 4 1 3 3 1 3 2 5 4 4 5 4 1 3 5 3 5 2 1 4 En la situación actual el ministro i ocupa la cartera i, i=1,...,5. ¿Es posible reorganizar el consejo de ministros de manera que cada ministro ocupe una cartera que prefiera más que la que ocupa Enrique Benavent. Universitat de València Teoría de Grafos 40 Notar que el flujo nulo, x = 0, es siempre un flujo posible, cualquiera que sea la red G. un problema más general es aquel en el que existe una cota inferior para la cantidad de flujo que pasa por cada arco. En este caso, las restricciones ( 5.2 ) se escribirían: A(i,j)uxl ijijij ∈∀≤≤ Esta generalización se puede resolver con métodos similares a los que vamos a estudiar, aunque, en este caso, el flujo nulo no es siempre posible, por lo que encontrar un flujo posible no es trivial. 5.2 Un algoritmo para el problema del flujo máximo Recordar que un camino débil en un grafo dirigido es un camino en el que no se tiene en cuenta la dirección de los arcos. Dado un camino débil de w a v: v0 = w, a1, v1, a2, v2, ... , ak, vk = v, un arco ai es: • hacia adelante, si ai = (vi-1, vi), • hacia atrás, si ai = (vi, vi-1). Dado un camino débil P, de w a v, P denotará también el conjunto de arcos del camino además: • P+ denota el conjunto de arcos hacia adelante de P, • P- denota el conjunto de arcos hacia atrás de P, En el algoritmo que vamos a estudiar, se parte de un flujo inicial que va aumentando sucesivamente de valor gracias a la utilización de caminos aumentados. Dado un flujo x, P es un camino aumentado de w a v, para x, si: a) xij < uij, para (i,j)∈P+, b) xij > 0, para (i,j)∈P-. La capacidad residual del arco (i,j) se define como: • rij = uij - xij > 0, si (i,j)∈P+, • rij = xij > 0, si (i,j)∈P-. la capacidad residual del camino P se define como δ = min {rij: (i,j)∈P} > 0. Teorema 5.1 Dado un flujo x de s a t con valor v y un camino aumentado P, de s a t para x, con capacidad residualδ, es posible construir un flujo x' de s a t con valor v + δ. Es evidente pues que si existe un camino aumentado para x de s a t, entonces x no es un flujo máximo. Vamos a ver que también se cumple al contrario: si un flujo no es máximo, entonces existe un camino aumentado. Enrique Benavent. Universitat de València Teoría de Grafos 41 Dado un conjunto de vértices S, tal que s∈S y t∉S, llamamos cortadura s-t asociada a S al conjunto de arcos con un extremo en S y el otro en su complementario. Este conjunto se denota: [ ]SS , [ ] },,,:),{(, SiSjSjSiAjiSS ∈∈∈∈∈= o, Los arcos (i,j)∈ [ ]SS, , tales que SjSi ∈∈ , , se llaman arcos hacia adelante de la cortadura, mientras que los arcos (i,j)∈ [ ]SS , , tales que SiSj ∈∈ , , se llaman arcos hacia atrás. Denotaremos ( ) },:),{(, SjSiAjiSS ∈∈∈= , luego [ ] ( ) ( )SSSSSS ,,, ∪= . La capacidad de una cortadura, [ ]SSu , , se define como [ ] ( )∑ ∈= SSji ijuSSu ,),(, . Notar que en el cálculo de la capacidad de la cortadura sólo intervienen los arcos hacia adelante. Teorema 5.2 Sea x un flujo de s a t con valor v, entonces: ( ) ( )∑∑ ∈∈ −= SSji ijSSji ij xxv ,),(,),( Teorema 5.3 El valor de cualquier flujo de s a t es menor o igual que la capacidad de cualquier cortadura s-t. Una cortadura s-t se dice que es mínima si tiene mínima capacidad entre todas las cortaduras s-t. Teorema 5.4 Sea x un flujo de s a t con valor v y sea [ ]SS, una cortadura s-t tal que [ ] vSSu =, , entonces x es un flujo máximo de s a t y [ ]SS , es una cortadura s-t mínima. Teorema 5.5 Un flujo x de s a t es un flujo máximo de s a t sii no existe ningún camino aumentado para x de s a t. Teorema 5.6 (Teorema de flujo máximo - cortadura mínima) Si en un grafo dirigido con capacidades, existe el flujo máximo de s a t, su valor es igual a la capacidad de la cortadura s-t mínima. Enrique Benavent. Universitat de València Teoría de Grafos 42 Algoritmo de Flujo máximo (Ford&Fulkerson (1956)) Inicio. Construir un flujo inicial x, de s a t (por ejemplo x := 0). Paso 1. Buscar un camino aumentado para x de s a t. Sea P este camino, si no existe, PARAR, x es un flujo máximo. Paso 2. Sea δ := min {rij: (i,j)∈P} > 0. Hacer para cada arco (i,j)∈P • si (i,j)∈P+, xij := xij + δ, • si (i,j)∈P-, xij := xij - δ, FinHacer Volver al Paso 1. Complejidad del algoritmo de flujo máximo Si las capacidades son racionales, podemos convertirlas en enteras multiplicándolas por un número apropiado y la solución no cambia (aunque el valor del flujo máximo quedaría multiplicado por el mismo número). Supongamos que las capacidades son enteras; entonces, en cada iteración (Pasos 1 y 2) el valor del flujo aumenta al menos en una unidad. El valor del flujo máximo está acotado superiormente por la capacidad de cualquier cortadura s-t, por ejemplo [ ] UnsVsu )1(}{},{ −≤− , siendo { }AjiuU ij ∈= ),(:max . Por lo tanto el número de iteraciones será, como máximo, (n-1)U. Veremos más adelante que existe un algoritmo para buscar un camino aumentado en el Paso 1 cuya complejidad es O(m), por lo tanto, la complejidad del algoritmo de Ford&Fulkerson es O(mnU). Notar que el algoritmo no es polinómico dado que para representar U hacen falta log U dígitos y U es una función exponencial de log U (U = 10log U). Además, si las capacidades son números irracionales, no está garantizada la finitud del algoritmo. Sin embargo, si en el Paso 1 se busca un camino aumentado de s a t con un número mínimo de arcos, entonces, se puede demostrar que el número de iteraciones es polinómico, independientemente de cómo sean las capacidades. Un flujo x se dice que es entero si xij es entero para todo arco (i,j)∈A. Teorema 5.7 (Propiedad de integridad) La formulación del problema de Flujo máximo como un problema de Programación Lineal (PL) tiene la propiedad de integridad, i.e. si las capacidades son enteras, existe un flujo máximo entero. Enrique Benavent. Universitat de València Teoría de Grafos 45 Algoritmo de descomposición en caminos Inicio. Flujo de s a t x = [xij](i,j)∈E con valor v. Hacer k := 1. Mientras v > 0, 1) Buscar un camino Pk de s a t que utilice arcos (i,j) con xij > 0. Sea v(Pk) := min { xij: (i,j)∈Pk }. 2) Para cada arco (i,j)∈Pk, hacer xij := xij - v(Pk). 3) Escribir Pk y v(Pk), hacer v := v - v(Pk) y k := k+1. FinMientras El algoritmo que busca un camino de s a t en (1) es una variante del algoritmo BFS en el que los arcos "usables" son los arcos hacia adelante con flujo positivo. Notar que la transformación del flujo en (2) resta la misma cantidad de flujo entrante y saliente para cada vértice, por lo que la conservación de flujo en cada vértice sigue cumpliéndose. Además, por lo menos un arco pasa de tener un flujo positivo a tener flujo cero, por lo que el número de iteraciones será, como máximo, m. Por lo tanto, este algoritmo es O(m2). 5.5 Flujos con capacidades en los vértices En algunos casos, además de la limitación en cuanto al flujo que puede atravesar un arco, se limita también la cantidad de flujo que puede atravesar un vértice. Para todo v∈V, sea cv la máxima cantidad de flujo que puede atravesar el vértice v. La siguiente transformación permite reducir el problema al problema de flujo máximo con capacidades sólo en los arcos. Dado el grafo G, construimos el grafo G' de la siguiente forma: • Partir cada vértice i∈V-{s,t} en dos vértices i' y i'' y añadir el arco (i',i''). • Reemplazar cada arco (s,j)∈E, por el arco (s,j') y reemplazar cada arco (j,t) por el arco (j'',t). • Reemplazar el resto de arcos de G, (i,j)∈E con i,j∈ V-{s,t}, por los arcos (i'',j'). Ejemplo: i j i' i'' j'' j' t s s t G'G Notar que, en G', un camino que entra en el vértice i', tiene que usar necesariamente el arco (i',i'') y seguir por algún arco, sea (i'',j'), que corresponde a un arco (i,j) de G. Por lo tanto, es fácil ver que existe una Enrique Benavent. Universitat de València Teoría de Grafos 46 correspondencia biunívoca entre los caminos de s a t en G y los caminos de s a t en G'. Además, si un camino pasa por el vértice i en G, el correspondiente camino en G' pasa por el arco (i',i''). Por lo tanto basta poner una capacidad ci a cada arco (i',i'') de G', y calcular el flujo máximo de s a t en G'. El flujo correspondiente en G, cumplirá la condición de que, por cada vértice i∈V, no pase una cantidad de flujo mayor que ci. 5.6 Flujos en grafos no dirigidos Para calcular un flujo máximo en un grafo dirigido, basta sustituir cada arista (i,j) por un par de arcos opuestos: (i,j) y (j,i), ambos con la misma capacidad. Existe una correspondencia biunívoca entre los flujos en un grafo no dirigido y los flujos no solapados (que se definen a continuación) en el grafo dirigido que resulta de sustituir cada arista por dos arcos opuestos. Un flujo solapado es aquel para el que, para algún par de vértices i y j, existe un flujo positivo de i a j y también de j a i, esto es: xij>0 y xji>0. Dado un flujo solapado x, siempre es posible construir un flujo no solapado equivalente (con el mismo valor) haciendo, para cada par de vértices i, j para los que existen dos arcos opuestos, xij := xij -δij, y , xji := xji -δij, siendo δij = min{ xij, xji }. 5.7 El Problema del Flujo de coste mínimo Sea un grafo dirigido G = (V, A), en el que cada arco (i,j) tiene asociado un coste cij y una capacidad uij; y cada vértice i∈V tiene asociada una demanda bi, de forma que 0=∑∈Vi ib . El problema del flujo de coste mínimo consiste en encontrar un flujo en el que el flujo neto en cada vértice i sea igual a bi, el flujo por cada arco (i,j) cumpla xij ≤ uij, y tenga un coste total mínimo. Se puede formular como un problema de Programación Lineal: a. s. Min ijEji ij xc∑ ∈),( Vibxx i iij ji iji ij ∈∀=− ∑∑ −+ ∈∈ )(),()(),( δδ A(i,j)ux ijij ∈∀≤≤ 0 Este problema incluye como caso particular al problema del flujo máximo y tiene muchas aplicaciones. Se puede resolver con algoritmos polinómicos muy eficientes. 5.8 Determinación de la conectividad de un grafo Utilizando el algoritmo BFS es posible determinar si existe un camino desde un vértice s al resto de vértices; basta considerar como arco "usable" los arcos hacia adelante y hacer que el algoritmo acabe cuando Lista = ∅. Una vez finalizado el algoritmo, para cada vértice i, se cumple que etiqueta(i) ≠ ∅, sii Enrique Benavent. Universitat de València Teoría de Grafos 47 existe un camino de s a i en el grafo. Si aplicamos el algoritmo n veces tomando cada vez como vértice s un vértice distinto, podemos determinar los pares de vértices que están conectados y, por lo tanto, las componentes fuertemente conexas del grafo. El caso de un grafo no dirigido, se reduce al caso dirigido sustituyendo cada arista por dos arcos opuestos (existen forma más eficientes de calcular las componentes de un grafo, tanto en el caso dirigido como en el caso no dirigido). Si un grafo es conexo, puede estudiarse el "grado de conectividad" de distintas formas. Estudiaremos estos conceptos sólo para los grafos no dirigidos (en el caso dirigido existen definiciones similares). Sea G = (V, E) un grafo no dirigido; por simplicidad, supondremos que no tiene bucles. Conectividad por vértices Una cortadura de vértices es un subconjunto V'⊆V, V'≠V, tal que G-V' es desconexo. Si |V'|=k, se llama k-cortadura de vértices. Si v∈V y ω(G-v) > ω(G), se dice que v es un vértice de corte. Se define la conectividad de un grafo G, no completo, como el mínimo k para el que G tiene una k-cortadura de vértices; se denota por K(G). La conectividad de un grafo completo (o que tenga como subgrafo generador un grafo completo), se define como n-1. Notar que si G es trivial o desconexo, K(G) = 0. Un grafo G se dice k-conexo si K(G) ≥ k, lo que equivale a decir que quitando menos de k vértices, el grafo no se desconecta. Conectividad por aristas Se define la aristoconectividad de un grafo G, K'(G), como el mínimo k para el que G tiene una k- cortadura de aristas (esto es, una cortadura de aristas con k aristas). Si G es trivial, se define K'(G) = 0. Se dice que un grafo G es k-aristoconexo si K'(G) ≥ k. Teorema 5.10 Para cualquier grafo G, se cumple que K(G) ≤ K'(G) ≤ δ(G). Diremos que dos caminos son aristodisjuntos si no tienen ninguna arista en común y diremos que son internamente disjuntos si no tienen ningún vértice interno en común (se exceptúan los vértices extremos del camino). Dado un grafo no dirigido y conexo G, asignamos a cada arista una capacidad igual a 1. Es evidente que el valor del flujo máximo entre dos vértices i y j en este grafo es igual al número de caminos aristodisjuntos entre i y j en G y, al mismo tiempo, por el teorema de flujo máximo - cortadura mínima, este número es igual al mínima cortadura de aristas cuya eliminación destruye todos los caminos entre i y j. Enrique Benavent. Universitat de València Teoría de Grafos 50 6. Mostrar cómo se puede transformar un problema de flujo máximo con varias fuentes y varios sumideros en el que hay que maximizar el flujo total saliente de todas las fuentes, en uno con una sola fuente y un sólo sumidero. 7. Demostrar que si añadimos cualquier número de arcos entrantes, con cualquier capacidad, al nudo fuente, el valor del flujo máximo no cambia. Similarmente, si añadimos cualquier número de arcos salientes, con cualquier capacidad, al nudo sumidero, el valor del flujo máximo no cambia. 8. Suponer que se quiere resolver un problema de flujo máximo que contiene arcos en paralelo, pero el programa del que disponemos para resolverlo no admite esta posibilidad. ¿Cómo podríamos usar este programa para resolver nuestro problema? 9. Flujo posible: Los nudos del grafo de la figura representan puertos que tienen una determinada oferta/demanda de cierta mercancía, representada al lado de cada nudo. Los arcos representan posibles envíos de mercancía con una determinada capacidad que se ha representado al lado de cada arco. Determinar si es posible satisfacer las ofertas y demandas dadas resolviendo un problema de flujo máximo. 10. Programación distribuida: Un programa tiene 4 módulos que pueden ejecutarse en dos procesadores distintos PA y PB. Los costes de ejecución de estos módulos en cada procesador vienen dados por la tabla (a). Por otro lado, si dos módulos i,j se ejecutan en procesadores distintos, se incurre en un coste de comunicación; estos costes se representan, para cada par de módulos en la tabla (b). Determinar en qué procesador se debe ejecutar cada módulo para minimizar el coste total formulando un problema de cortadura mínima. 1 2 3 4 1 2 3 4 PA 6 5 19 4 1 0 5 0 0 PB 4 10 3 8 2 5 0 6 2 (a) 3 0 6 0 1 4 0 2 1 0 (b) 11. La tabla siguiente contiene los datos de un problema de secuenciación en máquinas paralelas con cuatro tareas: tiempo de procesamiento (en días), día en que están disponibles, y día límite, para cada Enrique Benavent. Universitat de València Teoría de Grafos 51 tarea. Suponiendo que se dispone de dos máquinas cada día, resolver el ejemplo con el algoritmo de Ford&Fulkerson. tarea (j) 1 2 3 4 Procesamiento (pj) 2.5 3.1 5.0 1.8 Disponible (rj) 1 5 0 2 Límite (dj) 5 9 8 7 12. Suponer que una red contiene un nudo, distinto de la fuente, sin ningún arco entrante, ¿se puede eliminar ese nudo sin afectar al valor del flujo máximo? Similarmente, ¿se puede eliminar un nudo, distinto del sumidero, que no tenga ningún arco saliente? 13. Un comandante está situado en un nudo p de una red de comunicaciones G y sus subordinados están situados en un conjunto S de nudos de la red. Sea uij el esfuerzo requerido para destruir el arco (i,j) de la red. El problema es determinar el mínimo esfuerzo requerido para impedir que el comandante se pueda comunicar con cualquiera de sus subordinados. ¿Cómo se puede resolver este problema? 14. En el ejemplo de la Secuenciación de Máquinas en Paralelo, ¿cómo se puede modelizar la situación en que el número de máquinas disponibles es distinto cada día? Aplica el método que propongas al siguiente ejemplo. Hay que realizar 4 tareas; la tabla siguiente proporciona el tiempo de procesamiento (en días), día en que están disponibles, y día límite, para cada tarea. Tres máquinas están disponibles los días 1, 2, 4 y 5, dos máquinas los días 3 y 6, y cuatro máquinas el resto de días. tarea (j) 1 2 3 4 Procesamiento (pj) 1.5 1.25 2.1 3.6 Disponible (rj) 3 1 3 5 Límite (dj) 5 4 7 9 15. Suponer que se conoce un flujo máximo de s a t en una red. Mostrar cómo se puede construir una cortadura s-t mínima con un tiempo adicional O(m). 16. Demostrar que si xij = uij para cierto arco (i,j), en todo flujo máximo, entonces este arco debe ser un arco hacia adelante en alguna cortadura mínima. 17. Un departamento universitario con p profesores, F1, F2,..., Fp, va a ofrecer p asignaturas, C1, C2,..., Cp, en el semestre siguiente y cada profesor va a impartir exactamente un asignatura. Cada profesor solicita las dos asignaturas por las que tiene mayor preferencia. Decimos que una asignación de Enrique Benavent. Universitat de València Teoría de Grafos 52 cursos es posible si a cada profesor se le asigna una de las dos asignaturas que ha solicitado. ¿Cómo se puede determinar si existe una asignación posible? 18. Un flujo es par si para cada arco (i,j)∈A, xij es par; es impar si para cada arco (i,j)∈A, xij es impar. Para cada una de las afirmaciones siguientes, demostrarla o encontrar un contraejemplo: a.- Si las capacidades de todos los arcos son pares, la red tiene un flujo máximo par. b.- Si las capacidades de todos los arcos son impares, la red tiene un flujo máximo impar. 19. Para cada una de las afirmaciones siguientes, demostrarla o encontrar un contraejemplo: a.- Si x es un flujo máximo, si (i,j), (j,i)∈A, entonces se cumple que xij = 0 o xji = 0. b.- Para cualquier red existe un flujo máximo x para el cual, si (i,j), (j,i)∈A, entonces se cumple que xij = 0, o xji = 0. c.- Si multiplicamos la capacidad de cada arco por un número positivo λ, la cortadura mínima no cambia. d.- Si sumamos un número positivo λ a la capacidad de cada arco, la cortadura mínima no cambia. 20. Si la capacidad de un arco disminuye en k unidades, ¿en cuánto, como máximo, puede cambiar el valor del flujo máximo? Poner ejemplos en los que se alcance el máximo y el mínimo cambio posible respectivamente. 21. Si la capacidad de un arco aumenta k unidades, ¿en cuánto, como máximo, puede cambiar el valor del flujo máximo? Poner un ejemplo en el que se alcance el máximo cambio posible. 22. Sean [S,S _ ] y [T,T _ ] dos cortaduras s-t cualesquiera de la red dirigida G. Demostrar que se cumple u[S,S _ ] + u[T,T _ ] ≥ u[S∪T,S∪T ___ ] + u[S∩T,S∩T ___ ]. 23. Demostrar que si [S, S _ ] y [T, T _ ] son ambas cortaduras s-t mínimas entonces las cortaduras [S∪T,S∪T ___ ] y [S∩T,S∩T ___ ] son también cortaduras s-t mínimas. 24. Suponer que se conoce un flujo máximo en una red que tiene capacidades enteras. Sugerir un algoritmo para convertir este flujo en un flujo máximo entero. ¿Cuál es la complejidad del algoritmo? (Sugerencia: modificar el flujo a lo largo de ciclos débiles). En los ejercicios siguientes, se supone que los grafos son no dirigidos 25. Sea G un grafo conexo con matriz de adyacencia Y. ¿Qué se puede decir de Y si: a) vi es un vértice de corte b) (vi, vj) es una arista de corte?