Você está na página 1de 61

Teora de grafos.

Alfredo Garc Olaverri a

1
1.1

Grafos no dirigidos. Arboles. El problema de los puentes de Konigsberg.

La teor de grafos puede considerarse que nace en 1736 cuando el matemtico suizo a a Leonard Euler publica un art culo donde resuelve el llamado problema de los puentes de Kningsberg. Esa ciudad, la actual ciudad rusa de Kaliningrado, es atravesada por el r o o Pregel, que la divide en varias partes, que en tiempos de Euler estaban conectadas por siete puentes como se muestra en la gura 1. Hay cuatro zonas distintas, A, B, C, D y siete puentes. Los habitantes de la ciudad consideraban un problema dif resolver la cil siguiente cuestin: Es posible dar un paseo por la ciudad volviendo al punto de partida, o pero pasando por todos los puentes una sla vez?. Euler, no slo resolvi el problema, o o o sino que encontr la forma de resolverlo para un caso genrico de n zonas y m puentes o e conectndolas. Para ello, hizo un esquema como el de la parte derecha de la Figura 1, a donde las zonas de la ciudad se han reducido a puntos, y los puentes a l neas uniendo los puntos. La observacin clave de Euler fu que para que exista una forma de pasar o e por todas las l neas una sola vez, como cada vez que llegamos a un punto, debemos de salir por una l nea distinta a la de llegada, desde cada punto debe salir un nmero par de u l neas. Adems claro est, debe ser posible poder pasar desde un punto arbitrario a otro a a cualquiera. Estas dos condiciones, que formalizaremos en lenguaje de grafos en el Teorema 1.2, adems de necesarias son sucientes. a

A
A

B D

C
Figure 1: El problema de los puentes de Knigsberg. o

1.2

Grafos no dirigidos.

El esquema de la parte derecha de la Figura 1, es lo que se denomina un trazado de un grafo no dirigido. Pero el grafo es un ente abstracto, formalmente tenemos: Denicin 1 Un grafo no dirigido, es un par G = (V, E), donde V es un conjunto o nito, a cuyos elementos llamaremos vrtices ( nodos puntos) y E es un conjunto de e o o pares no ordenados de vrtices, a cuyos elementos llamaremos ejes ( aristas l e o o neas o enlaces). Llamaremos orden de un grafo y lo denotaremos por n al nmero de sus vrtices, es decir u e n = |V |, y llamaremos tama o del grafo G, y lo denotaremos por m a su nmero de ejes, n u m = |E|. Generalmente se usan los s mbolos v1 , . . . , vi , . . . , vn para denotar los vrtices, y la e notacin (vi , vj ) para denotar ejes, pero nosotros ms frecuentemente usaremos los s o a mbolos i, j, . . . en lugar de vi , vj , . . . y la notacin (i, j) en lugar de (vi , vj ). En nuestra denicin, o o 2

cuando decimos que los ejes son pares no ordenados, queremos decir que el par (i, j) y el par (j, i) son el mismo. Un arco (i, i) es llamado un bucle. A veces usaremos nombres e1 , . . . , em para los ejes, pero slo cuando no nos interesen los vrtices que forman ese par. o e Dado un eje ek = (i, j) diremos que une i con j, que i y j son sus extremos. Tambin e diremos que i y j son adyacentes vecinos, y que el eje (i, j) es incidente al vrtice i. o e Cuando permitimos que en el conjunto de ejes aparezcan pares repetidos (es decir E es un multiset) diremos que G es un multigrafo no dirigido. Un grafo no dirigido, sin bucles, y sin pares repetidos es llamado simple. Notar que en este caso puede mirarse cada eje de E como un subconjunto de V que consta de dos elementos. Aunque la mayor parte de los resultados que veremos en este cap tulo son vlidos para multigrafos, y para grafos con a bucles, por simplicidad, mientras no se indique lo contrario, supondremos que todos los grafos no dirigidos son simples. Aunque un grafo es una estructura abstracta, ya desde los or genes de los grafos se han utilizado representaciones visuales de esa estructura. La representacin mas habitual o es la que se denomina trazado de un grafo ( realizacin de un grafo), y es como la o o dada en la Figura 1: Cada vrtice del grafo se representa por un punto ( un pequeo e o n c rculo), a veces con etiquetas (nombres) asociadas, y cada eje se representa por una l nea (generalmente suave) conectando los puntos correspondientes a sus extremos. Hay que diferenciar claramente un grafo de su trazado. Trazados correspondientes a un mismo grafo hay muchos, de muchos tipos y con propiedades geomtricas distintas. Ver Figura 2. e

Figure 2: Dos trazados del grafo K3,3 . El grado ( valencia) d(i) del vrtice i es el nmero de ejes incidentes con l. El o e u e siguiente resultado, aunque trivial, se usa frecuentemente: Teorema 1.1 En cualquier grafo no dirigido sin bucles el nmero de vrtices de grado u e impar es par. Dems. Como cada eje es incidente a exactamente dos vrtices, la suma de los grados de e todos los vrtices es dos veces el nmero de ejes, es decir e u
n i=1

d(i) = 2m

Como la suma de los grados es un nmero par, tiene que haber un nmero par de sumandos u u con valor impar. 2 Una cuestin que debemos dejar clara es cuando dos grafos son iguales diferentes. As o o est claro que los dos trazados de Figura 2 representan el mismo grafo no dirigido. Ahora si a 3

cambiamos los nombres de los vrtices de la parte derecha, y los llamamos A, B, C, D, E, F e ya tenemos dos grafos distintos pues el conjunto de vrtices es distinto, y por tanto tambin e e el de ejes. Pero en realidad slo hemos cambiado los nombres de los nodos, la estructura o subyacente es la misma, y podemos seguir considerndolos como iguales, al menos equiva o alentes. En lenguaje de grafos diremos que esos dos grafos son isomorfos. Denicin 2 El grafo G = (V, E) es isomorfo al grafo G = (V , E ) si existe una o aplicacin biyectiva de V a V que preserva la adyacencia, es decir tal que (i, j) E si o y slo si ((i), (j)) E . o Muchos problemas combinatorios consisten en contar grafos no isomorfos cumpliendo alguna propiedad. A veces decimos que estamos contando grafos no etiquetados cumpliendo esa propiedad, indicando con lo de no etiquetado que los vrtices no tienen nombre (etie queta), que otro grafo que se obtenga cambiando los nombres a los nodos se considera el mismo. Por el contario, si los nodos estn ya dados y tienen un nombre, decimos que a contamos grafos etiquetados con una cierta propiedad. Denicin 3 La matriz de adyacencia de un grafo no dirigido es una n n matriz o simtrica M = (mij ), donde el elemento mij es 1 si existe el eje (i, j) y 0 en caso contrario. e Igualmente la matriz de incidencia de un grafo, es una n m matriz B = (bik ), donde si (i, j) es el eje ek , en la columna k de B tenemos bik = 1, bjk = 1 y el resto de valores de esa columna es 0. Denicin 4 Un subgrafo de G = (V, E) es otro grafo G1 = (V1 , E1 ) tal que V1 V y o E1 E. Cuando V1 = V decimos que G1 es un subgrafo generador ( spanning) de G. El subgrafo o inducido por un subconjunto de vrtices V1 es G1 = (V1 , E1 ) con E1 = E (V1 V1 ). e Igualmente el subgrafo inducido por un subconjunto de ejes E1 es G1 = (V1 , E1 ), con V1 el conjunto de extremos de E1 . Una de las operaciones bsicas en un grafo es la de borrar un vrtice un eje. El grafo a e o G v, indica el grafo obtenido al borrar el vrtice v y sus ejes adyacentes. El grafo G e, e es el obtenido eliminando ese eje, pero manteniendo todos los vrtices. De la misma forma e puede denirse G V1 y G E1 para cualquier subconjunto de vrtices V1 ejes E1 . El e o grafo G + e ser el obtenido al aadir al conjunto de ejes un nuevo eje e de V V . a n o o Denicin 5 Dado un grafo no dirigido, G = (V, E), un itinerario ( recorrido paseo) o de longitud l desde el vrtice i al j es una sucesin de vrtices (i0 , i1 , i2 , . . . , il ) tal que e o e i0 = i, il = j, y (ih1 , ih ) E para h = 1, 2, . . . l. Un camino es un recorrido en el que no aparecen ejes repetidos. Diremos que el camino es simple cuando en la secuencia adems no aparecen vrtices a e repetidos. Consideraremos que una secuencia formada por un solo vrtice (i) es un camino e de longitud 0. Un ciclo es un camino que al menos contiene un eje, y donde el vrtice e inicial i coincide con el vrtice nal j. Si adems, no hay otros vrtices repetidos diremos e a e que el ciclo es simple. Podemos considerar un itinerario como una forma de ir desde el vrtice i hasta el j. De acuerdo con nuestra denicin, si por ejemplo (i, j) es un eje del e o grafo, (i, j, i) es un itinerario, pero no es un camino, ni tampoco es un ciclo. Notar que cuando G es un multigrafo, dada una secuencia de vrtices (i0 , i1 , i2 , . . . , il ) puede haber e 4

varios pares (ih1 , ih ) E, y para denir un itinerario se debe especicar cul de esos ejes a se usa para pasar de ih1 a ih . En este caso un itinerario se dene como una secuencia que alterna nodos y ejes (i0 , e0 , i1 , e1 , i2 , . . . el1 , il ) y tal que los extremos del eje eh sean ih e ih+1 . Cuando existe un itinerario desde i hasta j diremos que j es alcanzable desde i. Es evidente que si hay un itinerario desde i hasta j tambin hay un camino simple desde i e a j, pues borrando de ese itinerario todos los nodos comprendidos entre nodos repetidos obtendremos un camino simple. Es decir, si tenemos el itinerario de i a j, P = (i = i0 , i1 , i2 , . . . , il = j), y hay nodos repetidos, digamos ir = is con r < s, tambin es un e recorrido de i a j, P = (i0 , i1 , i2 , . . . , ir = is , is+1 , . . . , il = j), y adems su longitud es a menor. Repitiendo ese proceso mientras el itinerario tenga nodos repetidos llegaremos a obtener un camino simple. En particular el camino de longitud m nima desde i hasta j siempre es simple. El razonamiento anterior nos sirve para probar que si un eje e pertenece a un ciclo C = (i = i0 , i1 , i2 , . . . , il = i) tambin pertenece a un ciclo simple C1 C: Si C es e simple est hecho, si por el contrario es digamos ir = is con r < s, el eje e estar en el ciclo a ao = (i , i = (i = i , i , i , . . . , i = i , i C o 0 1 2 r s s+1 , . . . , il = r r+1 , . . . , is ) en su complementario C i), ambos con una longitud menor. Repitiendo el proceso anterior en el ciclo en el que est el eje e (C C ), llegaremos a un ciclo simple contenido en C y conteniendo el eje e. e o Como consecuencia podemos notar que cualquier ciclo (itinerario cerrado sin repetir ejes) puede ponerse como unin de ciclos simples C1 , C2 , . . . , Ck disjuntos en ejes. Finalmente o notar que para itinerarios cerrados, C = (i = i0 , i1 , i2 , . . . , il = i), podemos elegir cualquier nodo como comienzo, es decir el itinerario C = (ir , ir+1 , . . . , il = i, i1 , . . . , ir1 , ir ) como subgrafo coincide con el C. Denicin 6 Un grafo G = (V, E) es conexo, cuando para todo i, j V existe un camino o desde i hasta j. Un subgrafo maximal y conexo de G se denomina componente conexa. Las componentes conexas de un grafo coinciden con las clases de equivalencia de la relacin o entre vrtices j es alcanzable desde i. Como no puede haber ejes entre vrtices que estn e e e en distintas componentes, un grafo no conexo equivale a varios grafos (las componentes) sin relacin entre ellos, y generalmente slo nos interesan grafos conexos. o o
1 2 1 2

Figure 3: Un grafo y su complementario. Denicin 7 Un eje e es un puente del grafo G si G e tiene una componente conexa o ms que G. De la misma forma un vrtice v es un punto de articulacin ( cut-vertex) a e o o de G si G v tiene ms componentes conexas que G. a Un ciclo euleriano es un ciclo (en general no simple) que contiene a todos los ejes del grafo una sola vez. Un ciclo hamiltoniano es un ciclo que contiene a todos los vrtices e 5

del grafo una sola vez. Un grafo es euleriano ( hamiltoniano), si y slo si, contiene un o o ciclo euleriano ( hamiltoniano). o Teorema 1.2 Un grafo G sin vrtices aislados es euleriano, si y slo si, es conexo y todos e o los vrtices tienen grado par. e Dems. Supongamos G euleriano, es decir existe un ciclo C = (v1 , v2 , . . . , vk , v1 ) tal que incluye a todos los ejes una sola vez. Como no hay vrtices aislados todos los vrtices deben e e aparecer en C, luego el grafo es conexo. Adems, cada vez que un vrtice distinto de v1 a e aparece en C es con un eje de entrada y otro de salida que cada vez son distintos, luego ese vrtice tiene grado par. Lo mismo sucede cuando v1 aparece en posiciones centrales e de C, y estos ejes junto con (v1 , v2 ) y (vk , v1 ) son los incidentes a v1 , que por tanto tiene grado par. Rec procamente, supongamos que G es conexo, con ms de un vrtice, y todos los nodos a e de grado par. Dado un vrtice cualquiera u, elijamos un eje incidente a u cualquiera, el e eje (u, v) y supongamos que C es el camino sin ejes repetidos ms largo conteniendo el eje a (u, v). Ese camino existe, y ser de la forma C = (v0 , . . . , u, v, . . . , vl ). Si fuese v0 = vl , a en el camino C habr amos usado un nmero impar de los ejes incidentes a v0 , por tanto u podr amos prolongar el camino, luego v0 = vl . Por el mismo razonamiento en C tambin e debern estar todos los ejes incidentes con v0 , y puesto que es un ciclo y el comienzo puede a elegirse arbitrariamente, tambin estarn todos los ejes incidentes a todos los nodos que e a aparecen en C. Por otra parte C debe contener todos los nodos, ya que si hubiese un nodo w que no est en C, como el grafo es conexo, habr un camino simple desde u hasta w, y a a , w ) con u C y w C, contradiciendo que en ese camino tiene que aparecer un eje (u1 1 1 1 / todos los ejes adyacentes a u C estn en C. a 2 1 Si observamos cuidadosamente la demostracin, nos est proporcionando un mtodo o a e para hallar un circuito euleriano en un grafo conexo con todos los nodos con grado par. Comenzamos un camino C con el eje (u, v) y lo prolongamos con un nuevo eje (v, v2 ) desde v a un vecino v2 , despus con un nuevo eje (v2 , v3 ), y asi sucesivamente hasta que e no podamos continuar sin repetir ejes. Necesariamente terminamos ese proceso en el nodo u, por tanto C es un ciclo (en los otros nodos no podemos terminar pues cada vez que llegamos a un nodo v = u hemos usado un nmero impar de ejes incidentes a v, luego se u puede continuar). Si ese ciclo C incluye a todos los ejes del grafo, ese es el ciclo euleriano buscado, en caso contrario y puesto que el grafo es conexo, es por que existe u en C con un eje (u , v ) que no est en C. Repetimos el proceso anterior con (u , v ) (pero sin usar a ejes de C) y obtendremos un nuevo ciclo C que empieza y termina en u . Ahora podemos combinar C y C para obtener el ciclo C C , si este incluye todos los ejes hemos terminado, sino repetimos el paso previo, hasta formar un ciclo conteniendo a todos los ejes. En el siguiente cap tulo precisaremos ms como organizar los clculos. a a Los siguientes son casos especiales de grafos no dirigidos: El grafo completo, Kn , es el grafo no dirigido con n vrtices, y con todos los ejes e salvo los bucles (por tanto con n(n 1)/2 ejes). Un grafo no dirigido G = (V, E) es bipartito, si V puede particionarse en dos partes no vac V1 y V2 , de manera que todos los ejes tienen un extremo en V1 y el otro en V2 . as Cuando |V1 | = n1 , |V2 | = n2 y en el grafo aparecen todos los ejes de V1 a V2 , el grafo se suele denotar por Kn1 ,n2 y se dice que es bipartito completo. (Su nmero de ejes es n1 n2 ). u Un grafo es plano si puede trazarse en el plano de forma que las l neas representando a los ejes no se corten. Un bosque es un grafo no dirigido sin ciclos. 6

Figure 4: Los grafos completos de 3,4 5 y 6 nodos. Un rbol es un grafo no dirigido conexo y sin ciclos. a

1.3

Arboles.

Generalmente slo nos interesa estudiar grafos conexos, y entre estos los ms simples, y o a probablemente los ms importantes en aplicaciones, son los rboles. Muchos cient a a cos se han interesado por ellos, asi Kirchho los descubri estudiando redes elctricas y Cayley o e
1 8 1 3 4 5 2 3 4 5 1 8 2 3 4 5 8 8

2 3 4 5 2 3 4 5

7 6 1 8

7 6 1

7 6

7 6

7 6

Figure 5: Los 5 grafos regulares de grado 3 con 8 nodos.

1 5 2 6 3 7

12 15 16 11 9 8 10 13 14

Figure 6: Un bosque de tres rboles. a lleg a ellos investigando en problemas de qu o mica orgnica. a De acuerdo con la denicin, un grafo formado por un slo vrtice y ningn eje es un o o e u rbol, pero salvo en este caso trivial, a todos los vrtices debe llegar al menos un eje, y por a e tanto todos los vrtices tienen grado 1. Los vrtices de grado 1, se denominan hojas ( e e o vrtices extremos) del rbol. e a a Lema 1 Todo rbol T = (V, E) no trivial tiene al menos dos hojas. Dems. Como el rbol es no trivial, al menos tiene dos vrtices, y como es conexo hay un a e camino simple entre dos vrtices cualesquiera. Sea (v1 , . . . , vk ) un camino simple maximal, e es decir un camino que no est contenido en cualquier otro. Si v1 tiene grado 2, adems a a de v2 tendr algun otro vecino u, pero no puede ser ninguno de los vi de ese camino puesto a que se formar un ciclo. Pero entonces (u, v1 , v2 , . . . , vk ) es un camino simple mayor, a contradiciendo la hiptesis de maximalidad. Por tanto v1 debe ser de grado 1, y por los o mismos argumentos vk tambin. e 2 Hay varias deniciones equivalentes de rbol, las ms importantes sumarizadas en el a a siguiente teorema: Teorema 1.3 Sea T = (V, E) un grafo con n vrtices, las siguientes sentencias son equive alentes: i) T es conexo y sin ciclos. ii) Cualquier par de vrtices de T estn conectados por un unico camino. e a iii) T es conexo y al eliminar cualquier eje e, T e ya no es conexo. iv) T es conexo y tiene n 1 ejes. v) T no tiene ciclos y tiene n 1 ejes. vi) T no tiene ciclos, pero al aadir cualquier nuevo eje e, T + e tiene exactamente un n ciclo. Dems. (i) (ii) Puesto que T es conexo entre cualquier par de vrtices i y j existe un e camino. Adems cualquier camino de i a j debe ser simple, ya que si en un camino aparece a repetido un nodo k tenemos formado un ciclo. Supongamos entonces que de i a j hay dos caminos simples, el camino P = (i = i0 , i1 , . . . , j) y el camino P = (i = i , i , . . . , j). Sea 0 1 ir el primer vrtice de P tal que ir+1 = i , y sea is , el primer vrtice de P posterior a e e r+1 ir que tambin est en P , es decir is = i . Notar que (ir , ir+1 , . . . , is = i , i , . . . , i ) es e a r t t1 t por construccin un ciclo simple, contradiciendo por tanto que T es rbol. o a (ii) (iii) Como existe un camino desde cualquier i a cualquier j el grafo T vericando (ii) es conexo. Sea ahora (i, j) un eje de T . Ese eje es adems el unico camino de i a j. Luego a si lo eliminamos, no existe camino entre esos dos nodos y el grafo queda desconectado. 8

(iii) (iv) Si cumple (iii) es conexo, por tanto existe un camino desde el vrtice 1 al i, e para i = 2, . . . , n. Sea Pi un camino de 1 a i de longitud m nima, sea esta li , y sea ei = (j, i) el ultimo eje de Pi . Notar que entonces lj < li . Si ei fuese ultimo eje de algn otro camino, u la unica opcin es que lo fuese de Pj , y asi este camino deber terminar con . . . , i, j). Pero o a entonces li < lj contradiciendo lo anterior. Por tanto e2 , . . . , en son ejes distintos. Esto demuestra que cualquier grafo conexo tiene al menos n 1 ejes. Adems si el camino Pi a es 1, i1 , i2 , . . . , i, siempre desde 1 hasta ir ese es un camino de longitud m nima de 1 a ir , luego lo podemos sustituir por Pir . Es decir, podemos conseguir que todos los ejes usados en los Pi sean del conjunto ei . Si el grafo tuviese algun eje e adicional, como no lo usa ninguno de los caminos Pi , al quitarlo de T el grafo seguir siendo conexo, contradiciendo a la hiptesis (iii). o (iv) (v) Suponemos que T es conexo y con n 1 ejes y queremos ver que tiene que ser ac clico. Supongamos que no lo fuese, es decir que contiene un ciclo, y por tanto contiene un ciclo simple C, el cual es un subgrafo de T con igual nmero de vrtices que u e de ejes. Sea entonces G1 = (V1 , E1 ) un subgrafo de T con el mximo posible de nodos a tal que |V1 | = |E1 |. Como T tiene menos ejes que nodos, deber existir un nodo w fuera a de V1 , y por ser T conexo deber existir un camino desde v V1 a w. Si este camino es a (v = v0 , v1 , . . . vl = w), en algn momento tiene un eje e con un extremo vh en V1 y el otro u vh+1 fuera de V1 . Pero entonces el subgrafo G2 = (V2 = V1 + vh+1 , E2 = E1 + e) tambin e cumple |V2 | = |E2 |, pero como contiene ms nodos contradice la maximalidad de G1 . a (v) (i) Supongamos T ac clico y con n1 ejes. Sean T1 = (V1 , E1 ), . . . , Tk = (Vk , Ek ) sus componentes conexas. Como son subgrafos de T sern ac a clicas, y como son conexas sern rboles. Pero como (i) (iv) cada uno tiene |Vi | 1 ejes, y por tanto T tendr n k a a a ejes. Por consiguiente k debe ser 1. Con esto queda establecido que los cinco primeros enunciados son equivalentes. (ii) (vi) Supongamos que T cumple (ii). Por tanto cumple (v) y es ac clico. Adems a si es (i, j) cualquier par que no es de T , como en T hay un camino de i a j al aadirle el n eje (j, i) obtenemos un ciclo. (vi) (i) Slo necesitamos ver que (vi) implica que T es conexo. Sean i, j dos o vrtices no adyacentes de T . Como al aadir a T el nuevo eje (i, j) se forma un ciclo C, e n necesariamente ese ciclo lo forman el eje (i, j) junto con otros ejes de T , luego C (i, j) es un camino en T uniendo i con j. 2 Dado un grafo G, en muchos casos interesa conocer los subgrafos de G que sean rboles. a Por ejemplo, G es conexo si y slo si, contiene un rbol spanning. El siguiente teorema, o a conocido como teorema matrix-tree (debido a Borchardt), permite contar cuantos rboles a spanning tiene un grafo conexo. Teorema 1.4 Sea M la matriz de adyacencia de un grafo no dirigido G, D la matriz diagonal con D(i, i) la valencia del vrtice i y L = D M . El nmero de rboles spanning e u a de G es el determinante (salvo el signo) de cualquier cofactor de la matriz L. Demostraremos este teorema en el prximo cap o tulo. Previamente, Cayley hab dea mostrado el siguiente teorema: Teorema 1.5 Hay nn2 rboles etiquetados diferentes con n vrtices ( el nmero de a e o u rboles spanning de Kn es nn2 ). a A veces es util distinguir un nodo u de un rbol T , que denominaremos ra y la pareja a z, (T, u) es un rbol con ra en u. Generalmente el rbol se representa poniendo u en la a z a 9

posicin ms alta y el resto de nodos y ejes colgando de u. Ver gura. Como existe un o a unico camino desde u a los dems nodos, si el nodo j aparece en el camino de u a i diremos a que j es un ancestro de i, y que i es un descendiente de j. En particular, si j es el nodo justo anterior al i, diremos que j es el padre de i, y que i es hijo de j. Cada nodo salvo la ra tiene un unico padre, y puede tener varios hijos. Ahora hojas son los nodos sin hijos. z Un rbol ordenado es un rbol con ra dnde los hijos de cada nodo estn ordenados, a a z, o a as hay que especicar cual es el primer hijo, el segundo, etc. Dos rboles ordenados que a slo dieren en el orden de los hijos se consideran distintos. o
a a d c

d f

pl

Figure 7: Dos rboles con ra distintos como rboles ordenados e idntico como grafos. a z, a e

Teorema 1.6 El nmero de rboles ordenados sin etiquetar distintos con n nodos es u a ( ) 1 2(n1)
n n1

10

Grafos dirigidos. Recorrido de un grafo.

El lenguaje de grafos permite representar de forma simple la estructura de numerosas situaciones. Por ejemplo sirve para describir redes de comunicaciones, como redes de carreteras, redes elctricas, cadena de mando en una organizacin, etc. Tambin sirven e o e para representar relaciones binarias, sean algebraicas, qu micas, sociales, reglas de ciertos juegos (como ajedrez), etc. Tambin se usan para modelizar evolucin de sistemas, como e o cadenas de Markov, desarrollos demogrcos, etc. En muchas de estas situaciones, cuando a por las conexiones entre nodos circula algo, suele usarse la palabra red en lugar de grafo. En estos casos es posible que en una conexin se pueda circular en una direccin y no en o o la contraria. Para modelizar estas situaciones, en las que se debe especicar direccin a o las conexiones necesitamos el siguiente concepto de grafo dirigido ( digrafo). o o Denicin 8 Un grafo dirigido ( red) es un par G = (V, A), donde V es un conjunto o nito, a cuyos elementos llamaremos vrtices ( nodos puntos) y A es un subconjunto e o o de V V a cuyos elementos llamaremos arcos ( conexiones, ejes, ...). o Ahora suponemos que cuando i = j, el par (i, j) y el par (j, i) son distintos. Dado un arco ak = (i, j) diremos que ese arco va desde i hasta j, que i es el extremo inicial y j el extremo nal. Tambin diremos que j es vecino out de i, y que i es vecino in de j. e Cada nodo tiene ahora un grado out d+ (i) y un grado in d (i). Para representar un grafo dirigido lo hacemos como en el caso de los dirigidos, pero asignando direccin mediante una echa a las conexiones. La gura 2, mueso tra un trazado del grafo con conjunto de vrtices V = {A, B, C, D, E} y arcos A = e {(A, C), (A, D), (A, E), (B, A), (B, E), (C, B), (D, C), (E, B), (E, D)}.
A

Figure 8: Un grafo dirigido. Las deniciones de bucle, multigrafo, grafo simple, subgrafo, matriz de adyacencia, ... son las mismas que para el caso de grafo no dirigido. Notar que la matriz de adyacencia ya no tiene por que ser simtrica, y que un grafo dirigido simple, sin repeticiones de arcos e ni bucles puede tener hasta n(n 1) arcos. Ahora la matriz de incidencia es una n m matriz B = (bik ), donde si (i, j) es el arco ak , en la columna k de B tenemos bik = 1, bjk = 1 y el resto de valores de esa columna es 0. Dado un grafo dirigido G podemos considerar siempre su versin no dirigida, G, que o es el grafo obtenido sustituyendo arcos por ejes y eliminando repeticiones. Rec procamente, en la mayor parte de los casos podemos considerar un grafo no dirigido como un caso 11

particular de grafo dirigido, el caso en el cual si existe el arco (i, j) tambin existe el arco e (j, i), es decir cada eje ( par no ordenado) se puede sustituir por dos arcos opuestos. o De esta forma un grafo no dirigido corresponde al caso particular de grafos dirigidos con matriz de adyacencia simtrica. e
1 1

Figure 9: Grafos dirigido y no dirigido. Denicin 9 Dado un grafo dirigido G = (V, A), un itinerario dirigido de longitud o l desde el vrtice i al j es una sucesin de vrtices (i0 , i1 , i2 , . . . , il ) tal que i0 = i, il = j, e o e y (ih1 , ih ) A para h = 1, 2, . . . l. Un camino dirigido es un itinerario dirigido en el que no aparecen arcos repetidos y diremos que el camino dirigido es simple cuando en la secuencia adems no aparecen vrtices repetidos. a e Consideraremos que una secuencia formada por un solo vrtice (i) es un camino de e longitud 0. Un ciclo dirigido es un camino dirigido que al menos contiene un arco, y donde el vrtice inicial i coincide con el vrtice nal j. Si adems, no hay otros vrtices e e a e repetidos diremos que el ciclo dirigido es simple. Podemos considerar un camino como una forma de ir desde el vrtice i hasta el j. Como en el caso no dirigido, cuando G es un e multigrafo puede haber varios pares (ih1 , ih ) A, y para denir un camino dirigido se debe especicar cul de esos arcos se usa para pasar de ih1 a ih . a Denicin 10 Dado un grafo dirigido G = (V, A), un camino no dirigido de longitud o l desde el vrtice i al j es una sucesin de vrtices (i0 , i1 , i2 , . . . , il ) tal que i0 = i, il = j, y e o e (ih1 , ih ) A (ih , ih1 ) A para h = 1, 2, . . . l, junto con una especicacin de que arco o o el (ih1 , ih ) el (ih , ih1 ) es usado para pasar de ih1 a ih , y dnde adems, cada arco o o a puede usarse como mucho una vez. Cuando se usa el arco (ih1 , ih ) pondremos una echa entre esos dos vrtices en la e secuencia que dene el camino, ih1 ih , y diremos que ese es un arco hacia adelante en el camino. Igualmente, cuando se usa el arco (ih , ih1 ) pondremos una echa invertida entre esos dos vrtices de la secuencia, ih1 ih , y diremos que ese es un arco hacia e atrs en el camino. Como en el prrafo previo se dene camino simple y ciclo (no dirigido). a a Por ejemplo, en el grafo dirigido de la gura 9, la secuencia (s 1 2 s) forma un camino no dirigido, de hecho un ciclo. La secuencia (s, 1, 2, t) forma un camino dirigido. Notar que existe un camino no dirigido de i a j en G si y slo si existe ese camino en G. o Diremos que G es conexo si lo es G, es decir si existe un camino no dirigido desde cualquier nodo i a cualquier otro nodo j. Cuando existe un camino dirigido entre cualquier par de nodos i y j decimos que el grafo es fuertemente conexo, e igualmente denimos una componente fuertemente conexa como un subgrafo fuertemente conexo y maximal. Un grafo dirigido sin ciclos dirigidos se denomina un DAG (Directed acyclic graph). Los DAG tienen algunas ( ) propiedades similares a rboles y bosques, pero notar que un a DAG puede tener incluso n arcos. 2 12

Figure 10: Un DAG denso.

2.1

Como almacenar un grafo en el ordenador.

Ciertamente para guardar un grafo (dirigido o no dirigido) podr amos guardar una lista para los vrtices y otra para los arcos ( los ejes). Otra alternativa es guardar la matriz e o de adyacencia ( y an otra guardar la matriz de incidencia), pero generalmente lo ms u a conveniente para hacer operaciones sobre grafos es guardar para cada nodo i una lista con sus nodos vecinos. Estas listas suelen llamarse listas de adyacencia, y para el caso dirigido tenemos dos listas para cada nodo i, la lista A+ (i) que contiene los vecinos out de i, es decir A+ (i) = {j (i, j) A} y la lista A (i) = {j (j, i) A}

con los vecinos in de i. Generalmente, si el grafo tiene n vrtices, identicamos estos con los nmeros e u 1, 2, . . . , n, y as las listas slo contienen nmeros en el rango [1, n]. Si queremos que o u los vrtices, tengan un nombre asociado, slo se requiere aadir una lista secuencial con e o n esos n nombres. Notar que la lista out de i corresponde a las columnas de la matriz de adyacencia que tienen un 1 en la la i, e igualmente la lista in indica las las con un 1 en la columna i. Para guardar un grafo dirigido, basta con guardar todas las listas out o todas las listas in. Hay varias formas de guardar a su vez estas listas, las mas frecuentes son la forma secuencial y la forma encadenada (esta ultima especialmente conveniente si el grafo cambia durante el proceso, por que aadimos o quitamos arcos nodos). Las principales ventajas n o de estas listas son: - Permite representar multigrafos, bucles y multigrafos no dirigidos. - Si el nmero de arcos es m, necesita espacio del orden de m + n para almacenarse, u mientras que la matriz de adyacencia requiere del orden de n2 , que usualmente es un nmero considerablemente mayor. u - A partir de la lista de arcos, obtener las listas in las out puede hacerse en o O(m + n) pasos. Rec procamente, a partir de las listas in obtener las out, u obtener la lista de arcos require ese mismo nmero de pasos. u - Si los arcos tienen caracter sticas asociadas (como costo, capacidad, nombre,...) cada una de esas caracter sticas requiere para almacenarse (y se almacena de la misma forma) O(m) espacio adicional.

13

2.2

Recorrido de un grafo. Mtodo BFS. e

Hemos dicho que un grafo no conexo (dirigido no dirigido) equivale en realidad a varios o grafos ms pequeos, y por tanto un frecuente primer clculo sobre un grafo es decidir si a n a es conexo no, y en caso negativo calcular sus componentes conexas. Pero de acuerdo o con la denicin de conexo, esto requiere resolver una cuestin previa, dado un grafo no o o dirigido G y dos nodos i y j, determinar cuando existe un camino de i a j. Como a su vez, podemos considerar un grafo no dirigido como un caso particular de grafo dirigido, una primera cuestin a resolver es la siguiente: o P1.- Dado un grafo dirigido G y dos nodos i y j, determinar si existe un camino dirigido desde i hasta j. Hay muchos mtodos para resolver este problema, pero todos esencialmente resuelven e el siguiente problema ms general: a P2.- Dado un grafo dirigido G y un nodo i, determinar todos los nodos j para los que existe un camino dirigido desde i hasta j. Claramente si resolvemos P2, hemos resuelto P1. Tambin, si resolvemos P2 para todos e los nodos i, habremos resuelto el siguiente problema: P3.- Dado un grafo dirigido G, determinar todos los pares de vrtices i,j tales que e existe un camino dirigido desde i hasta j. Uno de los mtodos ms usados para resolver P2, es el denominado mtodo BFS e a e (breadth-rst search). Este mtodo funciona mediante un proceso de marcado y exploe racin de nodos, y necesita un vector de marcas, que para cada vrtice nos indicar si el o e a vrtice est marcado o no, y una lista, que funcionar como una cola, dnde guardamos e a a o los nodos marcados. Inicialmente, suponemos que en entrada conocemos n el nmero de u vrtices, (podemos suponer que V = {1, 2, . . . , n}), las listas out de los n nodos, el nodo e inicial i, y que disponemos de un vector marca con n componentes, inicialmente todos los vrtices sin marcar, y un vector lista inicialmente vac El mtodo bsico BFS funciona e o. e a de la siguiente forma: Algoritmo BFS { 1.- (Paso inicial). Marcar el nodo i, es decir asignar un valor a marca(i) . Incluirlo en lista, que contendr una lista con los nodos no explorados. a 2.-(Paso genrico). Mientras lista no est vac e e a: Coger el primer nodo k de lista y recorrer su lista out de vecinos. Cada vecino de k no marcado, se le pone una marca, y se aade al nal de lista. Con esto k pasa al estado n de explorado, y se quita de lista. 3.-(Paso nal) Ahora lista con los nodos no explorados est vac Los nodos j marcaa a. dos, (los que tienen denido marca(j)), son a los que se llega desde el i. } Notar que cada nodo slo se explora una vez, y por tanto con O(m) pasos termina este o proceso. Hay muchas variantes de este mtodo, segn que marcas se pongan, segn decidamos e u o u tambin marcar no los arcos usados. La variante ms habitual es la siguiente, cuando se e o a exploran los vecinos del nodo k, a los no marcados les pongo la marca k, es decir si j es un vecino de k, y marca(j) estaba sin denir, ponemos marca(j) = k. Al nodo inicial i, se le puede asignar cualquier marca que no sea un vrtice del grafo, por ejemplo podemos e poner marca(i) = 0. Lema 2 Supongamos que hemos aplicado el mtodo BFS al grafo G comenzando en el e 14

nodo i y poniendo las marcas como hemos indicado. Entonces: (i) Si al nalizar el proceso un nodo j continua con marca(j) sin denir, es por que no hay camino desde i hasta j en G. (ii) Si marca(j) est denido, hagamos j0 = j, j1 = marca(j0 ), . . . , jh = a marca(jh1 ), . . . hasta que jl sea el nodo i. Entonces, i = jl , jl1 , . . . , j0 es un camino dirigido desde i hasta j. Adems, cualquier otro camino dirigido desde i hasta j contiene a al menos l arcos. iii) Sea T el grafo no dirigido que tiene como nodos, todos los nodos de G marcados, y como ejes todos los pares (marca(j), j), con j = i pero j marcado. Este grafo T es un rbol, que se denomina rbol BFS, que podemos considerarlo con ra en i, y donde el a a z unico camino desde i hasta cada nodo j del rbol, es un camino usando el m a nimo posible de arcos. Dems. Dividamos el conjunto de nodos alcanzables desde i en clases V0 , V1 , . . . , Vl , . . . donde j pertenece a la clase Vl si para llegar a j desde i el camino ms corto (con menos a arcos) usa l arcos. As V0 = {i}, V1 contiene los vecinos out de i, etc. , En el proceso, siempre se marcan y se incluyen los nodos en lista en el orden V0 , V1 , . . .. Inicialmente esto es cierto, y si lista contiene los nodos Vl sin explorar, sus vecinos slo o pueden ser de la clase Vl+1 o de clases anteriores, pero como los de las clases anteriores ya estarn marcados, al explorar los vecinos de Vl marcaremos e incluiremos en lista a exactamente los nodos de Vl+1 . Por tanto slo se marcan e incluyen los nodos de los o conjuntos Vl que son los alcanzables. Adems si al nodo j de Vl+1 le hemos puesto la a marca k, es por que a k se llegaba con un camino de l arcos, y completndolo con el arco a (k, j) obtendremos un camino de i a j con l + 1 arcos y por tanto ptimo. Esto demuestra o i) y ii). Finalmente, si es Gi = (V i , E i ), con V i el conjunto de nodos alcanzables desde i, y E i los pares (marca(j), j) con j = i, este grafo es conexo (hay camino de i a j para todo j), y tiene |V i | 1 ejes, luego es un rbol. a 2 Como en el mtodo BFS el contenido de marca(j) es el predecesor del nodo j en un e camino ptimo de i a j, es bastante usual utilizar el nombre pred(j) en lugar de marca(j) o y hablar del predecesor de j en lugar de la marca de j. Las siguientes variaciones del mtodo BFS son claras: e -Si hubisemos deseado todos los vrtices j tales que hay un camino dirigido desde j e e hasta i, pod amos haber utilizado el mismo proceso pero con las listas in, as no slo o obtendr amos desde que vrtices se llega al i, sino tambin para cada uno de ellos, la forma e e ms corta (en cuanto a nmero de arcos, y en general no es unica) de llegar hasta i. a u -Si buscamos los nodos j tales que exista camino no dirigido desde i hasta j, podemos hallarlos aplicando BFS a las listas out e in. Ahora, cuando cogemos el nodo k de la lista, primero exploramos los vecinos out de k, y a los no marcados les ponemos marca k. Despus, exploramos la lista in de k, y los no marcados les ponemos por ejemplo la e marca k. El mismo proceso anterior, nos proporciona el camino no dirigido desde i hasta j, y segn el signo de la marca, nos indica si para pasar recorremos un arco en su direccin u o en la opuesta ( es decir si es un arco hacia adelante (forward) en el camino, o es un arco o hacia atrs (backward)). a - Podemos utilizar el mtodo anterior para calcular caminos desde i a los dems nodos e a en un grafo no dirigido. Aunque nos aparezcan arcos hacia adelante y hacia atrs, prea scindiendo de la orientacin tambin esos caminos sern los ms cortos para llegar desde o e a a i a los nodos alcanzables.

15

Tambin es evidente como usar BFS para decidir si un grafo es conexo, hallar las e componentes conexas, un rbol spanning, etc. Por ejemplo, si aplicamos BFS a la versin a o no dirigida G comenzando por un nodo arbitrario, por ejemplo el nodo 1, si todos los nodos estn marcados, el grafo es conexo, y el rbol BFS es un rbol spanning. Si no todos los a a a nodos estn marcados, los marcados forman una componente conexa, la componente conexa a del nodo 1, y el rbol BFS es un rbol spanning de esa componente. Para hallar el resto de a a componentes, buscamos un nodo no marcado, i2 , volvemos a aplicar BFS comenzando en ese nodo i2 , obtenemos una segunda componente y as sucesivamente. Todo este proceso de clculo de componentes conexas se puede hacer en O(m + n) pasos. a Igualmente con ligeras variaciones de BFS podemos determinar si el grafo es bipartito no, si tiene ciclos,.... o

2.3

Recorrido DFS.

Hay otro mtodo alternativo a BFS tambin muy utilizado que se conoce con el nombre e e de DFS (Depth-First Search). Es similar a BFS, se exploran los nodos, se marcan y se guardan en una lista los marcados. Pero de la lista se escoge para explorar no el que lleva mas tiempo en la lista, sino el ultimo que lleg all Cuando todos sus vecinos estn o . a marcados se saca de la lista. Formalmente: Algoritmo DFS { 1.- (Paso inicial). Marcar el nodo i. Incluirlo en lista como no totalmente explorado. 2.-(Paso genrico). Mientras lista no est vac e e a: Coger el ultimo nodo k que hemos puesto en lista y recorrer su lista de vecinos. En cuanto encontramos un vecino de k no marcado, lo marcamos, lo aadimos a lista, y n repetimos este proceso. Si todos los vecinos de k estn marcados, eliminar el nodo k de a lista. 3.- (Paso nal) Aqui lista est vac Los nodos j marcados son a los que se llega desde a a. el i. } Como en el caso BFS, normalmente usamos como marca el nodo que estamos explorando, es decir si estamos explorando los vecinos del nodo k y es j el primer vecino no marcado, ponemos marca(j) = k. De este modo el grafo con los nodos marcados y ejes los pares (marca(j), j) forma un un rbol, el rbol DFS. Ese rbol proporciona tambin una a a a e lista de caminos desde i a los nodos alcanzables, pero ahora esos caminos no tienen por que ser los ms cortos. Por ejemplo, si el nodo j esta marcado, vamos formando la secuencia a j, marca(j), marca(marca(j)), . . . hasta que obtengamos el valor i, esa secuencia en orden contrario da el camino DFS desde i hasta j, por tanto marca(j) guarda el predecesor de j en el camino DFS de i a j, y muchas veces hablaremos de predecesores en lugar de marcas. Como con el mtodo BFS tambin DFS puede usarse para calcular caminos desde nodos j e e hasta un nodo i dado (usando listas in), caminos no dirigidos desde i a los dems nodos a (usando listas out+in) y caminos en grafos no dirigidos. De nuevo es fcil comprobar que DFS como mucho hace O(m) operaciones, pues cada a arco slo necesita explorarse una vez. o Parte de los usos de DFS se derivan del siguiente Lema: Lema 3 Sea T el rbol DFS obtenido del grafo no dirigido y conexo G comenzando en el a nodo i. Tomemos como ra de T el nodo i. Entonces si (j, j ) es un arco del grafo, bien z o j es un descendiente de j en T , bien j es un descendiente de j en T . o 16

Dems. Supongamos que en el proceso DFS de marcado j se marca antes que j . Nos basta ver que en el camino j , marca(j ), marca(marca(j )), . . . , i aparece el nodo j. La observacin clave es que cuando marcamos un nodo k y lo ponemos en lista el contenido o de lista es k, marca(k), marca(marca(k)), . . . , i. Por tanto, si marcamos el nodo j y lo ponemos en lista, como no podemos eliminar j de lista mientras j que es un vecino suyo est sin marcar, se deduce que marcamos j cuando j est en lista, y por tanto que j est e a a en el camino j , marca(j ), marca(marca(j )), . . . , i. 2 El mtodo que usamos en la Seccin 1.2 para calcular un ciclo euleriano en un grafo no e o dirigido con todos los nodos con grado par es esencialmente el mtodo DFS pero aplicado e a los ejes del grafo en lugar de a los nodos. Supongamos que nos dan un grafo no dirigido con todos los nodos de grado par, que disponemos de una numeracin e1 , e2 , . . . , em de o los ejes, que para cada nodo i conocemos una lista de sus ejes incidentes y que adems a para cada eje e conocemos sus dos extremos. Suponemos que los ejes inicialmente estn a sin marcar, durante el proceso si exploramos el eje e = (j, j ), miramos sus ejes adyacentes en el nodo j , si alguno de ellos, digamos el eje e = (j , j ) est sin marcar, haremos a marca(e ) = e (as la marca de e guarda su predecesor en el ciclo euleriano), y ponemos en la siguiente posicin de lista el eje e y el extremo j (pues nos interesa los vecinos de o un eje que comparten el nodo j ). Finalmente, como no queremos obtener un rbol con a los ejes marcados sino un ciclo, necesitamos guardar el nombre del ultimo eje eliminado de lista, esto lo hacemos con la variable ultimo, de esta forma podemos pegar ciclos. Algoritmo para ciclo euleriano { 1.- (Paso inicial). Comenzar con un eje arbitrario e1 = (i1 , j1 ). Guardar en la primera posicin de lista el par e1 , j1 , poner marca(e1 ) = 0 (o cualquier otro valor que nos sirva o para identicarlo como marcado). Hacer ultimo = e1 . 2.-(Paso genrico). Mientras lista no est vac e e a: (Fase hacia adelante) Coger el ultimo par e, j que hemos puesto en lista, y recorrer la lista de ejes adyacentes a j, si alguno de esos ejes, digamos el eje e = (j, j ) est sin marcar, hacer marca(e ) = e, aadir a lista el par e , j y continuar este paso 2 . a n (Fase hacia atrs o backtracking) Por el contrario, si todos los ejes adyacentes a a j estn marcados hacer marca(ultimo) = e (pegar ciclos), y explorar lista hacia atrs: a a , j no tenga ejes sin marcar comenzando en j hacer ultimo = mientras el par explorado e e , borrar ese par de lista y continuar la exploracin. Si j tiene ejes sin marcar, volver a o , j ). Si lista queda vac hemos terminado. paso 2 con este par (e a 3.- (Paso nal) La secuencia marca(e1 ), marca(marca(e1 )), . . . , e1 dar el ciclo euleria ano (en orden inverso a como se ha calculado). } El mtodo DFS tiene otras aplicaciones que no vamos a detallar. Basados en el mtodo e e DFS hay algoritmos con nmero de pasos O(n + m) para calcular las componentes fuerteu mente conexas de un grafo, los puentes y puntos de articulacin, y tambin para determinar o e si un grafo es plano no. o

2.4

Clculo de componentes fuertemente conexas, bases y antibases. a

Una forma sencilla de calcular las componentes fuertemente conexas de un grafo (pero cuya complejidad puede ser O(nm)) se basa en la siguiente observacin: o La componente fuertemente conexa del grafo G conteniendo el vrtice v, est formada e a 17

por los vrtices de A(v) B(v), dnde A(v) es el conjunto de nodos u tales que hay camino e o dirigido desde v a u, y B(v) es el conjunto de nodos u tales que hay camino dirigido desde u hasta v. Dems. Si es v un vrtice de la componente fuertemente conexa G = (V , A ) conteniendo e A(v) pues hay camino dirigido de v a v y v B(v) pues hay camino desde v a v, v a v. Por tanto V A(v) B(v). Pero adems dados v1 , v2 A(v) B(v), exite camino a dirigido de v1 a v y de v a v2 , por tanto tambin de v1 a v2 , luego el subgrafo inducido por e los nodos A(v) B(v) es fuertemente conexo. Pero como G = (V , A ) es maximal, tiene que ser V = A(v) B(v). 2 Notar que A(v) y B(v) son precisamente los nodos marcados cuando aplicamos BFS (o DFS) comenzando en v, segn usemos las listas out o in en ese proceso. u
D A B C E F J

A B

S3 C

D S4 E

S1 S2 H I S3 S1 S4 G F

S2

Figure 11: Un grafo dirigido, sus componentes fuertemente conexas y su grafo de componentes. Una base de un grafo dirigido G = (V, A) es un subconjunto B V de nodos tal que para cualquier nodo j B existe un i B tal que hay un camino desde i hasta j, y adems a no hay un conjunto con menos nodos vericando esa misma propiedad. Notar que entre dos nodos de B no puede haber camino dirigido. Para algunas aplicaciones interesa calcular las bases de un grafo dirigido. Por ejemplo, mirando G como una red de informacin, una o base es un conjunto minimal de nodos, donde puedo iniciar la informacin de forma que o pueda llegar a todos los dems nodos. a Calcular una base es sencillo usando las tres siguientes observaciones: - Si G es un grafo fuertemente conexo, cualquier conjunto de un slo nodo es una base. o - Si G es un DAG la unica base es la formada por todos los nodos tales que a ellos no llega ningn arco. u 18

- Si son S1 , . . . , Sk las componentes fuertemente conexas de G, el grafo C(G) que tiene como nodos a S1 , . . . , Sk , y dnde existe arco (Si , Sj ) si y slo si existe un arco desde un o o nodo de Si a otro de Sj , es un DAG. Este DAG suele llamarse el grafo de componentes de G ( la condensacin de G). o o Calculando este DAG C(G), y eligiendo un nodo de cada una de las componentes Si a las que no llega arco en C(G), obtendremos una base. Ejemplo.- Supongamos el grafo G = (V, A) con nodos V = {A, B, C, D, E, F, G, H, I, J} y arcos A = {(A, B), (A, J), (B, C), (B, H), (C, F ), (D, E), (D, C), (E, F ), (F, D), (G, F ),(G, H), (H, G), (I, A), (I, H), (J, I)}, dibujado en la gura 11. Este grafo no es fuertemente conexo, y de hecho tiene cuatro componentes fuertes S1 , S2 , S3 , S4 con los nodos: S1 = {A, I, J}, S2 = {H, G}, S3 = {B}, S4 = {D, E, C, F }. El grafo de componentes C(G) es el grafo teniendo como nodos las componentes S1 , S2 , S3 , S4 y como arcos las conexiones (S1 , S2 ), (S1 , S3 ), (S2 , S4 ), (S3 , S2 ), (S3 , S4 ). En este grafo de componentes, que tiene que ser un DAG, hay nodos a los que no llegan arcos, en este ejemplo slamente el nodo S1 , y cualquier nodo de S1 es una base de G, o por ejemplo el nodo A es una base de G. Si suponemos que G representa una red de ordenadores y los arcos indican desde que ordenadores se pueden enviar cheros a otros ordenadores, si ponemos un virus en el ordenador A este virus puede transmitirse a todos los ordenadores de la red, en cambio no se puede contagiar toda la red si lo hubisemos e puesto por ejemplo en el nodo B. Similarmente a base se dene una antibase: un subconjunto B V de nodos tal que para cualquier nodo j B existe un i B tal que hay un camino desde j hasta i, y adems es minimal, es decir no existe un conjunto con menos nodos cumpliendo esa a propiedad. De nuevo, entre dos nodos de B no puede haber un camino dirigido. Las antibases se calculan de forma anloga a las bases: Se elige un nodo de cada una de las a componentes Si de las que, en C(G), no sale ningn arco. En el ejemplo anterior slamente u o a S4 no llegan arcos, por tanto por ejemplo el nodo C es una antibase. Si como antes G representa una red de ordenadores y conectamos una impresora al nodo C, desde todos los ordenadores se pueden hacer llegar cheros a la impresora, cosa que no podr amos hacer si por ejemplo colocamos la impresora en el ordenador B.

2.5

Problema del sort topolgico. o

Supongamos que queremos hacer un libro sobre Teor de Grafos, y sabemos que temas a t1 , t2 , . . . , tn queremos que cubra el libro. El orden en el que los temas se ponen en el libro no puede ser arbitrario, si por ejemplo, el tema tj necesita resultados o deniciones del tema ti , este tema ti deber aparecer en el libro antes que el tj , y esa restriccin en el orden a o la escribiremos como ti < tj . En general tendremos una serie de restriciones de precedencia en los temas ti1 < tj1 , ti2 < tj2 , . . . , tim < tjm y lo que buscamos es un orden de los temas t1 , . . . , tn que cumpla todas esas relaciones de precedencia (si existe). Problemas anlogos a al anterior son muy frecuentes, uno de ellos son los problemas PERT en los que hay que hacer un conjunto de tareas t1 , . . . , tn , pero algunas tienen que hacerse antes que otras. Por ejemplo, si tengo que hacer obras en mi casa, tengo que decidir en que orden llamo a los profesionales de los distintos gremios, y normalmente tendr restricciones de orden, el e albail tiene que haber terminado antes de que venga el pintor, la instalacin elctrica hay n o e que hacerla despus de la fontaner etc. Este problema se suele denominar problema del e a, sort topolgico (o de clasicacin topolgica), y puede formalizarse matemticamente de o o o a

19

varias formas, una de ellas es la siguiente: Tenemos un conjunto V de n elementos, t1 , t2 , . . . , tn , en el cul hay denido un orden a parcial. Un orden parcial viene dado por un conjunto de restricciones (tik < tjk ) que la unica condicin que deben cumplir es la de no contener bucles cerrados, (como t1 < t2 < o t3 < t1 ). El problema del sort topolgico consiste en encontrar un orden total compatible o con ese orden parcial, o equivalentemente, una ordenacin de los elementos de V , de forma o que si ti < tj el elemento ti aparece en esa ordenacin antes que el tj . o Puesto que especicar un orden parcial consiste en dar una lista de pares de elementos de V , esto equivale a que nos dan un grafo dirigido, con nodos V = {t1 , . . . , tn }, arcos (ti1 , tj1 ), (ti2 , tj2 ), . . . , (tim , tjm ) y sin ciclos dirigidos, es decir un DAG, y lo que queremos es hallar una ordenacin de los nodos de o forma que cada arco conecte un nodo con otro situado posteriormente. Por ejemplo si nos dan el grafo G = (V, A), con V = {1, 2, 3, 4, 5, 6, 7, 8, 9} y A = {(1, 2), (1, 5), (2, 3), (4, 1), (4, 5), (5, 2), (5, 6), (5, 9), (6, 3), (7, 4), (7, 8), (8, 5)(8, 9), (9, 6)}, una ordenacin compatible de los nodos es (7, 8, 4, 1, 5, 9, 2, 6, 3). La gura siguiente o muestra dos trazados de ese grafo. Notar que usando el orden compatible podemos conseguir que todos los arcos vayan de izquierda a derecha.
1 2 3

Figure 12: Un DAG y un orden compatible de sus nodos. Dos cuestiones surgen inmediatamente, la primera es como saber si un grafo es un DAG o no, o equivalentemente, dado un grafo hallar un ciclo dirigido o probar que no existe ninguno. La segunda cuestin es, una vez sabemos que nuestro grafo no tiene ciclos o dirigidos y por tanto es un DAG, existe siempre una ordenacin de los nodos compatible o con los arcos? (esto es, si (i, j) es un arco, el nodo i aparece antes que el j.) El siguiente Lema, esencialmente responde a ambas cuestiones, e indica que dado cualquier grafo siempre podemos hallar o bien una ordenacin compatible (y el grafo es un o DAG), o bien un ciclo dirigido (y el grafo no es DAG). Lema 4 Sea G = (V, A) un grafo dirigido. Existe un orden de los nodos V de G compatible con los arcos A si y slo si G no contiene ciclos dirigidos. o Dems. Es obvio que si G tiene ciclos dirigidos no puede tener un orden compatible. Veamos por induccin en el nmero n de nodos de G lo opuesto, que si G no contiene ciclos dirigidos, o u entonces hay un orden compatible. Si n = 2 el resultado es obvio. Supongamos ahora G con n > 2 nodos y sin ciclos. Veamos primero que tiene que existir un nodo ti tal que su lista out de vecinos est vac e a. 20

Si esto no fuese cierto y todas las listas fuesen no vac podr as, amos construir una lista arbitrariamente larga ti1 , ti2 , ti3 , . . . en la que cada par (tij , tij+1 ) es un arco de G, y puesto que el nmero de nodos de G es nito, tendremos que tij = tik , para algn j < k, y por u u tanto la secuencia tij , tij+1 , tij+2 , . . . tik forma un ciclo dirigido. Ahora si es vac la lista de vecinos out de ti , consideremos el grafo Gi obtenido a borrando el nodo ti de G y los arcos que llegan a l. Gi no puede contener ciclos, luego e por induccin podemos ordenar sus vrtices (que son todos salvo ti ) de forma que las o e conexiones vayan de izquierda a derecha, si aadimos al nal de est ordenacin el nodo n a o ti , obtenemos una ordenacin de todos los nodos que es compatible: Es compatible para o las conexiones que no usan ti por induccin, y compatible con las que usan ti pues desde o ti no sale ninguna conexin. o 2 La demostracin del lema nos da el mtodo para hallar ese orden compatible (o un ciclo o e dirigido), buscamos un nodo con listas out vac le asignamos la ultima posicin y lo as, o borramos de G, en el grafo resultante repetimos el proceso, un nodo con listas out vac as lo ponemos al nal (ahora en la posicin n1), lo borramos del grafo y seguimos haciendo lo o mismo con el grafo resultante. Si en este proceso siempre encontramos listas out vac el as, grafo inicial era un DAG y hemos encontrado un orden compatible para sus vrtices. Si por e el contrario en algn momento las listas del grafo remanente son todas no vac ese grafo u as, remanente contiene al menos un ciclo dirigido, y podemos calcular uno de esos ciclos como en la demostracin del lema, construyendo un camino t1 , vecino(t1 ), vecino(vecino(ti )), . . . o hasta que encontremos dos nodos repetidos. El mismo proceso puede hacerse utilizando las listas in, pero colocando los nodos con listas in vac en las primeras posiciones de la lista. as

2.6

Clculo de todos los pares de caminos. a

Como sealamos en la seccin anterior, una vez resuelto el problema P2, por ejemplo con n o el mtodo BFS, aplicndolo n veces habremos resuelto el problema P3. De este modo no e a slo obtendremos los pares (i, j) tales que hay camino desde i hasta j, sino incluso el uno o de los caminos ms cortos conectando esos dos nodos. Hay sin embargo otra forma sencilla a de decidir si existe un camino desde i hasta j, e incluso de contar el nmero de caminos u que se basa en el siguiente lema. Lema 5 Sea M la matriz de adyacencia del grafo dirigido G = (V, A), con vrtices e 1, 2, . . . , n. El nmero de itinerarios dirigidos desde i hasta j usando exactamente k arcos, u es el elemento de la la i, columna j de la matriz M k . Dems. Por M k entendemos el producto usual de M por si misma k veces. Veamos la demostracin por induccin. Si k = 1 el teorema es cierto. Supongamoslo cierto para o o k 1. Notar que el elemento (i, j) de M k viene dado por
n l=1 k1 donde mil es el elemento (i, l) de la matriz M k1 y por tanto indica el nmero de caminos u de k 1 arcos desde i hasta l. Estos caminos pueden completarse a un camino de k pasos hasta j, si y slo si, existe el arco (l, j), es decir si mlj es 1. o 2

mk1 mlj il

El lema anterior es tambin vlido para multigrafos (poniendo en la matriz de adyacencia e a en la posicin (i, j) el nmero de veces que es arco el par (i, j)). Tambin es vlido y o u e a 21

de amplio uso para grafos no dirigidos. Notar que si conocemos los valores propios y los vectores propios de M , fcilmente podemos hallar los elementos de M k para cualquier k. a De forma anloga tenemos: a Lema 6 Sea M la matriz de adyacencia del grafo dirigido G = (V, A), con vrtices e (k) la matriz M multiplicada por si misma k veces, pero donde ahora 1, 2, . . . , n, y sea M para multiplicar y sumar elementos usamos el producto y suma lgica. (Es decir ahora o 1 + 1 = 0, y el resto de las operaciones denidas de la forma usual.) Entonces hay un (k) camino de longitud k desde i hasta j si y slo si mij = 1. o Dado un grafo dirigido G = (V, A), la clausura transitiva de G, se dene como el grafo Gt = (V, At ), tal que existe el arco (i, j) en Gt , si y slo si, hay un camino dirigido o (0) como la matriz identidad I, la clausura transitiva tendr desde i hasta j. Si denimos M a com matriz de adyacencia la matriz M t = M (0) + M (1) + M (2) + . . . + M (k) + . . . donde de nuevo la operacin + es la suma lgica. o o

Figure 13: Un grafo dirigido y su clausura transitiva. Ahora bien, si de i a j existe un camino, tambin existe un camino simple, y necesarie amente este tiene a lo ms n 1 arcos, por tanto a M t = I + M + M (2) + . . . + M (n1) = (I + M )(n1) Por tanto para calcular la clausura transitiva de un grafo, es decir para decidir para que pares i, j existe un camino de i hasta j, nos basta calcular la matriz (I + M )(n1) , pero ejecutando siempre la suma lgica. o

2.7

N mero de caminos de un grafo. u

Recordemos que si G = (V, E) es un multigrafo no dirigido nito, con n vrtices etiquetados e 1, . . . , n, y m ejes e1 , . . . , em , la matriz de adyacencia de G se dene como la n n matriz M = M (G) que tiene como elemento mij el n mero de veces que (i, j) es eje de G. Por u tanto para grafos no dirigidos esta matriz de adyacencia, M (G), es una matriz simtrica e y real, con valores propios reales y cuya traza es el nmero de bucles de G. A los valores u propios de M (G) los llamaremos valores propios de G, y los denotaremos por 1 , . . . , n . 22

Recordemos igualmente que en el multigrafo no dirigido G = (V, E), un itinerario de longitud l desde i a j es una secuencia (i1 , e1 , i2 , e2 , . . . , il , el , il+1 ) tal que: Cada ih es un elemento de V , cada eh es un elemento de E con extremos ih y ih+1 , y adems a i = i1 , j = il+1 . Sabemos que cualquier n n matriz simtrica real M tiene n vectores propios line ealmente independientes, que pueden tomarse ortonormales (es decir, ortogonales y con norma 1). Sean u1 , . . . , un vectores propios (reales y ortonormales) correspondientes a los valores propios 1 , . . . , n de M . Consideraremos cada ui como un vector columna n 1, ut ser el vector la traspuesto, y v t u es el producto escalar del vector v por el vector a i u. Sea U la matriz cuyas columnas son los vectores u1 , . . . , un . Sabemos que esta matriz e es ortonormal, y su inversa U 1 = U t tiene como las los vectores ut , . . . , ut . Tambin n 1 sabemos que U diagonaliza M , es decir: U 1 M U = diag(1 , . . . , n ) donde diag(1 , . . . , n ) representa la matriz diagonal con entradas 1 , . . . , n . e Corolario 1 Sean 1 , . . . , n los valores propios de M (G) y i, j dos vrtices cualesquiera de V . Entonces existen nmeros reales c1 , . . . , cn tales que u (M (G)l )ij = c1 l + . . . + cn l 1 n De hecho, si U = (urs ) es uma matriz real ortonormal tal que U 1 M (G)U = diag(1 , . . . , n ) entonces ck = uik ujk Dems. Tenemos que y por consiguiente U 1 M l U = diag(l , . . . , l ) 1 n M l = U diag(l , . . . , l )U 1 1 n
k

Usando que U 1 = U t obtenemos que (M l )ij = como quer amos probar. uik l ujk k 2

Para poder usar el corolario anterior debemos ser capaces de hallar los valores propios de M (G), y la matriz U de vectores propios. Hay sin embargo un caso especialmente interesante en el que no es necesario este ultimo clculo, y es cuando queremos calcular a todos los itinerarios cerrados , itinerarios dnde el vrtice inicial coincide con el nal, de o e longitud l. Este nmero ser u a
n i=1

(M (G)l )ii = tr(M (G)l )

donde tr denota la traza (suma de los elementos diagonales). Como la traza de una matriz es la suma de sus valores propios, hemos demostrado el siguiente corolario:

23

Corolario 2 Supongamos que M (G) tiene valores propios 1 , . . . , n . Entonces el nmero u de itinerarios cerrados de G de longitud l es l + . . . + l 1 n Veamos una aplicacin de los resultados anteriores para el grafo completo Kn . o Teorema 2.1 Los valores propios del grafo Kn son 1 con multiplicidad n 1 y n 1 con multiplicidad 1. Dems. Sea J la nn matriz con todos sus elementos iguales a 1. Como su rango es 1, tiene el valor propio 0 con multiplicidad n 1, y como su traza es n, el valor propio restante vale n. Trivialmente, si la matriz M tiene valores propios 1 , . . . , n , la matriz M +cI (con I la matriz identidad) tiene valores propios 1 + c, . . . , n + c. Por tanto como M (Kn ) = J I tenemos el resultado. 2 u e Corolario 3 El nmero de itinerarios cerrados en Kn de longitud l desde un vrtice i a si mismo viene dado por (M (Kn )l )ii = 1 ((n 1)l + (1)l (n 1)) n

Notar que este es tambin el nmero de secuencias i1 , . . . , in de nmeros en el rango e u u 1, 2, . . . , n comenzando en i, terminando en il = i y sin tener dos trminos consecutivos e iguales. Dems. El nmero total de itinerarios cerrrados de longitud l ser (n 1)l + (1)l (n 1). u a Pero como todos los vrtices son equivalentes, los que empiezen en i, sern 1/n veces la e a cantidad anterior. 2 Corolario 4 El nmero total de itinerarios en Kn de longitud l comenzando en i y teru minando en j viene dado por (M (Kn )l )ij = 1 ((n 1)l (1)l ) n

Y el nmero total de itinerarios en Kn de longitud l es u


n n i=1 j=1

(M (Kn )l )ij = n(n 1)l

Dems. Notar que para k > 0 es J k = nk1 J, y que por el teorema binomial (para matrices) ( ) l lk l (J I) = (1) Jk k
l k=0

tomando J 0 = I para que la frmula sea vlida. Por consiguiente o a (J I) =


l l k=1

(1)

lk

( ) l k1 n J + (1)l I k

24

( ) l 1 lk l = ( (1) nk )J + (1)l I n k
k=1

Por tanto, de nuevo por el teorema binomial aplicado a nmeros u (J I)l = = 1 ((n 1)l J (1)l J) + (1)l I n

1 (1)l (n 1)l J + (nI J) n n

Tomando la entrada (i, j) con i = j de esa matriz M (G)l obtenemos la primera parte del corolario. La segunda parte se obtiene al sumar todos esos valores junto con los n valores (M (G)l )ii dados en el lema previo. 2 Veamos otra aplicacin de este mtodo. Deseamos calcular el nmero de secuencias o e u a1 . . . an , tales que ai es 1, 2, 3, pero donde no permitimos que aparezcan ni 11, ni 23, o ni 32. Denotemos por f (n) este nmero y sea G el grafo no dirigido G = (V, E) con u V = {1, 2, 3} y donde existen todos los ejes (i, j) excepto el (1, 1) y el (2, 3). Claramente ese nmero de secuencias f (n) es el nmero de itinerarios de longitud n en el grafo no u u dirigido G. La matriz de adyacencia de G es 0 1 1 1 1 0 1 0 1 y sus valores propios son 1, 1, 2. Por tanto sabemos que f (n) = c1 (1)n + c2 1n + c3 2n con c1 , c2 , c3 constantes. Podr amos calcular c1 , c2 , c3 desde los vectores propios de la matriz de adyacencia, pero como esa frmula es vlida para todo n, y el nmero de itinerarios o a u para n = 0, 1, 2 es respectivamente 3, 6, 12, deducimos que c1 = c2 = 0 y c3 = 3 y por tanto f (n) = 3 2n El mtodo puede extenderse de forma similar a grafos dirigidos, pero ahora los valores e propios de G pueden ser complejos. Por ejemplo, si en el ejemplo anterior no estuviese permitida la secuencia 23 pero si la 32, deber amos haber tomado G como un grafo dirigido con todos los arcos excepto el (1, 1) y el (2, 3), y calcular valores propios de la matriz de adyacencia (no simtrica) de este grafo dirigido. e

2.8

Teorema matrix-tree

Diremos que el grafo dirigido T = (V, A) es un rbol dirigido con ra en v si consta a z de n 1 arcos y para cada nodo u V hay un camino dirigido desde v a u. Notar que la versin no dirigida de T , el grafo T es un rbol, y por lo tanto el camino dirigido desde o a cada nodo v a u en T es unico. El siguiente resultado es inmediato: Lema 7 Un grafo conexo dirigido T = (V, A) con n 1 arcos es un rbol dirigido con ra a z en v, si y slo si, para cada nodo u = v hay un arco que termina en u. o 25

Dado un grafo dirigido G = (V, A) y un nodo v V , nos interesa calcular cuantos rboles spanning dirigidos con ra en v contiene. Llmemos (G, v) a ese nmero. Por a z a u ejemplo si desde v se alcanzan todos los nodos de G, el mtodo BFS (y tambin el DFS) e e producen un rbol spanning dirigido con ra en v, lo que queremos ahora es contar cuantos a z rboles dirigidos distintos podemos obtener. Obviamente, si desde v no se alcanzan todos a los nodos (G, v) = 0. Sea M la matriz de adyacencia de G y D la matriz diagonal que en la entrada (i, i) contiene el nmero de arcos de G que llegan al nodo vi . La matriz L = D M es llamada u la matriz laplaciana del grafo G. Como la suma de los elementos de cualquier columna i de L es 0, tiene que ser det(L) = 0. Denotemos por Lv la matriz obtenida quitando a L la la y columna correspondientes al vrtice v. Estamos ya en condiciones de establecer e el llamado teorema matrix-tree para grafos dirigidos: Teorema 2.2 Sea G = (V, A) un grafo dirigido, v V y L la matriz laplaciana de G. Entonces (G, v) = det(Lv ) Dems. Notar que si cambiamos el orden de los vrtices de G, las matrices M, D, L, Lv e cambian (son permutaciones de las y columnas de las anteriores) pero sus determinantes no cambian. Por tanto podemos suponer que el vrtice v es el ultimo, y que Lv se obtiene e de L borrando la ultima la y la ultima columna. Tambin usaremos la propiedad multilineal de un determinante, si son M1 y M2 dos e matrices cuadradas con las mismas entradas salvo en una la (o columna) ja i0 , entonces det(M1 ) + det(M2 ) = det(M ) donde M es la matriz con las mismas entradas que M1 y M2 excepto que la la (o columna) i0 es la suma de las las (columnas) i0 de las matrices M1 y M2 . Veamos la demostracin usando induccin sobre el nmero de arcos m del grafo G. o o u Primero notemos que el teorema es cierto si el grafo G no es conexo. En ese caso tiene que ser (G, v) = 0, pero por otra parte podemos reordenar el conjunto de vrtices e V en dos partes, la parte V1 componente en la que est v y la parte V2 con el resto de a nodos. Si son L1 y L2 las matrices laplacianas de estas dos partes, claramente det(Lv ) = det(Lv ) det(L2 ) = 0, pues el segundo factor es cero. 1 Por tanto si m < n 1, el grafo no es conexo, y el teorema se cumple. Supongamos ahora m = n 1 y grafo conexo. Si hay algn vrtice u = v al que no llega ningn arco, u e u entonces G no es un rbol dirigido con ra en v, por tanto (G, v) = 0, pero a su vez Lv a z contiene solo ceros en la columna u y por tanto tambien det(Lv ) = 0. Por el contario si a cada vrtice u = v llega un arco, G es un rbol dirigido con ra en v y (G, v) = 1. e a z Pero si reordenamos los nodos de G en postorden (primero los nodos de los subrboles a v ser triangular inferior con unos en la de v, despus v), por construccin, la matriz L e o a diagonal, luego su determinante ser 1. a Nos falta por tanto ver el caso m n (y G conexo), y supongamos que el teorema es cierto para grafos con menos de m arcos. Si el grafo G contiene algn arco e que u termina en v, notar que el grafo G e (con m 1 arcos), tiene la misma matriz Lv y el mismo nmero de rboles spanning dirigidos con ra en v (pues el arco e no puede u a z formar parte de ninguno de esos rboles). Por tanto en este supuesto, por induccin a o (G, v) = (G e, v) = det(Lv ). Finalmente, supongamos que G contiene m n arcos y que ninguno de ellos termina en v. Debe por consiguiente existir un nodo u = v en el que terminan h arcos e1 , . . . , eh con 26

h 2. Sea ahora G1 el grafo obtenido de G borrando todos los arcos que llegan a u excepto el arco e1 , y sea G1 el obtenido borrando slo el eje e1 de G. Cada uno de estos grafos tiene o pues < m arcos, y adems cada rbol spanning dirigido de G, segn use e1 u otro de los ejes a a u e2 , . . . , eh es un rbol spanning de G1 o de G1 . Por tanto (G, v) = (G1 , v)+ (G1 , v). Por a otra parte la matriz Lv correspondiente a G1 coincide con Lv excepto en la columna u. 1 En la columna u de Lv , en la posicin diagonal hay un 1, en la posicin correspondiente al o o 1 v eje e1 hay un 1 y el resto de entradas son 0. Igualmente, la matriz L1 correspondiente a G1 coincide con Lv excepto que en la columna u en la diagonal tiene un h 1 (en lugar de h), y en la la correspondiente al eje e1 tiene un 0 (en lugar de 1). Por tanto, la v columna u de Lv es la suma de las columnas u de Lv y L1 , y el resto de columnas 1 son idnticas en las tres matrices. Luego por la propiedad multilineal del determinante e e induccin tenemos que o det Lv = det(Lv ) + det(L1 1
v

) = (G1 , v) + (G1 , v) = (G, v) 2

La demostraccin anterior sirve incluso para el caso en que G sea un multigrafo sin o bucles. Cuando G = (V, E) es un multigrafo no dirigido sin bucles, podemos considerarlo como un multigrafo dirigido interpretando cada eje (i, j) como dos arcos, el (i, j) y el (j, i). Ahora a cada rbol dirigido con ra v le corresponde, prescindiendo de la orientacin, un rbol a z o a con ra en v de G. Rec z procamente, para cada rbol spanning T de G, podemos elegir un a vrtice cualquiera v y orientar todos los ejes de forma que todos los caminos empiezen en e v, produciendo por tanto un rbol dirigido con ra en v. Tenemos pues como corolario el a z llamado teorema matrix-tree para grafos no dirigidos: u a Corolario 5 El nmero de rboles spanning del multigrafo no dirigido sin bucles G = (V, E) iguala al determinante de la matriz obtenida a partir de la matriz laplaciana L borrando la la y columna i-sima, para cualquier i = 1, 2, . . . , n. e Tambin es fcil deducir el teorema de Cayley a partir de este resultado. e a Corolario 6 Hay nn2 rboles etiquetados no dirigidos diferentes con n vrtices. a e Dems. Ese nmero de rboles etiquetados diferentes es el mismo que el nmero de rboles u a u a spanning diferentes que contiene el grafo completo Kn . La matriz laplaciana de Kn es una n n matriz, con entradas n 1 en la diagonal y 1 en todas las dems posiciones. a Por tanto, por el resultado anterior, el nmero de rboles etiquetados diferentes ser el u a a determinante de la matriz obtenida borrando la ultima la y la ultima columna de la matriz anterior, por tanto el determinante de una (n 1) (n 1) matriz con valores n 1 en la diagonal y 1 en las dems entradas. Si en esta matriz, a cada una de las las a 1, 2, . . . , n 2 le restamos la la n 1 obtenemos una matriz con el mismo determinante, tal que sus (n 2) (n 2) primeras las y columas son la matriz nIn2 , su la n 1 es (1, 1, . . . , 1, n 1) y su columna n 1 es n, n, . . . , n, n 1. Si ahora a la ultima columna le sumamos todas las anteriores obtenemos una matriz con el mismo determinante, triangular inferior, y que en la diagonal tiene n 2 veces el valor n y una vez el valor 1, por tanto su determinante es nn2 . 2

27

Para grafos dirigidos G = (V, A), si tomamos como matriz diagonal D la que en la entrada (i, i) contiene el nmero de arcos de G que salen de vi , y denimos como nueva u = D M , tenemos que matriz laplaciana a L (G, v) = det(Lv ) donde (G, v) es el nmero rboles spanning dirigidos con ra en v, pero donde ahora u a z todos los arcos van dirigidos hacia v, es decir con la orientacin opuesta al caso anterior. o

28

Recorridos en grafos con costos.

En la seccin anterior vimos que el mtodo BFS proporcionaba una forma de hallar un o e camino dirigido desde i hasta j usando el m nimo de arcos. Ahora supongamos que nuestro grafo indica una red de carreteras, y queremos hallar el camino de longitud m nima desde i hasta j, ese camino ms corto no tiene por que tener un nmero m a u nimo de arcos, sino que tiene que vericar que la suma de las longitudes de los arcos sea m nima. Modelizamos esta situacin de la siguiente forma, tenemos un grafo dirigido G = (V, A), y una funcin o o w : A R, con w(i, j) representando el costo ( peso) de usar el arco (i, j) A. El costo o de un camino dirigido es ahora la suma de los costos de los arcos que lo forman.

2 3 7 4 8 s 2 3 7 3 2 3 9 4 1 15 6 8 2

4 1 5 7 1 1 2 1 16 t 2 7

Figure 14: Un grafo con costos 0. Como para el recorrido de un grafo dirigido podemos plantearnos tres problemas bsia cos: P1.- Dados dos nodos i y j, determinar el camino dirigido de costo m nimo desde i hasta j. P2.- Dado un nodo i, determinar para todos los nodos j el camino dirigido desde i hasta j de menor costo. P3.- Para todos los pares de vrtices i,j hallar el camino dirigido desde i hasta j de e menor costo. Como en el problema de recorrido de un grafo, todos los mtodos conocidos para e resolver P1 se basan en resolver P2, y claramente resolviendo P2 para todo nodo i resolveremos P3. Para resolver P2, todos los mtodos hacen uso de la siguiente propiedad: e Lema 8 Supongamos que P = (i = i0 , i1 , . . . , il = j) es el camino dirigido de costo m nimo desde i hasta j, entonces para cualquier r,s tal que 0 r s l el camino dirigido (ir , ir+1 , . . . , is ) es el de costo m nimo desde ir hasta is . Dems. Si no lo fuera, sustituyendo en P la secuencia (ir , ir+1 , . . . , is ) por la secuencia (ir , i , . . . , is ) con el camino de costo m nimo de ir a is , obtendr amos un camino de i a r+1 j con costo menor que el m nimo. 2

29

3.1

Mtodo de Dijkstra e

Este es un mtodo para resolver el problema P2, rpido y eciente, pero que slo puede e a o utilizarse si los costos w(i, j) son 0. Notar que en este caso slo tenemos que buscar o caminos simples, sin nodos repetidos, y que el costo de un subcamino (como el del lema previo) es menor o igual que l del camino completo. La forma de resolver P2 se basa en e el siguiente lema: Lema 9 Supongamos que conocemos el camino de costo m nimo desde i a todos los nodos de un conjunto S V . Podemos suponer que esos caminos ptimos slo contienen nodos o o de S. Supongamos que para los nodos j S conocemos un camino dirigido P (j) desde i a j que slo usa como vrtices intermedios nodos de S, y que es de costo m o e nimo de entre los que cumplen esa propiedad. De entre los vrtices que no estn en S, sea j tal que el e a costo de P (j ) sea m nimo. Entonces P (j ) es un camino de costo m nimo desde i hasta . j Dems. Supongamos que en lugar de P (j ) hay otro camino dirigido i = j0 , j1 , . . . , jl = j con un costo estrictamente menor que P (j ). Esto es imposible, pues en la secuencia j0 , j1 , . . . en algn momento nos encontramos con un nodo jr que no est en S, y el costo u a del subcamino hasta ese nodo jr es al menos el costo de P (j ). 2 El lema, nos da una forma de resolver el problema, inicialmente S contiene slamente el o nodo i, y despus en cada paso vamos a adiendo un nodo, el nodo j anterior, al conjunto e n S. Terminaremos cuando S contenga todos los nodos para los que hay camino dirigido desde i. Pero para aplicar este mtodo necesitamos conocer P (j) para los nodos j que no e estn en S, y el conjunto S cambia cada vez. Pero esto es fcil, supongamos que en un a a momento determinado conocemos P (j), y ahora aadimos el vrtice j a S. Cmo puede n e o cambiar P (j)?. Ahora tenemos la posibilidad de usar el nodo j en ese camino dirigido de costo m nimo. Si lo usamos el camino de costo m nimo deber ser P (j ) ms el arco (si a a , j), ya que a j no podemos llegar con menos costo, y para pasar de j a j, no existe) (j podemos usar nodos de fuera de S, y si usamos alg n nodo de S, por hiptesis existe otra u o y con costo menor o igual. Por lo tanto, el nuevo forma de alcanzar ese nodo, sin usar j camino P (j) permanece como antes, es el camino P (j ) junto con el arco (j , j). El o o que tenga menos costo de esos dos, el camino P (j) ya calculado el camino P (j ) + (j , j), o ser el nuevo camino P (j). a Estamos ya en condiciones de describir el algoritmo. Para guardar los caminos ptimos o P (j), slo guardaremos el predecesor del nodo j en ese camino. Guardaremos tamben o el costo c(j) de ese camino. Cuando no exista P (j), pondremos c(j) = , y j no tiene predecesor. Algoritmo de Dijkstra { 1.- (Paso inicial). Hacer S = {i}, c(i) = 0.0, pred(i) = 0. Para los nodos en la lista out de i hacer c(j) = w(i, j), pred(j) = i. Para el resto de nodos j hacer c(j) = . 2.-(Paso genrico). Mientras haya nodos j que no estn en S con c(j) = hacer: e a con c(j ) m en S. Explorar la lista de vecinos out de j . Hallar j nimo. Incluir j Para cada vecino j tal que no est en S y adems c(j ) + w(j , j) < c(j) sustituir c(j) por a a c(j ) + w(j , j) y poner pred(j) = j . 3.-(Paso nal) Los nodos j con c(j) = son para los que existe camino dirigido desde i, el de menor costo cuesta c(j), y el camino ptimo es el contrario de o (j, pred(j), pred(pred(j)), . . . , i). 30

} De forma similar a como hac amos con BFS puede modicarse este algoritmo para calcular los caminos dirigidos de costo m nimo desde j hasta i, los caminos no dirigidos o de costo m nimo desde i a los dems nodos. En particular, tambin sirve para hallar a e caminos de costo m nimo en un grafo no dirigido. Notemos nalmente que podemos implementar nuestro algoritmo, de forma que el nmero de pasos sea O(m + n2 ). El trmino O(m), viene por que recorremos pero una u e sola vez las listas out de vecinos de los nodos. El trmino O(n2 ) viene por que hacemos e O(n) veces la bsqueda del m u nimo de un conjunto de O(n) valores (los c(j)). Hay formas de implementar el mtodo de Dijkstra de forma que el nmero de pasos sea O(m lg(n)) e e u incluso O(m + n lg(n)). En la prctica esas implementaciones slo son mejores si n es muy a o grande y el grafo es poco denso, es decir el nmero de arcos m es mucho menor que n2 . u

3.2

El problema del m nimo rbol spanning. a

Supongamos ahora que G = (V, E) es un grafo no dirigido conexo y cada uno de los ejes e = (i, j) tiene asociado un costo w(i, j) 0. Como el grafo es conexo, podemos alcanzar cualquier nodo desde cualquier otro, pero excepto para el caso de G un rbol, quitando a algn eje tenemos la misma propiedad con un subgrafo de costo menor. El problema que u deseamos resolver es hallar un subgrafo T de G que sea conexo, incluya a todos los vrtices, e y que tenga costo m nimo, siendo el costo de un subgrafo la suma de los costos de los ejes que lo forman. Claramente, si w(i, j) 0 este subgrafo spanning conexo T tiene que ser un rbol, si no lo fuese tendr un eje e que no es puente, y T e ser spanning, conexo a a a y de menor costo. Por ello en lugar de decir que buscamos un subgrafo spanning de costo m nimo, decimos que buscamos un rbol spanning de costo m a nimo un MST (minimum o spanning tree).

10

9 7

7 11 6

10 9

Figure 15: Un grafo con costos y su MST. El siguiente Lema, similar al usado para demostrar la correccin del mtodo de Dijkstra o e permite obtener un MST. Sea Lema 10 Sea G = (V, E) un grafo no dirigido con costos en los ejes. {(V1 , E1 ), (V2 , E2 ), . . . (Vk , Ek )} un bosque spanning de G con k > 1 y sea F = k Ei . i=1 Supongamos que (i, j) es un eje de G, con i V1 , j V1 y de costo m nimo entre los que cumplen esas condiciones. Entonces, de entre los arboles spanning conteniendo todos los ejes de F , hay uno de costo m nimo que contiene al eje (i, j).

31

Dems. Estamos suponiendo que los conjuntos de nodos Vi son disjuntos y su unin es V , o y que cada uno de los conjuntos de ejes Ei E forma un rbol spanning de los vrtices Vi . a e Notar tamb que para transformar ese bosque en un rbol, se necesita aadir k 1 ejes, en a n y que como G es conexo debe existir al menos un eje e = (i, j) de E con un extremo en V1 y el otro no. Supongamos que de entre estos ejes e es el de costo m nimo. Supongamos que ) que contiene a todos los ejes F , que es de costo m existe un rbol spanning T = (V, F a nimo entre los que contienen a F , pero que no contiene el eje e. Por tanto T + e contiene un ciclo C, y adems e est en ese ciclo. Supongamos que el ciclo es i = j0 , j = j1 , j2 , . . . , jl = i. a a Como j1 = j, no es de V1 pero jl = i s que lo es, debe existir un eje e = (jr , jr+1 ) en C tal que jr V1 y jr+1 V1 . Ahora T + e e tiene de nuevo n 1 ejes, y es conexo, puesto que C e nos da una forma de conectar ir con ir+1 . Por tanto es un rbol conteniendo a a e y adems su peso debe ser menor o igual que el de T , pues w(e ) w(e), y por tanto a cumple lo buscado. 2 Podemos usar el lema previo para disear varios algoritmos para calcular el MST de n un grafo G. Uno de ellos el algoritmo de Prim, es casi idntico al mtodo de Dijkstra: e e Algoritmo de Prim { 1.- (Paso inicial). Hacer S = {i}, c(i) = 0.0, pred(i) = 0. Para los nodos vecinos de i hacer c(j) = w(i, j), pred(j) = i. Para el resto de nodos j hacer c(j) = . 2.-(Paso genrico). Mientras haya nodos j que no estn en S hacer: e a con c(j ) m en S. Incluir el par (j , pred(j )) como un eje del Hallar j nimo. Incluir j MST. Explorar la lista de vecinos de j . Para cada vecino j tal que no est en S y adems a a w(j , j) < c(j) sustituir c(j) por w(j , j) y poner pred(j) = j . 3.-(Paso nal) Los pares (j, pred(j)) con j = i proporcionan el MST. } El mtodo funciona ya que inicialmente suponemos el bosque formado por los n rboles e a Ti = (Vi = {i}, Ei = ). Como F = buscar un rbol m a nimo que contenga a F es buscar un MST de G. Por tanto el primer eje e que inclu mos forma parte del MST. (Este primer eje es e = (i, j) con j el vecino de i tal que w(i, j) es m nimo.) Despus buscamos un eje del e rbol m a nimo que contenga a e, que de nuevo ser un MST, y obtenemos un e que forma a parte del MST. En suma, vamos obteniendo ejes con la propiedad de que el m nimo rbol a spanning que los contiene es un MST. Como al nal obtenemos n 1 ejes, necesariamente obtenemos un MST. Hay otra alternativa para construir un MST, denominada mtodo de Kruskal que fune ciona de la siguiente manera: Algoritmo de Kruskal { 1.- (Paso inicial). Formar una lista Q = e1 , e2 , . . . , em con los m ejes en orden creciente de costo, de forma que w(e1 ) w(e2 ) . . . w(em ). Crear una particin P de V , formada o por los n conjuntos disjuntos en vrtices Vi = {i}, y crear una lista F inicialmente vac e a. 2.-(Paso genrico). Mientras F no contenga n 1 ejes hacer: e Elegir el eje e = (i, j) de la lista Q de menor costo y eliminarlo de la lista. Si los extremos i y j de e estn en distintos conjuntos Vi , Vj de la particin P , reemplazar en P a o los conjuntos Vi y Vj por el conjunto Vi Vj , y aadir e = (i, j) a F . n } De nuevo el algoritmo funciona por el lema previo. Inicialmente tenemos un bosque trivial , con F = y el rbol m a nimo que contiene a F debe ser el MST. Cada vez que 32

insertamos un eje en F y recalculamos la particin P , tenemos en F los ejes de un nuevo o bosque tal que el rbol minimo que contiene a todos los ejes de ese bosque es el MST. a Como terminamos con F teniendo n 1 ejes, esos tienen que ser los ejes del MST. El paso mas costoso del anterior algoritmo es la operacin de ordenar los m ejes que o requiere en general (m log m) pasos.

3.3

Algoritmo de Bellman-Ford

El algoritmo de Bellman-Ford permite resolver el problema P2, clculo de caminos dirigidos a de costo m nimo desde i a los dems nodos, incluso cuando algunos de los costos de los a arcos sean negativos. Pero notar que ahora un camino de i a j de costo m nimo no tiene por que ser simple, y que aunque j sea alcanzable desde i no tiene por que haber caminos de costo m nimo. Exactamente tenemos: Lema 11 Dado un grafo dirigido G = (V, A) y un nodo i, sea Vi el conjunto de nodos alcanzables desde i mediante un camino dirigido. Sea Gi el subgrafo inducido por Vi . Entonces existe camino dirigido de costo m nimo desde i hasta j, para todo j Vi si y slo o si Gi no contiene ciclos dirigidos de costo negativo. Dems. Si Gi contiene un ciclo C de costo negativo, y j es un nodo de C, a cualquier camino P desde i hasta j podemos aadirle cuantas veces queramos el ciclo C y obtendremos n caminos dirigidos con costo cada vez menor, no existiendo por tanto uno con costo m nimo. Rec procamente, si Gi no contiene ciclos de costo negativo, cualquier camino dirigido comenzando en i que no sea simple, tiene un costo mayor ( igual) que el camino simple o obtenido quitando los ciclos que contiene. Por tanto para buscar caminos de costo m nimo desde i hasta j, nos basta buscar entre los caminos simples, como de estos siempre hay un nmero nito, existir uno con costo m u a nimo. 2
2 1 s 5 -2 1 t 4 -4 2 2 1 1 -2

2 0

1 2

Figure 16: Un grafo dirigido sin ciclos de costo negativo. El algoritmo de Bellman-Ford se puede aplicar a cualquier grafo dirigido con costos arbitrarios, si Gi no contiene ciclos negativos da una solucin al problema P2, en caso contrario o 33

permite hallar un ciclo dirigido con costo negativo. El mtodo va calculando cual es el e costo de un camino ptimo desde i hasta j para todo j, pero usando l arcos, para o l = 0, 1, . . .. Y se basa en la siguiente observacin: o De entre los caminos dirigidos de i hasta j que usan l arcos, sea l (j) el costo del ptimo de ellos, o el valor si no existen tales caminos. Si el camino usa menos o de l arcos deber ser l (j) = l1 (j), en caso contrario el camino ser de la forma (i = a a j0 , j1 , . . . , jl = j). Pero entonces (i = j0 , j1 , . . . , jl1 ) tiene que ser un camino ptimo para o l (j) = l1 (j llegar a jl1 usando (l 1) arcos, y por tanto en ese caso l1 ) + w(jl1 , j). Por consiguiente si conocemos l1 (k) para todo nodo k, podemos conocer l (j), pues este tendr que ser el m a nimo de los valores l1 (j), min l1 (k) + w(k, j), este segundo m` nimo tomado sobre los valores k tales que (k, j) A, (y por tanto w(k, j) est denido). El a algoritmo es el siguiente: Algoritmo de Bellman-Ford { 1.- (Paso inicial). Suponemos que conocemos las listas de vecinos in de cada nodo, y que los nodos son 1, 2, . . . , n. Hacer l = 0, 0 (j) = para j = i, 0 (i) = 0, pred(i) = 0, jc = i. 2.-(Paso genrico). Mientras l < n y adems jc = 0 hacer: e a jc = 0. Recorrer los n nodos en orden 1, . . . , n. Al explorar el nodo j, buscar entre sus vecinos in el k que minimiza l1 (k) + w(k, j). Si l1 (k) + w(k, j) < l1 (j) hacer jc = j, pred(j) = k y l (j) = l1 (k) + w(k, j). en caso contrario hacer l (j) = l1 (j). Incrementar l en 1. 3.-(Paso nal) Si jc = 0 para los j tales que l (j) = la secuencia (j, pred(j), pred(pred(j)), . . . i) en orden contrario, da el camino ptimo desde i hasta j. o l (j) = no hay camino dirigido desde i hasta ellos. Si por el contrario Para los otros j jc = 0, en la secuencia (jc, pred(jc), pred(pred(jc)), . . .) tiene que aparecer un ciclo de costo negativo. } En el algoritmo jc indica en cada paso l el ultimo nodo tal que su valor l (j) ha sido modicado, y vale 0 si ninguno de esos valores se modica. Notar que si el bucle 2 termina por que jc = 0, quiere decir que todos los valores l (j) coinciden con los l1 (j). Por tanto si siguisemos calculando los valores l (j) para los siguientes valores de l siempre se e repetir los mismos datos, es decir que l (j) efectivamente contiene el costo de un camino an ptimo de i a j cuando permitimos que contenga un nmero arbitrario l de arcos. Por o u el contrario, si el bucle 2 termina con jc = 0, tiene que ser l = n, y como el valor l (jc) se ha modicado es por que existe un amino desde i hasta jc con n arcos, y con costo menor que cualquier otro camino con menos arcos. Pero necesariamente en ese camino debe aparecer un vrtice k repetido, y por tanto la parte del camino de k a k es un ciclo e de costo negativo. Como el proceso realiza una reactualizacin de los valores l (j) un mximo de n veces, o a y en cada reactualizacin se exploran los m vecinos in de los nodos, el proceso realiza o O(nm) pasos. En principio hay que guardar los valores l (j) ( n2 nmeros), pero en u l (j) slo requiere conocer los l1 (j) en realidad con la prctica como el clculo de los a a o guardar O(n) valores en cada iteraccin es suciente. o Pero hay una variante an ms eciente de hacer los clculos, que consiste en utilizar u a a siempre un mismo vector (j). Los pasos ahora son: 34

Algoritmo de Ford { 1.- (Paso inicial). Hacer l = 0,(j) = para j = i, (i) = 0, pred(i) = 0, jc = i. 2.-(Paso genrico). Mientras l < n y adems jc = 0 hacer: e a jc = 0. Incrementar l en 1. Recorrer los n nodos en orden 1, . . . , n. Al explorar el nodo j, buscar entre sus vecinos in el k que minimiza (k) + w(k, j). Si (k) + w(k, j) < (j), hacer jc = j, pred(j) = k y (j) = (k) + w(k, j). 3.-(Paso nal) Si jc = 0 para los j tales que (j) = la secuencia j, pred(j), pred(pred(j)), . . . , i en orden contrario, da el camino ptimo desde i hasta j o y (j) es su costo. Para los otros j (j) = no hay camino dirigido desde i hasta ellos. Si por el contrario jc = 0 ,en la secuencia jc, pred(jc), pred(pred(jc)), . . . tiene que aparecer un ciclo de costo negativo. } Teorema 3.1 El anterior proceso es tambin correcto y su nmero de pasos es O(mn). e u Dems. Basta demostrar que cada vez que comenzamos el paso 2, y tenemos cada vez un valor de l distinto, (j) contiene el costo de un camino ptimo desde i hasta j que usa < l o arcos decrecientes. Diremos que un arco (j , j) es decreciente si j > j y j = i. Para que incluso la primera vez que hacemos el paso 2 sea cierta esa propiedad, hay que suponer que el camino inicial, de longitud nula, sin arcos, usa < 0 arcos decrecientes. El argumento es como antes, si para llegar a j desde i usando < l arcos decrecientes, el camino ptimo usa < l 1 de tales arcos, el valor (j) no ha de cambiarse. Por el o contrario, si hay un camino de menos costo usando l 1 arcos decrecientes, si el ultimo arco (j , j) de ese camino ptimo es no decreciente, es j < j y lo que cuesta llegar a j es o lo que cuesta llegar a j con l 1 arcos decrecientes, ms w(j , j), es decir (j ) + w(j , j), a pues (j ) ya est reactualizado. Por el contrario si j > j, el costo de llegar a j es lo que a cuesta llegar a j con < (l 1) arcos ms w(j , j), pero de nuevo esto es (j ) + w(j , j) a > j, en este caso (j ) a n no est reactualizado. pues al ser j u a 2 El nmero de pasos requeridos por esta variante del algoritmo de Bellman, debida a u Ford, es tambin O(nm). e

3.4

Algoritmo de Ford para DAGs. Planicacin de proyectos. o

Si nuestro grafo de entrada es un DAG, como no puede haber ciclos de costo negativo, el mtodo de Ford siempre encontrar los caminos ms cortos desde el nodo inicial a los e a a dems. Pero adems, si exploramos los nodos siguiendo un orden compatible, que vimos a a en la seccin 2.5 como se se calcula, el mtodo de Ford slo necesita una iteraccin, o e o o pues siguiendo el orden compatible, en cualquier camino de i a j no puede haber arcos decrecientes. Algoritmo de Ford para DAGs{ 1.- (Paso inicial). Hallar un orden compatible para los nodos. Hacer (j) = para j = i, (i) = 0, pred(i) = 0. 2.-(Paso genrico). Explorar siguiendo el orden compatible los nodos posteriores a i. e Al explorar el nodo j, buscar entre sus vecinos in el vecino k que minimiza (k) + w(k, j). Si (k) + w(k, j) < (j), hacer pred(j) = k y (j) = (k) + w(k, j).

35

} Al terminar este proceso, (j) contiene la longitud del camino ms corto de i a j, a o el valor si j no es alcanzable desde i. El vector pred contiene el rbol de caminos a ms cortos, y la secuencia j, pred(j), pred(pred(j)), . . . , i en orden contrario, da el camino a ptimo desde i hasta j. o Notar que los costos w(i, j) pueden tener signo arbitrario, el algoritmo siempre hallar a la solucin correcta, por tanto tambin sirve para calcular los caminos de costo mximo, o e a pues estos son los caminos de costo m nimo usando como nuevos pesos w(i, j) = w(i, j), equivalentemente, calculamos los caminos de costo mximo sustituyendo el anterior paso o a 2 por: 2.-(Paso genrico). Explorar siguiendo el orden compatible los nodos posteriores a i. e Al explorar el nodo j, buscar entre sus vecinos out el k que maximiza (k) + w(k, j). Si (k) + w(k, j) > (j), hacer pred(j) = k y (j) = (k) + w(k, j). Aunque pueda parecer que el clculo de los caminos de costo mximo no tiene ningn a a u inters, en lo que sigue de esta seccin vamos a ver una aplicacin muy interesante. e o o En la realizacin de proyectos complicados, como construir una urbanizacin, una presa, o o un nuevo modelo de avin,.. requieren una perfecta sincronizacin entre las distintas fases o o o del proyecto, de forma que se eviten sobre todo costosas prdidas de tiempo. Los problemas e relacionados con esta labor de coordinacin de trabajos se suelen llamar problemas de o planicacin (scheduling problems), y esencialmente se reducen a, dado un proyecto que o exige la ejecucin de muchas tareas sujetas a muchas restricciones entre ellas, encontrar el o orden y el momento ms adecuado para realizar cada una de las tareas. a Vamos a ver cmo se puede resolver el llamado problema central de planicacin, en el o o cual las unicas restricciones entre las tareas de un proyecto son las de orden en el tiempo, restricciones del tipo la tarea j no puede empezar hasta que la tarea i ha terminado. Por ejemplo, supongamos un proyecto que para su realizacin requiere realizar 12 taro eas, A, B, C, D, E, F, G, H, I, J, K, L. La siguiente tabla da, en la columna duracin, una o estimacin del nmero de d que se requieren para realizar cada tarea, y en la columna o u as Predecesores las tareas que necesariamente tienen que hacerse antes que ella, por ejemplo antes de empezar la tarea D, se tienen que haber realizado las tareas E, C y F . Proyecto 1 Predecesores Duracin o 60 H 55 B 15 E,C,F 50 A 50 H,A 40 C,D 30 30 F,B 25 G 25 I 20 G,K 50

Act. A B C D E F G H I J K L

36

Podemos mirar esa tabla como un grafo dirigido con nodos A, B, . . . , L, y donde la lista de predecesores de una tarea dada indica la lista de vecinos in de ese nodo. Ese grafo necesariamente tiene que ser un DAG, es decir no puede contener ciclos dirigidos pues si hubiese un ciclo es imposible cumplir las restricciones dadas. Es posible que algunas de las restricciones sean superuas, por ejemplo en la tabla anterior, la conexin desde el nodo C o al nodo G es innnecesaria: Puesto que antes que G ha de hacerse D y antes que D ha de hacerse C tambin ha de ser verdad que antes de G se haya hecho C, y por tanto aunque e eliminemos esa restriccin (es decir eliminamos el eje (C, G) del grafo) el resultado debe o ser el mismo. Puesto que el grafo es un DAG podemos, usando el mtodo de la Seccin 2.5, clasicar e o sus nodos en etapas o fases. En nuestro ejemplo, en la fase 1 estn los nodos A y H (los a que tienen listas in vacias), si los quitamos de las lista in aparecen nuevas listas vac as, las de B, E y F , que son los nodos de la fase 2, y repetimos ese proceso, si quitamos los nodos de la fase k 1 los nodos cuyas listas pasan a ser vac forman la fase k. as, Queremos planicar el proyecto de forma que se realice en el menor tiempo posible, y por tanto hemos de calcular para cada una de las tareas, cundo puede comenzar a a realizarse como muy pronto. Estas fechas de comienzo de cada tarea se suelen denominar fechas tempranas de comienzo, y denotaremos por t(i) la fecha temprana de comienzo de la tarea i y por d(i) la duracin de esa tarea. Veamos cmo calcularlas en el ejemplo o o anterior. En primer lugar vamos aadir al grafo dos nodos, el nodo Inicio y el nodo F inal. n El nodo Inicio podemos mirarlo cmo la tarea de comenzar, o empezar, su duracin es 0, o o y como ha de realizarse antes que cualquier otra tarea, podemos suponer que aparece como predecesor de todas las tareas, pero en realidad nos basta ponerlo como predecesor de las tareas que no requieren otras previas (las tareas A y H en nuestro ejemplo), pues ponerlo en otras listas de predecesores es superuo. Igualmente, la tarea F inal, indica la tarea de n de proyecto, de entrega de llaves, y por tanto ha de hacerse despus de terminar e todas las dems tareas y su duracin tambin ser 0. De nuevo, esta tarea F inal deber a o e a a tener como predecesores todas las dems tareas, pero nos basta poner como predecesores a las tareas que no aparecen como necesarias para otras, en nuestro ejemplo las tareas J y L ( las unicas que no aparecen en la columna Predecesores de la tabla anterior). Este grafo ampliado, de nuevo es un DAG, con el nodo Inicio en una fase 0, y si antes hab a k fases el nodo F inal en la fase k + 1. En el ejemplo, est claro que si suponemos que a el comienzo de la tarea Inicio es el momento 0, las tareas A y H pueden comenzar en ese mismo instante 0, la H acabar 30 unidades de tiempo despus del comienzo, la A a e 60 d despus de ese comienzo. Pero esto nos permite calcular las fechas tempranas de as e comienzo de las tareas B, E y F de la fase 2. B puede comenzar 30 d despus de la as e fecha de comienzo, pero E, F no pueden empezar hasta 60 d despus del comienzo pues as e hasta entonces no ha terminado la tarea A. En general, si conocemos las fechas tempranas de comienzo de las tareas de las fases 0, 1, . . . , k 1, para conocer la fecha temprana de comienzo de una actividad i de la fase k, buscamos la tarea j A (i) que haga t(j) + d(j) mximo, es decir a t(i) = max (t(j) + d(j))
jA (i)

La gura siguiente muestra el DAG correspondiente al ejemplo anterior junto con un nmero en cada nodo que nos da la fecha temprana de comienzo, el nmero de d que u u as deben pasar desde Inicio para que cada actividad pueda comenzar. Podemos notar lo siguiente: - La duracin m o nima del proyecto total ser t(F inal), la fecha temprana de comienzo a

37

30

85

110

190

A
0

B
60

D
160

J
240

Ini
0

E
60 100 125

G
190

F in

Figure 17: DAG del proyecto, fechas tempranas de comienzo y camino cr tico. del nodo F inal (240 d en nuestro ejemplo). as - Si suponemos que en el DAG correspondiente a un proyecto, el costo del arco (j, i) es la duracin d(j), (es decir todos los arcos saliendo del nodo j tienen costo d(j), las fechas o tempranas t(i) corresponden a la longitud del camino ms largo desde Inicio al nodo a i, y el mtodo de clculo es precisamente el mtodo de Ford aplicado a DAGs. Si cuando e a e calculamos t(i) es j la tarea de A (i) que hace t(j) + d(j) mximo, si aadimos un vector a n de marcas, poniendo marca(i) = j (y marca(Inicio) = 0), el vector marca contiene el rbol de caminos ms largos desde Inicio a los dems nodos. a a a - En particular, la duracin del proyecto es el camino ms largo o a desde el nodo Inicio al nodo F inal en ese DAG, y la secuencia F inal, marca(F inal), marca(marca(F inal)), . . . , Inicio en orden contrario, da ese camino ms largo desde Inicio a F inal, que se denomina camino cr a tico. En nuestro ejemplo ese camino cr tico lo forman los nodos Inicio, A, E, D, G, L, F inal. Las tareas del camino cr tico se denominan tareas cr ticas, cualquier retraso en el comienzo en la realizacin de cualquiera de esas tareas produce un retraso de la misma o o magnitud en el tiempo de terminacin del proyecto. Notar que, aunque en la prctica no o a es frecuente, puede haber varios caminos con la misma longitud y por tanto varios caminos cr ticos. Para las tareas que no estn en un camino cr a tico, si se retrasa su comienzo su o realizacin, es posible que la duracin del proyecto total no se retrase, pero esto depende o o de la magnitud del retraso. Lamaremos holgura de una tarea, al retraso mximo que a puede tener esa tarea de forma que la duracin total del proyecto no se retrase. Para o calcular la holgura nos basta calcular las llamadas fechas tard de comienzo, T (i), as son las mximas fechas tales que si la tarea i comienza en esa fecha (y el resto de tareas a en su fecha temprana) el proyecto no se retrasa. Est bastante claro que la holgura de la a tarea i ser la diferencia T (i) t(i), y que T (i) = t(i) para las tareas cr a ticas. Veamos como calcular T (i) en nuesto ejemplo. Para ello exploramos los nodos en orden de fase desde la ultima fase hasta la primera. En ese orden, la primera tarea con holgura es la J y T (J) = 215, ya que si J comenzase ms tarde, como su duracin es 25, el proyecto durar a o a > 215 + 25 = 240, es decir sufrir retrasos. Igualmente, en el ejemplo, T (K) = 170, si K a empezase ms tarde, la actividad L deber empezar despus de 170 + 20 = 190 = T (L), a a e es decir se produce un retraso. En general para calcular T (i), buscamos el j A+ (i) que haga M injA+ (i) (T (j) d(i)) = M injA+ (i) (T (j)) d(i)

38

entonces hacemos T (i) = T (j) d(i) (y marca2(i) = j). En palabras, para calcular T (i) buscamos las tareas que la tienen como predecesor (la lista A+ (i)), para todas esas tareas j ya conocemos T (j), buscamos cul es el m a nimo de esos valores T (j), restamos d(i) a ese m nimo y ese es el valor de T (i). Notar que si comenzamos la tarea i ms tarde de T (i) a entonces alguna de las actividades j comienza ms tarde de T (j), produciendo retrasos. a La siguiente gura da las fechas tard de comienzo del DAG anterior y resalta los as arcos (i, marca2(i)). Podemos notar que el vector marca2 especica el rbol de los caminos a ms largos desde cada nodo al nodo F inal, de nuevo los hemos obtenido por el mtodo de a e Ford para DAGs.
0 40 95 110 215

A
0

B
60

D
160

J
240

Ini
10

E
115 155 170

G
190

F in

Figure 18: Fechas tard de comienzo y rbol dirigido de fechas tard as a as. Hay otros mtodos para resolver este problema de planicacin central, pero el enfoque e o utilizado aqui tiene muchas ventajas. Por ejemplo supongamos que adems de las dadas, a tenemos restricciones de los siguientes tipos: 1.- La tarea i no puede comenzar hasta pasados r(i) d del inicio. as En este caso basta a adir un arco de costo r(i) desde Inicio a i. n 2.- La tarea j no puede empezar hasta r(j) d despus de que termine la i. as e En este caso el arco desde i a j tendr de costo d(i) + r(j) (vlido aunque r(j) sea a a negativo). 3.- la tarea i debe terminar antes de r(i) d desde el inicio. as Esta condicin slo cambia las fechas tard de comienzo, y por tanto las holguras. o o as El proceso se hace igual salvo que si el valor obtenido para T (i) es mayor que r(i) d(i), ponemos como nuevo T (i) ese segundo valor. Hay sin embargo restricciones bastante frecuentes ms dif a ciles de manejar, por ejemplo las del tipo la tarea i no puede hacerse a la vez que la tarea j, y por tanto i se hace antes o que j j antes que i. o El mtodo que hemos usado para resolver el problema central de planicacin suele dee o notarse por las siglas CP M , acrnimo de Critical Path Method. El conjunto de tcnicas o e para resolver este tipo de problemas de planicacin suele denotarse bajo las siglas mtoo e dos PERT mtodos PERT-CPM, dnde PERT es un acrnimo de Program Evaluation o e o o and Review Technique. En la prctica, uno de los mayores problemas que se presentan es a que la duracin de cada una de las tareas suele ser una cantidad bastante incierta, con lo o cual todos los clculos tienen un punto de incertidumbre. Pero el mtodo CPM es espea e cialmente util en esos casos, pues siendo tan rpido de ejecucin y tan fcil de programar, a o a normalmente no se resuelve un slo caso sino que se simulan millones de ellos, es decir o sorteamos las duraciones de las distintas actividades, (por ejemplo la duracin de la tarea o A, en lugar de 60 podemos suponer que sigue una ley uniforme [50, 70], o una ley normal 39

de media 60 y varianza 10, o cualquier otra distribucin razonable, y se sortea un valor o siguiendo esa ley, y lo mismo para el resto de actividades), y hacemos estad sticas sobre la duracin media del proyecto, las fechas probables de comienzo, las holguras etc. o

3.5

Hallar todos los pares de caminos ptimos o

Una forma de resolver el problema P3, es resolver P2 para todos los nodos i. Sin embargo hay alternativas ms sencillas para resolver P3. Una de ellas se basa en calcular las a (l) cantidades ij denidas como el costo de un camino dirigido ptimo desde i hasta j pero o tal que todos los nodos intermedios del camino (otros que i j) estn en el rango [1, l]. o a (0) Por denicin ij = w(i, j) si (i, j) es un arco de G, y vale en los dems casos. La o a observacin clave es que o ij = min(ij
(l) (l1)

, il

(l1)

+ lj

(l1)

)
(l) (l1)

Notar adems que si el grafo no contiene ciclos de costo negativo, entonces il = il , a (l) (l1) e igualmente lj = lj . Adems si hay un ciclo C de costo negativo que usa el nodo a k, pero en los k 1 primeros nodos no hay un ciclo negativo, los valores ij estarn bien a denidos si l < k, pero si i C, entonces ik + ki tiene que ser < 0. Estas observaciones nos permiten dar el siguiente algoritmo, conocido como algoritmo de Floyd-Warshall para hallar los costos de todos los pares de caminos ptimos. Si quereo mos conocer todos los caminos, necesitamos para cada j conocer su predecesor en el camino de i hasta j. Por ello necesitamos una matriz predi (j). Algoritmo de Floyd-Warshall { 1.- (Paso inicial). Hacer ij = w(i, j), predi (j) = i si (i, j) es un arco de G. Hacer ii = 0, ij = y predi (j) sin denir en todos estos casos. 2.-(Paso genrico). Para los valores l desde 1 hasta n hacer: e Para los valores i desde 1 hasta n hacer: Si il = pasar al siguiente i. Si il + li < 0 terminar. Detectado ciclo negativo. En los dems casos, para j desde 1 hasta n hacer: a Si il + lj < ij hacer ij = il + lj y predi (j) = predl (j) 3.-(Paso nal) Si se ha terminado con l n, entonces l, predi (l), predi (predi (l)), . . . , i junto con i, predl (i), predl (predl (i)), . . . , l ambas en orden contrario, forman un ciclo negativo. Si por el contrario l = n + 1, para todo i, y para todo j, si ij = no existe camino dirigido desde i hasta j. En los dems casos j, predi (j), predi (predi (j)), . . . , i, en orden a contrario es el camino de menor costo desde i hasta j, y ij es su costo. } El anterior algoritmo realiza O(n3 ) pasos. Requiere O(n2 ) posiciones de memoria.
(k1) (k1) (l)

40

Problema de mximo ujo en una red a

Generalmente cuando por los arcos o conexiones de un grafo circula algn producto (elecu tricidad, coches, bits, ...), suele usarse la palabra red en lugar de grafo, as hablamos de red elctrica, de carreteras, de ordenadores,.... Imaginemos ahora una tal red donde un e material uye a travs de la red desde una fuente (u origen) donde es producido hasta e otro punto, el destino, donde es consumido. Suponemos que en la fuente el material se produce a un ritmo constante (tantas unidades por segundo), y por tanto es consumido en el destino a ese mismo ritmo. Cada arco de la red puede considerarse como un conducto por el que circula ese material, y el ujo de ese conducto es intuitivamente el ritmo al que ese material pasa por l. Podemos suponer que cada conducto de la red tiene asociado e un l mite de capacidad, una razn mxima para la cantidad de material que puede circular o a por l, tal como 20 amperios de corriente elctrica, 60 coches por minuto, 100000 bits e e o o por segundo. Los vrtices del grafo distintos de la fuente y el destino, pueden considerarse e como lugares donde se unen varios conductos, y por tanto el material que llega a esos lugares debe salir de all al mismo ritmo que entra. Llamaremos a esta propiedad ley de conservacin del ujo tambien denominada Ley de conservacin de corrientes de Kircho, o o que fu el primero que enunci formalmente esta ley para corrientes elctricas. e o e El problema de mximo ujo en una red es el ms simple para una red por la que circula a a un material. Pide calcular cual es el mximo ritmo al que el material puede ser producido a (y por tanto consumido) sin violar las restricciones de capacidad de los conductos. Este problema, originalmente para una red ferroviaria, fu planteado en 1955 a los padres e de la teor de ujo en redes, L. R. Ford y D. R. Fulkerson. Aunque aparentemente es a un problema muy particular, veremos varias extensiones y aplicaciones. Veamos ahora la denicin formal de este problema. o e Denicin 11 Una red de ujo es un grafo G = (V, A) simple, conexo, con dos vrtices o distinguidos s (la fuente u origen) y t (el destino nal), donde cada arco (i, j) A o tiene asociado un nmero no negativo c(i, j) 0 llamado capacidad de ese arco. u Podemos mirar la capacidad c como una aplicacin de A en R+ , pero tambin considerando o e c(i, j) = 0 cuando (i, j) A como una aplicacin de V V en R+ . o Denicin 12 Un ujo sobre la red de ujo G es una aplicacin f de V V en R o o cumpliendo las siguientes dos restricciones: 0 f (i, j) c(i, j), (i, j) V V
jV

f (i, j) =

jV

f (j, i), i V {s, t}

La primera restriccin suele denominarse restriccin de compatibilidad, y la segunda de o o conservacin del ujo. El valor de un ujo f se dene como o v(f ) = f (s, j) f (j, s)
jV jV

es decir, es el ujo neto que sale de s.

41

10 9 20 s 15 8 10 6 10 10 s 6 6 4 5 7 8 8 4 4 5

9 6 8 2 6 1 6 5 3 6 6 3 13 t 7 6 20 15 t

Figure 19: Una red de ujo y un ujo compatible. El problema de mximo ujo consiste en dada una red de ujo calcular un ujo a f con valor v(f ) mximo. Notar que si miramos las cantidades a calcular f (i, j) como a variables, este es un problema de programacin lineal. o Dados X V, Y , denotaremos por f (X, Y ) (e igualmente por c(X, Y )) la cantiV dad iX,jY f (i, j) ( iX,jY c(i, j)). Entendemos que esa suma vale 0 si X Y es el o conjunto . Tambin si X Y solo contienen un elemento usaremos ese elemento para e o denotar el conjunto. Asi escribiremos la restriccin de conservacin del ujo como o o f (i, V ) = f (V, i), i = s, t Podemos comprobar que con esta notacin se cumple que o f (X Y, Z) = f (X, Z) + f (Y, Z) f (X Y, Z) e igualmente f (Z, X Y ) = f (Z, X) + f (Z, Y ) f (Z, X Y ) e idnticas reglas para la funcin c. Por tanto sumando las n 2 restricciones de ujo e o tenemos que f (V {s, t}, V ) f (V, V {s, t} = 0, y si aadimos la denicin de v(f ), ha n o de ser f (V t, V ) f (V, V t) = v(f ) Como adems f (V, V ) = f (t (V t), V ) = f (t, V ) + f (V t, V ) y por idntico a e argumento tambin f (V, V ) = f (V, t) + f (V, V t), tiene que cumplirse que e f (V, t) f (t, V ) = f (V t, V ) f (V, V t) = v(f ) es decir el ujo neto que entra a t coincide con el ujo neto que sale de s. Por (X, Y ) denotaremos al conjunto de arcos que tienen el extremo inicial en algn u i X y el nal en algn j Y . Notar que f (X, Y ) ( c(X, Y )) es la suma de los valores u o de f ( c) en esos arcos. Finalmente usaremos X para denotar el conjunto complementario o de X. 42

Denicin 13 Dada una red de ujo G, un corte separando s de t, es un conjunto de o arcos (X, X) donde s X y t X. A la cantidad c(X, X) le llamaremos capacidad del corte (X, X). Podemos observar que dado un corte cualquiera (X, X) cualquier camino dirigido desde s a t contiene un arco del corte, pues si el camino es s = i0 , i1 , . . . , ih = t en algn momento u el siguiente de un vrtice de X tiene que ser de X. Por tanto si en la red quitamos esos e arcos no podemos enviar material desde s a t. Intuitivamente, tambin parece claro que e no podemos enviar ms material que el que cabe por esos arcos del corte. El siguiente a lema formaliza esa idea. Lema 12 Sea G una red de ujo, f un ujo sobre esa red, y (X, X) un corte cualquiera. Entonces v(f ) = f (X, X) f (X, X) c(X, X) Dems. Puesto que f es un ujo satisface: f (s, V ) f (V, s) = v(f ) f (i, V ) f (V, i) = 0, i = s, t f (t, V ) f (V, t) = v(f ) Sumando esas igualdades para los elementos de X, y puesto que s X pero t X obtenemos v(f ) = f (X, V ) f (V, X) Pero f (X, V ) f (V, X) = f (X, X X) f (X X, X) = = f (X, X) + f (X, X) (f (X, X) + f (X, X)) = f (X, X) f (X, X) y obtenemos la igualdad del enunciado. Como adems siempre 0 f (i, j) c(i, j), ha de a ser 0 f (X, X) c(X, X) de donde se sigue la desigualdad del enunciado. 2

Observar que si encontramos un ujo f y un corte (X, X) que cumplan v(f ) = c(X, X), necesariamente ese ujo es mximo, ese corte es m a nimo, adems debe ser f (X, X) = a y f (X, X) = 0, es decir por los arcos de (X, X) circula un ujo igual a su ca c(X, X) pacidad, y por los arcos de (X, X) no circula ujo. Dado un ujo f , los arcos (i, j) que cumplen f (i, j) = c(i, j) decimos que estn saturados, y los que cumplen f (i, j) = 0 a decimos que son nulos. Denicin 14 Sea f un ujo denido sobre la red G. Un camino de aumento para el o ujo f es un camino no dirigido desde s hasta t, tal que los arcos hacia adelante en el camino son no saturados y los arcos hacia atrs son no nulos. a Lema 13 Sea f un ujo sobre la red G. Si existe un camino de aumento para f , entonces existe otro ujo f sobre G tal que v(f ) > v(f ).

43

Dems. Sea P un camino de aumento para f , P = (s = i0 i1 i2 . . . ik . . . ih = t) . Sea 1 = min (c(il1 , il ) f (il1 , il )) tomado sobre los arcos hacia adelante il1 , il del camino P . Igualmente sea 2 = min f (il , il1 ) tomado sobre los arcos hacia atrs il1 il del camino P , y sea a = min (1 , 2 ) Denamos f de V V en R de la siguiente forma: f (i, j) + si (i, j) es arco hacia adelante en P f (i, j) = f (i, j) si (i, j) es arco hacia atrs en P a f (i, j) en los dems casos a Claramente f cumple la restriccin de compatibilidad, el ujo se puede incrementar en o 1 , pero slo en arcos con al menos esa holgura, y puede disminuir en pero slo en o o arcos por los que circula al menos 2 ujo. En cuanto a la ley de conservacin de ujo, evidentemente f cumple esa ley para o vrtices i que no estn en P pues en todos los arcos adyacentes a i, f coincide con f . Si e a i = s, t est en P , puede que los arcos incidentes a l en el camino sean hacia adelante o a e hacia atrs, y tenemos las cuatro posibilidades a i , i , i , i En el caso primero, el nuevo ujo que entra a i y el que sale de i se obtienen incrementando en el ujo previo f , por tanto el nuevo ujo f cumple tambin la ley de conservacin e o en este nodo i. Igualmente en el caso cuarto esos ujos que entran y salen de i son los anteriores menos , y por tanto lo que entra sigue siendo igual a lo que sale. Finalmente, en el caso dos, se modica el ujo que entra a i en dos arcos, en uno aumenta en y en otro disminuye en esa misma cantidad, por tanto no cambia el total de lo que entra y sale de i. Lo mismo sucede en el caso tercero. Por lo tanto tenemos que f es un ujo. Adems es v(f ) = v(f ) + pues si el arco inicial del camino P es hacia adelante, s , a lo que sale de s se incrementa en y lo que entra a s no cambia, y si ese arco inicial es hacia atrs, s , lo que entra en s disminuye en , lo que sale no cambia, y por tanto el a ujo neto que sale de s aumenta en . 2 El lema previo es la base del mtodo de Ford-Fulkerson para hallar un ujo mximo: e a Algoritmo de Ford-Fulkerson { 1.- (Paso inicial) Comenzar con un ujo inicial cualquiera f0 , por ejemplo con el ujo nulo f0 (i, j) = 0, (i, j). l = 0 2.- (Paso genrico) Buscar un camino de aumento para fl . Si existe camino de aumento e para fl , obtenemos otro ujo fl+1 tal que v(fl+1 ) > v(fl ). Hacer l = l + 1 y repetir el proceso. Si no existe camino de aumento terminar. El ultimo ujo obtenido es el ptimo. o } No esta claro sin embargo que este proceso que va produciendo ujos con valores cada vez mayores tenga que terminar. De hecho Ford y Fulkerson mostraron ejemplos en los que este proceso no termina nunca. Sin embargo, tambien observaron el siguiente resultado, que aunque obvio, se conoce con el nombre de teorema de integralidad. 44

Teorema 4.1 Sea G una red de ujo con capacidades c(i, j) enteras. Entonces, comenzando con el ujo nulo, el proceso anterior siempre termina y adems los valores fk (i, j) a en todo el proceso son siempre enteros. Dems. Basta notar que si los valores de fi son enteros y existe camino de aumento para fi , 1 , 2 y son enteros mayores que 0, por tanto tambin los valores de fi+1 son enteros, y e v(fi+1 ) v(fi ) + 1. Como inicialmente f0 es entero, todos los fi deben ser enteros. Como adems cualquier corte, por ejemplo el (s, V s), tiene capacidad nita c(s, V s), y el a valor del ujo aumenta en al menos 1 en cada iteraccin, por el Lema 1, a lo ms podemos o a hacer c(s, V s) pasos. 2 Aunque suponiendo capacidades enteras, este proceso de obtener ujos con valor mayor termine siempre, el nmero de iteracciones que precisa depende de cual es el mtodo que u e usamos para seleccionar los caminos de aumento. Por ejemplo, si en el grafo de la gura , damos capacidad entera M a los arcos (s, 1), (s, 2), (1, t), (2, t), y capacidad 1 al arco (1, 2)
1 M s M 2 1 M M t

si vamos alternativamente eligiendo los caminos de aumento s 1 2 t y s 2 1 t el proceso termina despus de 2M iteracciones. En cambio si hubisemos elegido primero e e el camino de aumento s 1 t y despus el e s 2 t obtenemos el mismo ujo nal en slo dos iteracciones. o Para seleccionar un camino de aumento desde s a t lo ms sencillo es utilizar el mtodo a e BFS que adems proporciona un camino de aumento de longitud (nmero de arcos) m a u nima. La unica variacin que tenemos que hacer sobre el mtodo BFS usado para hallar o e caminos no dirigidos, es tener en cuenta que los arcos out slo pueden ser utilizados si o no estn saturados, y los in slo si el ujo que circula por ellos es no nulo. a o El proceso es el siguiente: Comenzamos marcando el nodo s, por ejemplo le ponemos como marca el valor t, lo ponemos en la lista de nodos a explorar, y exploramos los vecinos out de s; a los que no estn marcados y adems con ujo no saturado, les ponemos la e a marca s y los inclu mos en la lista. Despus exploramos los vecinos in de s, y los no e marcados y adems con ujo no nulo, los inclu a mos en la lista y les ponemos la marca s. Seguimos realizando este proceso de exploracin de vecinos para cada uno de los elementos o 45

de la lista, cuando exploramos los vecinos out del nodo i, los no marcados y no saturados los inclu mos en la lista y los marcamos con i, y de los vecinos in, los no marcados y con ujo no nulo los inclu mos en la lista y los marcamos con i . Este proceso termina bien cuando se llega a marcar t, bien cuando ya se han explorado todos los nodos de o o la lista. En el primer caso, cuando llegamos a marcar t, las marcas nos indican un camino de s a t. Si la marca de t es i nos indica que hay un camino de aumento hasta t, tal que su ultimo arco es i t; y si la marca es i, hay un camino de aumento cuyo ultimo arco es i t. Pero a su vez la marca puesta en i, nos dice cual es el vrtice anterior a e i en ese camino de aumento, y si la conexin es con un arco hacia adelante hacia atrs. o o a Podemos proseguir con este proceso de exploracin de las marcas hasta llegar a s y por o tanto obtener un camino de aumento de s a t. Por el contrario si el proceso termina y t no est marcado, lo que contiene la lista es el conjunto de nodos para los cuales s existe a un camino de aumento desde s a esos nodos. Edmonds y Karp demostraron el siguiente resultado: Teorema 4.2 Sea G un grafo de ujo con n vrtices y m arcos. Comenzando con el e ujo nulo, y determinando los caminos de aumento por el mtodo BFS, el nmero de e u iteracciones que realiza el mtodo de Ford-Fulkerson es siempre menor que nm. e Dems. Sean f y f dos ujos consecutivos obtenidos por este mtodo. Sean l(i), l (i) las e longitudes de un camino de aumento de longitud m nima desde s hasta i segn estemos u con el ujo f o con el f (o el valor si no existe ese camino). Sea P = (s = i0 i1 . . . ih1 ih ) un camino de aumento en f . a) Supongamos que el ultimo arco de ese camino P es hacia adelante, el arco (ih1 (i ih ), y por tanto f h1 , ih ) < c(ih1 , ih ). Si fuese f (ih1 , ih ) = c(ih1 , ih ) como en f es menor, la unica opcin es que el arco (ih1 , ih ) se us como arco hacia atrs en el camino o o a que permiti obtener f desde f , y por tanto que l(ih1 ) = l(ih ) + 1. Por el contrario si o tambin f (ih1 , ih ) < c(ih1 , ih ) necesariamente l(ih ) l(ih1 ) + 1, y tendremos igualdad e slo si hay un camino de aumento en f desde s a ih , de longitud m o nima, que llega a ih . con la misma conexin (ih1 ih ) que P o b) Lo mismo sucede si el ultimo arco de P es hacia atrs, el arco (ih1 ih ), y por a tanto f (ih , ih1 ) > 0. De nuevo si f (ih , ih1 ) = 0, necesariamente (ih , ih1 ) se ha usado como arco hacia adelante en el camino que permite obtener f desde f y por tanto l(ih1 ) = l(ih ) + 1. Por el contrario si tambin f (ih , ih1 ) > 0 necesariamente l(ih ) l(ih1 ) + 1, e y tendremos igualdad slo si hay un camino de aumento en f desde s a ih , de longitud o m nima, que termina como el P , con la conexin (ih1 ih ). o Por lo tanto siempre l(ih ) l(ih1 ) + 1 y si hay igualdad hay un camino (en f ) de longitud m nima que llega a ih desde ih1 exactamente como se hac en P . a Supongamos que l (t) = k y que P = (s = i0 i1 . . . ik = t) es un camino de aumento de longitud m nima en f . Usando la desigualdad anterior tenemos l (t) = k = 1 + 1 + 1 + . . . 1 l(i1 ) l(i0 ) + l(i2 ) l(i1 ) + . . . l(ik ) l(ik1 ) = l(t) l(s) Por tanto siempre l(t) l (t) = k. Supongamos ahora que l (t) = l(t) = k y sea F el conjunto de arcos que aparecen en algn camino de aumento (de s a t) en f de longitud k, e igualmente sea F el conjunto de u 46

arcos en caminos de aumento (de s a t) de longitud k en f . Si es ih cualquier nodo (= s) de P , como l(ih ) l(ih1 ) = 1 tiene que ser que la misma conexin para pasar de ih1 a o , puede usarse para pasar de i ih usada en P h1 a ih en un camino de aumento de longitud m nima en f . Y como esto es cierto para todo ih = s, ese camino P tambin es un camino e de aumento para f , y como esto es cierto para cualquier P de longitud m nima, tiene que ser F F . Pero adems si un arco (i, j) se usa en un camino de aumento m a nimo como arco hacia adelante (luego l(j) = l(i) + 1), no puede suceder que aparezca como un arco hacia atrs a en otro camino m nimo (pues entonces l(j) = l(i) + 1), y viceversa. Pero como al pasar de f a f hemos usado un camino de aumento m nimo P , o bien hemos saturado un arco (i, j) de ese camino, y ya no podremos usarlo en F , o bien hemos puesto a 0 el ujo de un arco de P , y de nuevo ese arco no puede usarse en F . Por tanto F est contenido a estrictamente en F . Finalmente, dado k, de lo anterior deducimos que l(t) = l (t) = k como mximo podr a a vericarse m k veces. Por otra parte k es el nmero de arcos de un camino de aumento u (simple) de s a t y por tanto 1 k n1. Por tanto como mucho haremos (mn/2)(n1) iteracciones. 2 Estamos ya en condiciones de demostrar el llamado Teorema de mximo ujoa m nimo corte Teorema 4.3 Sea G un grafo de ujo. El valor mximo de v(f ) tomado entre todos los a posibles ujos f es igual al m nimo de c(X, X) tomado entre todos los cortes (X, X). Dems. Por el Lema 1, basta obtener un ujo f y un corte (X, X) tales que el valor del ujo iguale a la capacidad del corte. Sea f0 un ujo cualquiera y vayamos obteniendo mediante el mtodo de los caminos de aumento ujos f0 , f1 , . . . , fk , cada vez con valor e mayor. Como hemos indicado previamente este proceso termina siempre si usamos el mtodo BFS para determinar los caminos de aumento. Sea fk el ultimo ujo obtenido. e Sea entonces X = {i V existe camino de aumento desde s a i}. (Es decir X es el conjunto de vrtices que se marcan cuando usamos el mtodo BFS con el ujo nal fk ). e e Claramente s X y por ser el ultimo ujo t X. Adems cualquier arco de (X, X) est a a al explorar saturado con el ujo fk , pues si existiese (i, j) no saturado con i X y j X, la lista de vecinos out de i deber amos haber marcado el nodo j. Por tanto debe ser fk (X, X) = c(X, X) Igualmente, cualquier arco de (X, X) debe llevar ujo nulo, pues si existiese un arco (j, i) e i X, al explorar la lista de vecinos in de i se habr marcado el no nulo con j X a nodo j. Por tanto fk (X, X) = 0 Luego v(fk ) = fk (X, X) fk (X, X) = c(X, X) 2 Notar que el teorema anterior nos dice que si a partir de cualquier ujo f0 , mediante el mtodo de los caminos de aumento vamos obteniendo ujos con mayor valor, cuando e este proceso termina, el ujo obtenido es mximo y el conjunto de vrtices marcados en a e el ultimo paso nos da un corte m nimo, es decir tenemos un algoritmo para calcular un 47

ujo de mximo valor y un corte de capacidad m a nima simultneamente, y adems esos a a dos valores coinciden. Las siguientes consecuencias son tambin inmediatas: e Corolario 7 Un ujo f es mximo si y slo si para ese ujo no existe un camino de a o aumento de s a t. Dems. Si f es mximo, por el Lema 2, no puede existir un camino de aumento para f . a Rec procamente, si para f no existe camino de aumento de s a t. Sea, como en el teorema previo, X = {i V existe camino de aumento desde s a i}. Los mismos razonamientos anteriores muestran que v(f ) = c(X, X), y por tanto, por Lema 1, f es mximo y (X, X) a es m nimo. 2 nimo si y slo si en cualquier ujo mximo f , los o a Corolario 8 Un corte (X, X) es m estn saturados, y los de (X, X) llevan ujo nulo. arcos de (X, X) a Dems. Como f (X, X) c(X, X) y f (X, X) 0, pero adems tiene que ser a v(f ) = f (X, X) f (X, X) = c(X, X) la unica posibilidad es que sea f (X, X) = c(X, X) y f (X, X) = 0 2

Otra consecuencia del teorema de mximo ujo, es que puesto que los arcos de (V s, s) a (los que entran a s) y los de (t, V t) (los que salen de t) no pueden aparecer en ningn u corte, les asignemos la capacidad que les asignemos el valor del mximo ujo no cambiar, a a por lo tanto podemos asignarles capacidad 0, lo que equivale a eliminarlos, impedir que o circule algo por esos arcos. Finalmente, en algunas aplicaciones aparecen arcos sin l mite de capacidad superior. Podemos asignar a esos arcos una capacidad c(i, j) = , y considerar que c es una aplicacin sobre R+ {}. Cuando aparecen capacidades , lo primero que hemos de hacer o es determinar si hay un camino dirigido de s a t formado por arcos con capacidad innita. De nuevo el mtodo BFS, considerando slo los arcos con capacidad innita y los vecinos e o out, proporciona un mtodo para determinar si existe ese camino no. En el caso de e o que s exista, indica que por esa v podemos enviar una cantidad de ujo arbitraria, y por a tanto que no existe un ujo mximo, el ujo puede hacerse arbitrariamente grande. Si por a el contrario no existe ese camino de s a t, sea X = {i V existe camino dirigido con arcos de capacidad desde s a i}. Necesariamente c(X, X) es nito, y por tanto existe un ujo con valor mximo nito. Podemos por consiguiente usar el mtodo habitual de a e los caminos de aumento para calcularlo.

4.1

Variantes y extensiones

- El caso ms frecuente en la prctica son redes en las cuales existen varios nodos, a a s1 , s2 , . . . sh , donde se puede producir el material a enviar, generalmente con unos l mites c1 , . . . , ch sobre la cantidad de material que puede ser producida, y donde tambin exise ten varios nodos, t1 , t2 , . . . , th , donde el material es consumido, generalmente tambin con e , . . . , c sobre el mximo ritmo al que puede ser consumido. Pero si a ciertos l mites c1 a h esta red le aadimos dos nuevos vrtices s y t, le aadimos arcos desde s a cada una de las n e n fuentes si y les asignamos capacidad ci , e igualmente aadimos arcos desde cada destino n a estos arcos, el mximo ujo de s a t en este nuevo grafo, tj a t y damos capacidad cj a resuelve el problema de mximo ujo del problema original. a 48

- A veces adems de restricciones de capacidad sobre los arcos, hay restricciones sobre a la cantidad de material que puede circular por cada nodo, es decir un l mite sobre el ujo total que puede entrar (y/ salir) en cada nodo. Si por el nodo i puede circular como o mximo un ujo li , construimos un nuevo grafo G2 dnde cada nodo i con restricciones a o de capacidad es sustituido por dos nodos i e i+ , conectados con un arco (i , i+ ) de capacidad li , y cada arco (i, j) A es sustituido por un arco (i+ , j ) con capacidad c(i, j). Calculando el mximo ujo sobre G2 resolvemos el problema con restricciones en los nodos. a - A veces tambin podemos tener conexiones no dirigidas, pensemos por ejemplo en e una red elctrica, es decir conexiones (i, j) con capacidad c(i, j), pero donde el material e puede ir por esa l nea de i a j de j a i. Por tanto esa conexin equivale a tener dos arcos, o o el arco (i, j) y el arco (j, i) ambos con la misma capacidad c(i, j) ( distinta capacidad si la o cantidad de material que puede circular en cada sentido de ese eje tiene l mites distintos). Por tanto, si una red tiene conexiones no dirigidas, se sustituyen esas conexiones por dos arcos, y se calcula el mximo ujo para este nuevo grafo. Segn que mtodo usemos para a u e calcular el mximo ujo, puede presentarse el problema de que aparezca ujo positivo en el a arco (i, j) y tambin en su opuesto el arco (j, i), lo cual f e sicamente indica una contradiccin o pues por la misma l nea estamos enviando material en direcciones opuestas. Pero es fcil a comprobar que si por ejemplo es f (i, j) f (j, i), esto equivale a poner ujo f (i, j) f (j, i) en el arco (i, j) y 0 en su opuesto, es decir que en esa l nea, enviamos la cantidad de material f (i, j) f (j, i) desde i hasta j. - Finalmente, consideremos la extensin en la que los arcos adems de capacidad supeo a rior c(i, j), tienen una capacidad inferior l(i, j), es decir una cantidad m nima de material que por lo menos debe circular a travs de ese arco. Ahora una red de ujo va a ser un grafo e G = (V, A) simple, conexo, con dos vrtices distinguidos s y t , donde cada arco (i, j) A e tiene asociadas dos cantidades c(i, j) R{} (la capacidad superior), l(i, j) R{} la capacidad inferior, cumpliendo l(i, j) c(i, j). Los razonamientos hechos en los Lemas y Teoremas previos sirven tambin para este e caso. Detallamos, sin demostracin los enunciados. El Lema 1 queda en: o Lema 14 Sea G una red de ujo con capacidades superiores c e inferiores l, f un ujo sobre esa red, y (X, X) un corte cualquiera. Entonces v(f ) = f (X, X) f (X, X) c(X, X) l(X, X) Ahora un camino de aumento ser un camino de s a t donde en los arcos hacia adelante a i j el ujo f (i, j) es menor que la capacidad superior c(i, j), (y la holgura de ese arco es c(i, j) f (i, j)), y en los arcos hacia atrs j i el ujo f (i, j) es mayor que la capacidad a inferior l(i, j) (y la holgura hacia abajo de ese arco es f (i, j) l(i, j). El Lema 2 se sigue cumpliendo con esta nueva denicin de camino de aumento, y para o formar el nuevo ujo f aumentamos disminuimos en = M o nimo de las holguras, los arcos del camino de aumento. Por tanto, tambin podemos utilizar el mtodo de Ford-Fulkerson de caminos de aue e mento para a partir de un ujo inicial f0 obtener un ujo mximo. Tenemos sin embargo a un problema nuevo, que es el de calcular un ujo inicial f0 compatible con los l mites de capacidad impuestos. El modo de calcular un ujo inicial compatible f0 , la demostracin o o de que no existen ujos compatibles para ese grafo, lo dejamos para la siguiente seccin. o Pero suponiendo que existe y conociendo un ujo inicial f0 , usando el mtodo BFS, el proe ceso de caminos de aumento termina siempre y proporciona un ujo mximo. De nuevo se a verica el teorema de integralidad, si f0 es entero, todos los ujos obtenidos son enteros, y el teorema de mximo ujo- m a nimo corte queda en: 49

Teorema 4.4 El valor mximo de v(f ) tomado entre todos los posibles ujos f es igual a al m nimo de c(X, X) l(X, X) tomado entre todos los cortes (X, X). Para este caso de capacidades inferiores, tambin tiene sentido el problema de calcular un e ujo m nimo, y su clculo se hace de forma similar. Basta notar que para cualquier ujo a f y corte (X, X) debe ser v(f ) = f (X, X) f (X, X) l(X, X) c(X, X) Y que si tomamos caminos de disminucin, tal que en los arcos hacia adelante f (i, j) > o l(i, j) y en los hacia atrs es c(i, j) > f (i, j), y disminuimos el ujo en en los arcos a y lo aumentamos en en los arcos , el nuevo ujo obtenido tiene un valor menor. El equivalente al teorema de mximo ujo es ahora: a Teorema 4.5 El valor m nimo de v(f ) tomado entre todos los posibles ujos f es igual c(X, X) tomado entre todos los cortes (X, X). al mximo de l(X, X) a

4.2

Flujo compatible

Vamos ahora a estudiar la cuestin de decidir, para una red G con capacidades inferiores o y superiores, cuando existe un ujo f compatible y en caso de que exista como calcularlo. Supongamos que G es una red simpe y conexa, sin vrtices distinguidos, y capacidades e l(i, j) c(i, j) sobre los arcos. Llamaremos circulacin sobre G, a una aplicacin f de o o V V en R vericando la ley de conservacin de ujo en todos los nodos, es decir o f (i, V ) = f (V, i), i V Notar que si f es un ujo cualquiera en una red de ujo G, aadiendo un arco (t, s) n y asignndole como ujo el valor v(f ) tenemos una circulacin en el nuevo grafo G = a o (V, A (s, t)). Rec procamente, si encontramos una circulacin compatible f en el grafo o G (con c(t, s) = y l(t, s) = ), y por el arco (t, s) circula un ujo v, prescindiendo de ese arco (t, s) los valores de f dan un ujo compatible en G con valor v. Por tanto para hallar un ujo compatible en G ( demostrar que no existe) nos basta hallar una o circulacin compatible en G ( demostrar que no existe). o o Veamos pues como calcular una circulacin compatible para un grafo arbitrario G con o restricciones inferiores y superiores, pero sin vrtices distinguidos. El esquema de clculo, e a es totalmente similar al desarrollado en la Seccin 2, y por tanto omitiremos muchos o detalles. Dada una circulacin f sobre G, llamaremos desviacin de un arco (i, j) a la cantidad o o { Df (i, j) = f (i, j) c(i, j) si f (i, j) > c(i, j) l(i, j) f (i, j) si f (i, j) < l(i, j) 0 en los dems casos a

y llamaremos desviacin total a la cantidad o Df (V, V ) = Df (i, j)


(i,j)A

De forma similar al Lema 1, ahora tenemos:

50

Lema 15 Sea f una circulacin sobre la red G y X V cualquier subconjunto de nodos. o Entonces 0 = f (X, X) f (X, X) y si adems f es compatible tiene que ser a 0 = f (X, X) f (X, X) c(X, X) l(X, X) Dems. Puesto que f (i, V ) = f (V, i), i, sumando esas identidades para los i X obtenemos la igualdad del enunciado. Como adems si f es compatible es l(i, j) f (i, j) a c(X, X) y f (X, X) l(X, X) de donde se sigue la desigualdad. c(i, j), ha de ser f (X, X) 2 Para conseguir disminuir la desviacin total de una circulacin, usaremos el equivalente o o a caminos de aumento de la seccin 2. o Lema 16 Sea G una red con una circulacin f , y sea (i, j) un arco con desviacin > 0. o o Supongamos que f (i, j) > c(i, j). En este caso, llamaremos camino de aumento para f a un camino no dirigido P desde j a i tal que en los arcos il1 il hacia adelante de P es f (il1 , il ) > l(il1 , il ) y en los arcos hacia atrs il1 il de P es f (il , il1 ) < c(il , il1 ). a De forma similar, si f (i, j) < l(i, j), llamaremos camino de aumento a un camino no dirigido P desde j a i tal que en los arcos il1 il es f (il1 , il ) < c(il1 , il ) y en los arcos il1 il es f (il , il1 ) > l(il , il1 ). Entonces si existe un camino de aumento de j a i para f , existe una circulacin f tal que Df (V, V ) < Df (V, V ). o Dems. Supongamos que estamos en el primer caso, f (i, j) > c(i, j) y sea P un camino de aumento para f , P = (j = i0 i1 i2 . . . ik . . . ih = i) . Sea 1 = min (f (il1 , il ) l(il1 , il )) tomado sobre los arcos hacia adelante il1 il del camino P . Igualmente sea 2 = min (c(il , il1 ) f (il , il1 )) tomado sobre los arcos hacia atrs il1 il del camino P . Sea 3 = f (i, j) c(i, j) y sea a = min (1 , 2 , 3 ) Denamos f de V V en R de f (i , j ) f (i , j ) = f (i , j ) + f (i , j ) la siguiente forma: si (i , j ) es arco adelante en P es el arco (i, j) o , j ) arco atrs en P (i a en los dems casos a

Notar que al aadir al camino P el arco (i, j) obtenemos un ciclo, y al aadir n n o restrselo a los arcos de ese ciclo, segn sean hacia adelante hacia atrs, la ley de a u o a conservacin del ujo se mantiene. Adems por la forma de elegir el , los arcos que o a estaban dentro del rango vlido [l(i, j), c(i, j)] continuan dentro de ese rango, y para a los que estaban fuera su desviacin disminuye estrictamente. Un resultado similar teno emos para el otro caso, cuando f (i, j) < l(i, j). Ahora si P es un camino de aumento P = (j = i0 i1 i2 . . . ik . . . ih = i), tomamos 1 = min (c(il1 , il ) f (il1 , il )) tomado sobre los arcos hacia adelante, 2 = min (f (il , il1 ) l(il , il1 )) 51

tomado sobre los arcos hacia atrs, 3 = l(i, j) f (i, j) y a = min (1 , 2 , 3 ) Ahora denimos f como o f (i , j ) + si (i , j ) es arco adelante en P es el arco (i, j) f (i , j ) = f (i , j ) (i , j ) arco atrs en P a f (i , j ) en los dems casos a y sirven todos los razonamientos anteriores. 2

Notar que como para el caso de mximo ujo, el lema permite construir una circulacin a o f con menor desviacin, por tanto, si comenzamos con la circulacin nula f0 , vamos o o obteniendo circulaciones f0 , f1 , . . . , fk cada vez con menor desviacin, y como para el caso o del problema de mximo ujo puede demostrarse que este proceso siempre termina y slo a o usa valores enteros s las funciones f0 , c y l son enteras. Y tambin termina si para buscar e caminos de aumento usamos el mtodo BFS. e El siguiente teorema, similar al teorema de mximo ujo, suele conocerse con el nombre a de Teorema de la circulacin compatible. o Teorema 4.6 Sea G un grafo con capacidades inferiores l y superiores c, con l(i, j) c(i, j). G tiene una circulacin compatible con esas capacidades si y slo si X V es o o c(X, X) l(X, X) 0 Dems. Ya hemos visto en el primer lema de esta seccin, que si existe circulacin compatible o o tiene que vericarse esa desigualdad para todo X V . Veamos que si G no contiene una circulacin compatible, existe X V tal que c(X, X) l(X, X) < 0. Comenzemos con la o circulacin nula f0 y mediante el mtodo BFS, vayamos obteniendo nuevas circulaciones o e con desviaciones cada vez menores, cuando el proceso termine, como suponemos que no hay circulacin compatible, terminar con una circulacin f = fk tal que al menos existe o a o un arco, (i, j), fuera del rango [l(i, j), c(i, j)]. Supongamos primero que f (i, j) > c(i, j) y no existe camino de aumento de j a i, es decir un camino tal que en los arcos es f > l y en los es f < c. Sea X el conjunto de vrtices para los que s existe ese camino, e = {i V existe camino de aumento de j a i }. es decir X Por hiptesis j X e i X. Adems como los arcos (j , i ) (X, X) tienen que cumplir o a , i ) l(j , i ) se tiene f (X, X) l(X, X). Pero igualmente, los arcos (i , j ) (X, X) f (j , j ) c(i , j ), pero como adems el arco (i, j) est en (X, X), y f (i, j) deben cumplir f (i a a es estrictamente mayor que c(i, j), tiene que ser f (X, X) > c(X, X). Por tanto tenemos, que para este conjunto X es 0 = f (X, X) f (X, X) > c(X, X) l(X, X) Similarmente, si fuese f (i, j) < l(i, j) y no hay camino de j a i con arcos hacia adelante con f < c, y arcos hacia atrs con f > l, sea X = {i V existe camino con esas a caracter sticas desde j a i}. Tendremos que j X, i X, y como antes f (X, X) c(X, X) y f (X, X) < l(X, X) X) la desigualdad f (i, j) < l(i, j) es estricta. pues en el eje (i, j) (X, Por tanto en este caso, para ese conjunto X tambin e 0 = f (X, X) f (X, X) > c(X, X) l(X, X) 52

2 En resumen, este mtodo de caminos de aumento para disminuir la desviacin de una e o circulacin en un grafo, bien proporciona una circulacin compatible, bien proporciona o o o o un conjunto X que explica por que no existe circulacin compatible. o

4.3

Aplicaciones a conectividad en grafos

El teorema de mximo ujo-m a nimo corte permite dar demostraciones sencillas de varios resultados clsicos en grafos. El siguiente teorema se conoce con el nombre de Teorema a de Menger para arcos (grafos dirigidos). e Teorema 4.7 Sea G un grafo dirigido arbitrario y s, t V dos vrtices cualquiera. Entonces el mximo nmero de caminos dirigidos que pueden construirse desde s a t, siendo a u disjuntos en arcos, es igual al nmero m u nimo de arcos tales que al eliminarlos no hay caminos dirigidos desde s a t. Dems. Sea kc el primer nmero, es decir puedo encontrar kc caminos dirigidos desde s u a t que no comparten ningn arco, pero no puedo encontrar kc + 1 caminos disjuntos. u Igualmente sea ke el segundo nmero, es decir existe un conjunto E de ke arcos tal que en u el grafo G = (V, A E) no hay caminos dirigidos desde s a t, pero para cualquier conjunto de arcos E tal que |E | < ke en G = (V, A E ) s hay camino dirigido desde s a t. Claramente ke kc , pues para eliminar todos los caminos de s a t al menos hay que eliminar un arco de cada uno de esos kc caminos disjuntos. Calculemos ahora el mximo ujo de s a t suponiendo capacidad 1 a todos los arcos, a excepto a los que entran a s y a los que salen de t que podemos darles capacidad 0 . Por el teorema de integralidad el ujo obtenido es entero, y por tanto en cada arco no circula o ujo circula ujo 1. Sea k el valor de ese ujo mximo, y jmonos en el grafo G1 formado o a e por los arcos de G por los que circula ujo 1. En G1 , en cualquier nodo i = s, t por la ley de conservacin del ujo, el nmero de arcos que entran (vecinos in) debe igualar al o u nmero de arcos que salen (vecinos out). Adems de s deben salir exactamente k arcos u a y a t deben llegar exactamente k arcos. Coloreemos ahora los arcos de G1 de la siguiente forma: asignamos color 1, al primer arco que sale de s, si llegua a un nodo i1 , coloreamos con 1 uno de los arcos que salen de i1 y seguimos este mismo proceso, siempre cuando lleguamos a un nodo ih salimos poniendo color 1 a alguno de los arcos sin colorear que salen de ih . Este proceso termina cuando coloreamos un arco que lleva a t, y proporciona un camino de s a t coloreado con 1. Como en G1 el nodo s slo tiene vecinos out, los otros o k 1 arcos que salen de s estn sin colorear. Elijamos uno de esos arcos sin colorear que a salen de s, dmosle color 2, y sigamos el mismo proceso anterior, si por un arco llegamos al e nodo i , elegimos un arco sin colorear para salir, y lo coloreamos con 2, y asi sucesivamente 1 hasta llegar a t. De nuevo tendremos un camino de s a t, con todos sus arcos de color 2. Repetimos este proceso para los k arcos que salen de s, y obtendremos k caminos de s a t con distinto color, es decir disjuntos. Por tanto kc k. Pero por otra parte si hay kc caminos disjuntos en arcos de s a t, enviando una unidad de ujo por cada uno de esos kc caminos ya tenemos un ujo de valor kc luego tambin k kc , y por tanto k = kc . e Por otra parte, tambin k debe ser la capacidad de un corte m e nimo, es decir, existe X V tal que s X, t X y (X, X) consta de exactamente k arcos. Si quitamos esos k arcos de (X, X) desde s slo podemos tener caminos a elementos de X, es decir no hay o camino de s a t. Por tanto tambin ke k = kc , y esos tres nmeros k, kc , ke coinciden. 2 e u

53

Notar que la demostracin del teorema proporciona un mtodo para hallar un nmero o e u mximo de caminos disjuntos en arcos, y un mtodo para hallar un conjunto de arcos, con a e cardinal m nimo, que desconecta s de t: Calculamos mximo ujo y m a nimo corte cuando los arcos tienen capacidad 1. El corte da los arcos a eliminar para desconectar s de t. Los arcos del ujo mximo con valor 1, si los coloreamos como en la demostracin dan los a o caminos disjuntos. Para grafos no dirigidos, tenemos anlogamente el siguiente teorema, Teorema de a Menger para ejes (grafos no dirigidos). Teorema 4.8 Sea G un grafo no dirigido arbitrario y s, t V dos vrtices cualquiera. e Entonces el mximo nmero de caminos que pueden construirse entre s y t siendo disjuntos a u en ejes, es igual al nmero m u nimo de ejes tales que al eliminarlos no hay caminos desde s a t. Dems. Es idntica a la anterior. Ahora calculamos el mximo ujo de s a t con capacidad e a 1 en todos los ejes. Ahora G1 es el grafo dirigido formado por los ejes con ujo 1 y direccin o la de ese ujo. 2 Veamos ahora el llamado Teorema de Menger para nodos. e Teorema 4.9 Sea G un grafo dirigido arbitrario y s, t V dos vrtices tales que (s, t) A. Entonces el mximo nmero de caminos dirigidos que pueden construirse entre s y t siendo a u disjuntos en nodos salvo sus extremos, es igual al nmero m u nimo de nodos tales que al eliminarlos no hay caminos dirigidos desde s a t. Dems. Como en el caso de arcos, sea kc el primer nmero, es decir puedo encontrar kc u caminos dirigidos desde s a t tales que, adems de s y t, no comparten ningn otro nodo, a u pero no puedo encontrar kc + 1 caminos. Igualmente sea ke el segundo nmero, es decir u existe un conjunto E de ke nodos tal que en el grafo G = (V E, A ((V E) (V E))) no hay caminos dirigidos desde s a t, pero para cualquier conjunto de nodos E tal que |E | < ke en G = (V E , A ((V E ) (V E ))) s hay camino dirigido desde s a t. Claramente ke kc , pues para eliminar todos los caminos de s a t al menos hay que eliminar un nodo de cada uno de esos kc caminos disjuntos. Calculemos ahora el mximo ujo de s a t poniendo capacidad 1 a todos los nodos a i = s, t y capacidad a los arcos de G, excepto a los que entran a s salen de t, que o podemos ponerles capacidad 0. Como s tiene un nmero nito h de vecinos i1 , . . . , ih , en u el grafo G2 que usamos para calcular el mximo ujo (el obtenido al sustituir los nodos i a por dos nodos i , i+ ) el corte (X, X) con X = {s, i , . . . , i } es de capacidad h, por tanto 1 h este mximo ujo es nito, pongamos de valor k. De nuevo adems, lo que circula por a a cada arco es entero, y como a un nodo a lo ms puede llegar una unidad de ujo, tenemos a que el subgrafo G1 formado por los arcos de G por los cuales circula ujo, verica que en cada nodo i = s, t bien no llega ni sale ningn arco, bien llega exactamente un arco o u o y sale exactamente uno. Asi mismo de s salen k arcos y a t llegan exactamente k arcos. Hagamos ahora un proceso de marcado similar al del Teorema para arcos: elegimos un arco sin colorear de G1 que salga de s y lo coloreamos con 1, si llega a i , de ah sale 1 exactamente un arco que coloreamos tambin con 1, y as sucesivamente hasta llegar a t. e Si repetimos este proceso para los k arcos que salen de s, habremos encontrado k caminos de s a t disjuntos en nodos salvo los extremos, y por tanto tenemos kc k. Por otra parte, podemos enviar una unidad de ujo por cada uno de los kc caminos luego k = kc . Finalmente, por el teorema de mximo ujo, k tiene que ser la capacidad de un corte a en el grafo G2 de nodos duplicados dnde hemos calculado el mximo ujo. Es decir existe o a 54

un corte (X, X) de capacidad k. Este X adems del nodo s, puede contener para algunos a o nodos u1 , . . . , ul sus dos partes, u , u+ , y para otros nodos v1 , . . . , vk slo la parte vi . i i + + Igualmente X contendr, adems de t, las partes vi y las partes wi , wi de los restantes a a nodos. Como el corte es de capacidad k nita, no puede haber en G2 ninguna conexin ni o o desde s, ni desde vrtices de la forma u+ de X, a vrtices de la forma wi de X a t, las e e i + unicas posibilidades son las k conexiones de los vrtices vi a sus respectivos vi . Como e = k. Como adems en G no cada una de estas conexiones es de capacidad 1 debe ser k a , t, al eliminar los k vrtices hay conexiones entre los vrtices s, u1 , . . . , ul y los w1 , . . . , wl e e v1 , . . . , vk se desconectan s y t. Esto implica que ke k y por tanto el teorema. 2 Como para el caso de arcos, la demostracin da un mtodo para hallar un mximo de o e a caminos entre s y t disjuntos en nodos, y sirve tambin para calcular un conjunto m e nimo de nodos, tales que su eliminacin desconecta s de t. o Para el caso de que G sea un grafo no dirigido, este teorema de Menger para nodos y esta demostracin previa no cambian para nada. o Previamente a los resultados de Menger, los matemticos Knig y Egervry, dea o a mostraron el siguiente resultado, que es un caso particular del teorema anterior, y que llamaremos Teorema de Knig-Egervry. o a Teorema 4.10 Sea G = (V, E) un grafo bipartito no dirigido. Es decir, V = S T , S T = , S, T = , E S T . Entonces, el mximo nmero de ejes de E que podemos a u hallar con extremos disjuntos es igual al nmero m u nimo de vrtices que hay que eliminar e del grafo para hacer desaparecer todos los ejes. Dems. Sean s1 , . . . , sn1 los nodos de S y t1 , . . . , tn2 los nodos de T . Formemos el grafo dirigido G = (V , A ) con V = V {s, t}, y conjunto de arcos A formado por los ejes de E, dirigidos desde si a tj , junto con los n1 arcos (s, si ) y los n2 arcos (tj , t). Claramente el nmero mximo de caminos de s a t disjuntos en nodos salvo los extremos, es lo mismo u a que el n mero mximo de ejes de E disjuntos en sus extremos, y por el teorema previo, u a iguala al conjunto de nodos de V tales que su eliminacin separa s de t, lo cual equivale a o decir que no puede quedar ningn arco de la forma (si , tj ). Con lo que queda demostrado u el teorema. Para este caso particular, podemos hacer una demostracin alternativa ( lo que es lo o o mismo, una forma alternativa de calcular el mximo ujo) un poquito ms sencilla. En a a G , en lugar de calcular mximo ujo de s a t con capacidad 1 en los nodos, hallaremos a un mximo ujo de s a t con capacidad 1 en los n1 + n2 arcos nuevos (s, si ) y (t, tj ), y a capacidad en los arcos (si , tj ). Si kc y ke estn denidas como en el teorema previo, y a ese mximo ujo es k, se comprueba de la forma usual que debe ser kc ke y que kc = k. a Adems si es (X, X) un corte m a nimo, supongamos, reordenando si es preciso los vre tices, que X = {s, s1 , . . . , sl1 , t1 , . . . , tl2 } y X = {t, sl1 +1 , . . . , sn1 , tl2 +1 , . . . , tn2 } No puede haber conexiones de algn si X con algn tj de X pues esos arcos son de u u capacidad . Por consiguiente, como la capacidad del corte es k, la unica posibilidad es contenga exactamente k conexiones con capacidad 1, que slo pueden estar que (X, X) o formadas por arcos desde s a nodos de X S y desde nodos de X T a t, y por tanto |X S| + |X T | = (n1 l1 ) + l2 debe ser k. Adems al eliminar esos k nodos de X S y a 55

X T , los nodos sl1 +1 , . . . , sn1 , t1 , . . . , tl2 , desaparecen todos los ejes, pues como ya hemos sealado entre los nodos de S que quedan (los de S X) no hay conexiones a los nodos de n T que quedan (los de X T ). Por tanto ke k. 2 Dado un grafo no dirigido G, a un conjunto de ejes con extremos disjuntos se le denomina un matching ( emparejamiento). El teorema anterior da un mtodo para hallar o e un matching mximo en grafos bipartitos. Para calcular un matching mximo en grafos a a generales tambin existen algoritmos ecientes. e Veamos nalmente un teorema, el Teorema de Hall, de enunciado bastante diferente, pero que esencialmente equivale al teorema de Knig-Egervry. o a Sea E = {e1 , . . . , em } un conjunto nito, y S = {S1 , . . . , Sn } una familia de subconjuntos de E. Un sistema de representantes distintos (SRD) para esa familia, es una lista de n elementos distintos ei1 , . . . , ein de E, cumpliendo que eij Sj para j = 1, . . . , n. Claramente, si n > m no puede haber un SRD para S, e igualmente si k subconjuntos de S no contienen entre todos ellos k elementos distintos, no podemos encontrar k representantes distintos para esos subconjuntos. El teorema de Hall dice que esa condicin, adems de o a necesaria, es suciente. Teorema 4.11 Sea E = {e1 , . . . , em }, y S = {S1 , . . . , Sn } una familia de subconjuntos de E. La familia S admite un SRD, si y slo, si cada subfamilia de S formada por k o subconjuntos contiene al menos k elementos, para k = 1, . . . , n. Dems. Como sealamos al comienzo, claramente el cumplimiento de esa propiedad es n condicin necesaria para la existencia de un SRD. Para demostrar que es suciente, nos o basta ver que si no existe un SRD, hay una subfamilia de k subconjuntos conteniendo entre todos ellos menos de k elementos. Supongamos pues dados E y S, y formemos el grafo bipartito, con conjunto de vrtices e V = {S1 , . . . , Sn , e1 , e2 , . . . , em }, y donde existe un arco del nodo Si al nodo ej si y slo o si el elemento ej Si . Para este grafo bipartito, calculemos un mximo matching por a el mtodo del teorema anterior, es decir aadamos un nodo s conectado a cada Si , un e n nodo t conectado a cada ej , pongamos a estos nuevos enlaces capacidad 1, capacidad a los otros enlaces (Si , tj ) y calculemos mximo ujo. Este mximo ujo, proporciona un a a mximo matching, si este tiene cardinal n, hemos hallado un SRD. Luego si suponemos que a no existe SRD, habremos hallado un matching mximo de cardinal k < n y tambin un a e tiene capacidad k . Por los mismos razonamientos del teorema conjunto X tal que (X, X) previo, tiene que ser |X S| + |X E| = k , y adems no hay conexiones desde X S a a X E. Por tanto como |X S| + |X S| = n > k , tiene que ser |X S| > |X E|. Como para cada uno de los subconjuntos de X S sus elementos son de X E, tenemos que la familia de subconjuntos X S no contiene suciente nmero de elementos como para u existir un SRD. 2

56

Algunos problema NP-Duros.

Hay problemas sobre grafos con enunciado similar, pero uno de ellos fcil de resolver, a es decir se conoce un algoritmo polinomial en n para resolverlo, y el otro dif cil. Por ejemplo, vimos un algoritmo O(m + n) para determinar si un grafo contiene un circuito euleriano, en cambio determinar si un grafo contiene un ciclo hamiltoniano es un problema NP-Completo. Vamos a elegir tres problemas modelo, el problema de hallar un ciclo hamiltoniano, el problema del recubrimiento de vrtices y el problema del coloreado de grafos, para ilustrar e aproximaciones que se utilizan, problemas relacionados, etc.

5.1

El problema del ciclo hamiltoniano. El problema TSP.

Figure 20: El grafo de Petersen y el del dodecaedro. El problema de determinar si un grafo tiene un circuito hamiltoniano es NP-Completo aunque restrinjamos los grafos de entrada a grafos rejilla, (grafos con vrtices un par de e enteros vi = (i1 , i2 ), y donde existe eje entre vi y vj si y slo si |i1 j1 | + |i2 j2 | = 1. o Estos son grafos planos, bipartitos, y con grado 4. ) Uno de los problemas combinatorios mas estudiados, relacionado con el ciclo hamiltoniano, es el problema del viajante de comercio, o TSP (Travelling Salesman Problem). En este problema suponemos que tenemos n nodos y una matriz de distancia w(i, j) entre nodos, equivalentemente tenemos el grafo completo Kn y pesos w(i, j) asociados a los ejes. El problema es hallar una permutacin de los nodos i1 , . . . , in de costo m o nimo, es decir un ciclo spanning de Kn de costo m nimo. Notar que si supisemos resolver de forma eciente e el TSP, tambin sabr e amos resolver el problema de existencia de un ciclo hamiltoniano en un grafo G: completamos G con los ejes que faltan hasta formar Kn , asignamos peso 1 a los ejes que ya estaban en G y peso 2 a lo que hemos aadido. Si al resolver el problema n TSP el ciclo obtenido tiene peso n es por que G tiene un ciclo hamiltoniano, y si tiene peso mayor que n es por que no existe un tal ciclo. Aunque no existen algoritmos polinomiales para el TSP, cuando la matriz de distancias w(i, j) cumple la propiedad triangular, w(i, j) w(i, k) + w(k, i) para todo nodo i, j, k, hay dos mtodos que consiguen buenas aproximaciones. El primero e es el siguiente: Algoritmo de aproximacin para TSP { o 57

1.- Paso inicial. Suponemos el grafo completo Kn , con pesos w(i, j) 0 y cumpliendo la propiedad triangular. Calcular el MST de Kn con esos pesos, y formar el multigrafo E obtenido duplicando todos los ejes del MST. 2.- Como E es euleriano, hallar C un ciclo euleriano conteniendo cada eje del MST dos veces. Transformar C = (v1 , v2 , . . .) en un ciclo hamiltoniano C mediante el siguiente proceso: Comenzamos C como C con v1 , v2 , . . . pero el nodo que sigue a vk es el primer nodo vk+h no usado an en C . u } Teorema 5.1 Si es C el ciclo obtenido por este mtodo y es Copt el ciclo ptimo, debe e o cumplirse que w(C) < 2w(Copt ), siendo w(C) el peso del ciclo C. Dems. Sea T el MST y Copt el ciclo hamiltoniano ptimo. Como Copt menos un eje es o un rbol, debe ser w(T ) < w(Copt ). Como adems w(C ) = 2w(T ) < 2w(Copt ), y por la a a propiedad triangular debe ser w(C) w(C ) tenemos el enunciado. 2 En realidad a partir del MST, T an podemos encontrar un ciclo generalmente mejor. u Basta encontrar un matching M de peso m nimo pero que incluya a todos los nodos que tienen grado impar en T . De esta forma el grafo T + M tiene todos sus nodos de grado par, luego podemos formar un ciclo euleriano C conteniendo todos los ejes de T + M , y obtener, como en el proceso anterior, un ciclo hamiltoniano C desde C . e Teorema 5.2 Si es C el ciclo hamiltoniano obtenido por este segundo mtodo y es Copt el ciclo ptimo, debe cumplirse que w(C) < 1.5w(Copt ), siendo w(C) el peso del ciclo C. o Dems. Sea M un matching ptimo entre los 2k puntos de grado impar de T , w(M ) su o peso y w(T ) el peso del MST T . Claramente w(C) w(C ) = w(T ) + w(M ) < w(Copt ) + w(M ) Esos 2k puntos impares aparecern en Copt supongamos en el orden i1 , i2 , . . . , i2k y podemos a formar dos matching, M1 con los k pares (ij , ij+1 ) y j impar, y M2 con los k pares (ij , ij+1 ) con j par. De nuevo por la propiedad triangular w(M1 ) + w(M2 ) Copt , por tanto 2w(M ) Copt , de donde el enunciado 2 En la prctica los pesos de los ciclos obtenidos por estos mtodos dieren poco del peso a e del ciclo ptimo. o

5.2

Recubrimiento de vrtices. El problema SCP. e

Dado un grafo no dirigido G = (V, E) un recubrimiento de vrtices es un subconjunto S e de V tal que todo eje de E tiene al menos un extremo en S. El problema del recubrimiento de vrtices es el de determinar un recubrimiento S de cardinal m e nimo, (o si los nodos tienen asignado un peso w(i) hallar un recubrimiento de peso m nimo.). Este es un problema NPDuro (NP-Hard), se supone que no existe ningn algoritmo polinomial que lo resuelva. u El siguiente mtodo garantiza obtener un recubrimiento razonable: e - Formar un matching mximal entre los nodos de G. a - Elegir como recubrimiento el conjunto de todos los nodos que son extremos de ese matching.

58

1 2

Figure 21: Dos formas de obtener una aproximacin para TSP. o Teorema 5.3 El recubrimiento obtenido por este mtodo tiene a lo ms el doble de vrtices e a e que uno ptimo. o Dems. Sea VM el conjunto de vrtices del matching maximal M y Vopt el conjunto de e vrtices de un recubrimiento ptimo. No puede haber un eje (i, j) con i VM y j VM , e o / / pues a adiendo ese eje a M obtendr n amos un matching mayor. Por tanto VM es un recubrimiento de vrtices. Por otra parte, para cada eje de M , al menos uno de sus e extremos tiene que estar en Vopt , por tanto |Vopt | |V (M )|/2 2 Un problema relacionado con este del recubrimiento de vrtices, pero que se ha ese tudiado mucho ms, es el llamado problema de recubrimiento de conjuntos, o SCP (set a covering problem). El problema es el siguiente, nos dan un conjunto E = {e1 , . . . , em } y una familia V1 , . . . , Vn de subconjuntos de E que recubre E, es decir E = n Vi . Cada i=1 conjunto Vi tiene un peso w(i) (puede ser 1 para todo i), y queremos hallar una subfamilia Vi1 , . . . , Vik que tambin recubra E y que tenga peso m e nimo. Por ejemplo, supongamos que una asignatura contiene m temas, Tema I,II,..., y disponemos de n libros que cubren algunos de los temas, el Libro 1, cubre los temas I,II,V,VI,VII y X, el Libro 2, los 5 primeros temas, y as sucesivamente. Se supone que entre todos los libros cubren todos los 59

temas, pero no queremos comprar todos los libros, sino algn subconjunto de libros que u tambin cubra todos los temas y que sea ptimo. Por ejemplo si los libros tienen un precio e o el subconjunto recubridor ms barato, si todos valen lo mismo el subconjunto recubridor a que incluya menos libros. Podemos observar que el problema de recubrimiento de vrtices e es un caso particular del problema SCP, ahora el conjunto a recubrir es E, el conjunto de de ejes del grafo, y los subconjuntos de E son V1 , V2 , . . . , Vn , donde Vi es el conjunto de ejes incidentes al nodo i. Buscamos un subrecubrimiento de cardinal m nimo (es decir los pesos valen 1). Hay otros dos problemas que son equivalentes al problema de recubrimiento de vrtices e que son los siguientes: 1) Dado un grafo no dirigido G = (V, E), un subconjunto S de V se dice que es un conjunto independiente si no existe ningn eje que tenga ambos extremos en S. u Como un conjunto de nodos es un recubrimiento si y slo si su complementario V S es o un conjunto independiente, hallar un conjunto independiente de cardinal mximo, es lo a mismo que hallar un recubrimiento de cardinal m nimo. 2) Un clique K de un grafo G = (V, E) es un subconjunto de vrtices tal que el e subgrafo inducido por K es completo. De nuevo notar que K es un clique de G si y slo si o es un conjunto independiente en el grafo complementario. Por tanto el problema de hallar el mximo clique de G es equivalente al de hallar el recubrimiento m a nimo de vrtices en e el grafo complementario, por tanto un caso particular del problema SCP. Finalmente, un conjunto dominante de un grafo G = (V, E) es un subconjunto de V tal que cada nodo de V o es de S es vecino de uno de S. El problema del conjunto o dominante es hallar un conjunto dominante de cardinal (o peso) m nimo. Este problema es distinto de los anteriores, pero de nuevo es un caso particular del SCP. Ahora el conjunto a recubrir es el conjunto de vrtices V , cada nodo i tiene asociado un conjunto Vi de nodos, e el formado por i y sus nodos adyacentes. Los Vi recubren V y buscamos un recubrimiento m nimo. Notar que tanto en el problema del recubrimiento de vrtices, como en el del conjunto e dominante se usan nodos para recubrir o bien ejes o bien nodos. Si se usan ejes para recubrir otros ejes o nodos, en ambos casos, un matching mximo da la solucin. a o

5.3

Coloreado de grafos.

Dado un grafo G = (V, E) no dirigido un coloreado de G es una aplicacin de V en los o naturales de forma que para nodos vecinos i, j los valores (i) y (j) (los colores de los nodos) son distintos. El problema de coloreado de grafos es hallar un coloreado que use el m nimo posible de colores. De nuevo este es un problema NP-Duro. Hay muchos problemas que se reducen a colorear un grafo con un nmero m u nimo de colores. Uno clsico es el siguiente: establecer horarios adecuados para asignaturas de a una Facultad, de forma que dos asignaturas cursadas por un mismo alumno o impartidas por un mismo profesor sean dadas en horas distintas. El grafo tiene como nodos a las distintas asignaturas y existe un eje entre asignaturas si comparten un alumno o profesor. Claramente si puede colorearse con k colores slo se necesitan k horas, aunque si el color o ms usado se usa l veces, se necesitarn l aulas al menos. a a Una forma de colorear los nodos es recorrerlos en cualquier orden, si estamos explorando el nodo i le asignamos el menor entero que no est utilizado por sus vecinos. Notar que e implica que si todos los nodos tienen grado k el grafo se puede colorear con k + 1

60

Figure 22: Dos grafos no 3-coloreables. colores. Por otra parte si tenemos un coloreado ptimo, y exploramos los vrtices en el o e orden, primero los de color 1, despus los de color 2,. . . , y volvemos a colorear el grafo e segn el mtodo anterior, volveremos a obtener el coloreado ptimo. Esto demuestra que u e o si aplicamos el mtodo anterior a los n! rdenes posibles de recorrer los nodos, alguno de e o los coloreados obtenidos ser ptimo. ao Teorema 5.4 Si un grafo no es regular, siempre puede colorearse con k colores, siendo k el grado mximo. a Dems. Sea v un vrtice de grado < k. Formemos un rbol spanning T con ra en v, e a z usando por ejemplo el mtodo BFS. Utilizamos ahora el mtodo previo de colorear, pero e e usamos para recorrer los nodos el orden que se obtiene al recorrer T en postorden. De esta forma, cuando vayamos a asignar color a un nodo distinto de v, por lo menos uno de sus vecinos no tiene asignado color. 2 Viendo el resultado previo, parece natural en lugar de explorar los nodos en un orden arbitrario, ordenarlos primero por orden decreciente de grado, y elegir de entre los nodos del mismo grado aqul que sus vecinos usen un mximo de colores distintos. Este es un e a mtodo muy usado en la prctica. e a Finalmente, notar que Kn necesita n colores, y por tanto un grafo con un clique de tama o k necesita usar en cualquier coloracin al menos k colores distintos. n o Para grafos regulares de grado k a veces se necesitan k + 1 colores, por ejemplo un ciclo con un n mero impar de nodos, o el grafo completo Kn , son regulares con grados 2 y n 1 u respectivamente, y necesitan para colorearse al menos 3 y n colores respectivamente. El siguiente teorema, teorema de Brooks, dice que esos dos grafos son los unicos que necesitan k + 1 colores. Teorema 5.5 Sea G un grafo con n nodos, grado mximo k y que no sea ni Kn ni el ciclo a Cn si n es impar. Entonces G siempre puede colorearse con k colores. Dems. 2

61

Você também pode gostar