Вы находитесь на странице: 1из 5

1.2.

Trayectorias y matrices

La matriz M , de adyacencia de un (di)grafo, indica las aristas(arcos) entre vrtices, que son tambin las e e 2 = M M indica, en cada posicin, el trayectorias de longitud 1 posibles entre vrtices. As la matriz M e , o nmero de trayectorias de longitud 2 entre los vrtices correspondientes, es decir, si en la posicin (i, j) u e o hay un 3, tenemos tres trayectorias distintas desde el vrtice vi al vrtice vj . e e 0 1 1 1 1 0 1 0 En efecto, si M = es la matriz de un grafo, el elemento (1, 3) de M 2 se obtiene de 1 1 0 1 1 0 1 0 operar la la 1 de M con la columna 3 de M . Entonces (ponemos con cada elemento de la matriz su signicado como arista),

v1 v2

v1 v3

v1 v4

1 1 0 1

v1 v3 v2 v3 v4 v3

= 0 1+ 1 1 +1 0+ 1 1 = 2 v1 v2 v3 v1 v4 v3

v2 v1

v2 v3

1.2.3

Algoritmos de conexin de un grafo o

Usando las potencias de la matriz de adyacencia de un grafo no dirigido, puede estudiarse la conexin de o manera ecaz, pero poco eciente desde el punto de vista del cmputo operacional: basta con comprobar o si en M junto con M 2 junto con M 3 junto con . . . , todos los vrtices estn conectados entre s Yendo a e a . la denicin de conexin (existencia de caminos entre cada par de vrtices) y construyendo nuevos caminos o o e a partir de los ya existentes se obtienen mejores algoritmos para probarlo. El ms sencillo, y que sirve como a base a otros interesantes algoritmos es el algoritmo de Warsall. 1.2.3.1 El algoritmo de Warsall

Este algoritmo recrea la construccin de trayectorias estre vrtices de la manera siguiente: o e Los vrtices vi y vj estan conectados si hay un camino entre ellos o, si para algn vrtice vk hay un e u e camino de vi a vk y tambin un camino de vk a vj e La estrategia que sigue el algortimo es de comprobaciones exhaustivas y lo hace en sentido contrario al sugerido por la frase anterior: no comprueba si para cada par de vrtices vi , vj no conectados hay algn e u otro vk que hace de enlace, sino al revs, comprueba si cada vrtice vk sirve de enlace entre cada par de e e vrtices vi y vj . e

ww w.

Como las potencias proporcionan solo el nmero de trayectorias entre los vrtices, no son muy utiles u e a la hora de buscar un camino concreto entre vrtices. Sin embargo, s nos informan sobre los vrtices e e conectados a otros vrtices y, en particular, en los grafos dirigidos nos indican si el grafo es o no ac e clico.

at

De la misma forma, en M 3 se tiene el nmero de trayectorias de longitud 3 entre cada par de vrtices; u e en M 4 se tiene el nmero de trayectorias de longitud 4 entre cada par de vrtices, etc. u e

em

y hay dos trayectorias de longitud 2 desde el vrtice v2 al vrtice v2 : v2 v1 v2 y v2 v3 v2 . e e 2 cuentan trayectorias, no caminos (aunque algunas lo sean). En el primer caso, las Los valores de M trayectorias son caminos, pero en el otro no son caminos (ni colas) pues se recorre la misma arista.

at

ic

a1

1 0 1 0

v1 v2

= 1 1 +0 0+ 1 1 +0 0 = 2 v2 v1 v2 v2 v3 v2 v3 v2

.c

om

luego hay dos trayectorias de longitud 2 desde el vrtice v1 al vrtice v3 : v1 v2 v3 y v1 v4 v3 . e e Igualmente, el elemento (2, 2) de M 2 ser: a

As Warsall produce una sucesin de matrices booleanas (de ceros y unos) W1 , W2 , . . . , Wn (una por , o cada vrtice vk que comprueba si sirve de enlace) que indican si dos vrtices dados estn o no conectados. e e a Si el grafo es conexo la ultima matriz constar toda de unos (si hay al menos dos vrtices). a e Usaremos la matriz de adyacencia M como matriz de conexin inicial (W0 = M , slo estn conectados o o a los vrtices extremos de las aristas). En el paso 1, se contruye una nueva matriz W1 que indicar los vrtices e a e conectados, bien porque lo estaban o bien porque se han conectado a travs de v1 . En el paso 2, se contruye e una nueva matriz W1 que indicar los vrtices conectados, bien porque lo estaban en W1 o bien porque a e se han conectado a travs de v2 . Etc. e El algoritmo, en seudocdigo y con las operaciones lgicas o(|) e y(&), puede plantearse as o o : Algoritmo 1.- (de Warsall) inicio: W0 = M (matriz de adyacencia); n=n o de vertices para k = 1 hasta n para j = 1 hasta n para i = 1 hasta n Wk (i, j) = Wk1 (i, j) | Wk1 (i, k) & Wk1 (k, j) fin fin fin Y el grafo ser conexo si la matriz nal, Wn , es toda de unos. a

Algoritmo 2.- (de Warsall)

2.2 Sea D1 el digrafo que se forma al eliminar del digrafo D del ejercicio 2.1 de la pg. 6, los vrtices a e v1 y v7 y el arco (v5 , v3 ). (a) Hallar su matriz de adyacencia M1 . Obtener la matriz de adyacencia, M1, a partir de la matriz M usada en el ejercicio 2.1. (b) Renombrar los vrtices restantes con x1 , x2 , etc., para que se adecen a los datos de M1 . e u Calcular M12 , M13 , M14 y M15 (producto de matrices M*M) Observa las matrices potencia obtenidas, hay algn vertice desde el que se pueda llegar a todos u 6 7 los dems?, se puede ir desde cada vrtice a cualquier otro? Son necesarias M1 , M1 . . . ? a e (c) Observa ahora los elementos de las diagonales de esas matrices. En el ordenador, puede usarse la orden diag(M)=matriz columna con la diagonal de M Qu signican los valores obtenidos? Que podemos decir sobre los ciclos y la aciclicidad de e D ? Por qu paramos en la potencia 5? e (d) El digrafo es conexo? Construye su grafo no dirigido subyacente. Construye la matriz N1 del grafo subyacente y comprueba con el algoritmo de Warsall dado o o (A Warsall es el nombre de la funcin a usar) si hay o no conexin

ww w.

Como los operadores lgicos sobre matrices se aplican elemento a elemento y, en cada paso k, el operador o y(&) siempre se usa con un elemento de la columna k y uno de la la k , podemos describir las n n operaciones como una unica operacin entre dos matrices, la primera formada por copias de la columna k o y la segunda por copias de la la k.

at

W = M; n = size(W, 1); v = ones(1, n); for k=1 : n W = W | W( : , k v) & W(k v, : ) end

em

at

ic

Matlab es un potent simo manejador de matrices, por lo que es mejor y ms corto hacer algoritmos a para las matrices completas que para los elementos individualmente (si se puede claro). As el algoritmo , de Warsall en Matlab se reduce a:

a1

.c

om

1.3
1.3.1

Caminos de peso m nimo


Algoritmo de Floyd y grafos pesados

El algoritmo de Warsall trabaja con operaciones lgicas para determinar la conexin o no entre los vrtices, o o e pero cambiando el tipo de elementos y operadores usados se ha adaptado para otras cuestiones. Por ejemplo, puede modicarse ligeramente para encontrar la longitud (en el sentido de nmero de aristas) del u camino ms corto entre dos vrtices conectados: si hay un camino entre los vrtices vi y vj y se puede a e e formar otro uniendo dos que pasen por otro vrtice vk , elegimos el ms corto de los dos: e a Long(vi , vj ) = m n Long(vi , vj ) , Long(vi , vk ) + Long(vk , vj )

Como buscamos minimizar valores, debemos sustituir la matriz de adyacencia M , por otra matriz L (de longitud de alcance) que almacena las longitudes de los caminos entre los vrtices, de la siguiente manera: e los vrtices conectados por una arista (arco) estn a alcance 1, e a los vrtices no conectados directamente estn a alcance y e a un vrtice est a alcance 0 de s mismo (0 en la diagonal, aunque esto es opcional). e a As pues, se trata de ir minorando los valores de la matriz L realizando comprobaciones anlogas a las a de Warsall, pero ahora, en cada paso se toman como nuevos valores de la matriz de alcance: L(i, j) = m n L(i, j) ,

n = size(L, 1); v = ones(1, n); Algoritmo 3.- (de Floyd) L; for k=1 : n L = min L , L( : , k v) + L(k v, : ) end siendo L la matriz de alcance del grafo. El algoritmo de Floyd, nos es util para: obtener la longitud del camino ms corto entre cada par de vrtices conectados (la longitud, pero no a e el camino), por lo que, si el grafo es no dirigido, para chequear la conexin del grafo. o Sobre un digrafo, el algoritmo no puede asegurar si es conexo o no (ver el ejemplo que aparece en la nota siguiente) salvo en algunos casos particulares. Nota: En un grafo no dirigido la conexin asegura que se puede ir desde cualquier vrtice a cualquier otro, o e pero no en los digrafos, donde puede haber vrtices no conectados por caminos dirigidos aunque sea conexo e (que no haya camino de vi a vj ni camino de vj a vi ). En el digrafo conexo de la derecha, no hay camino dirigido de v1 a v4 ni de v4 a v1 vr E r' vr E r' vr v2 v4 1 3 5 (de hecho, desde v1 slo se puede ir a v2 y no se puede llegar a v1 desde o ninguno de los otros vrtices). e El algoritmo de Floyd mejora su utilidad cuando se aplica sobre los grafos pesados (que se introducen en el apartado siguiente) que diversican las aplicaciones.

ww w.

at

La implementacin en Matlab de este algoritmo es similar a la del algoritmo de Warsall: o

em

La matriz nal del algoritmo contendr, en cada posicin, la logitud del camino ms corto entre ese a o a par de vrtices (con 0 en la diagonal, si partimos con esta condicin) y el valor (inf en Matlab) si e o los dos vrtices no pueden conectarse. e

at

es decir, tomamos como nueva longitud la del camino ms corto entre el que tenemos (o no tenemos) y el a que se pueda formar uniendo dos caminos existentes. Esta variante, se denomina algoritmo de Floyd.

ic

a1

L(i, k) + L(k, j)

.c

om

1.3.1.1

Ejercicios

3.3 Considerar el digrafo D del Ejercicio 1.2 dado por su matriz de adyacencia M . (a) Comprobar que desde cada plaza se puede llegar a cualquier otra (b) Si cerramos la plaza B al trco, desde cada plaza restante se puede llegar a cualquier otra? a (c) Proponer algunas soluciones al problema de circulacin, cambiando y/o aadiendo direcciones, o n procurando hacer pocas variaciones. Introduzcamos M, la matriz de adyacencia del digrafo D . [i] Construir una matriz de alcance L [ii] Usar el algoritmo de Floyd (A Floyd se denomina la funcin a usar) para comprobar que todas o las plazas estn conectadas con las dems, y las longitudes m a a nimas de los caminos entre ellas. [iii] Obtener la matriz resultante de cerrar la plaza B al trco (ver ejercicio 1.2 de pg. 4). Usar a a el algoritmo de Floyd para comprobar que hay plazas no conectadas con otras. [iv] Usar el algoritmo de Floyd para cada una de las soluciones propuestas, y obtener las longitudes m nimas de los recorridos alternativos.

(a) En qu plaza debe ponerla si quiere que el gasto de gasolina sea lo menor posible? e

Cuando un grafo modela una situacin, en general, las conexiones (aristas y arcos) tienen adems unas o a caracter sticas propias. Pensemos en el ejemplo de una red viaria o una red elctrica, no slo se trata de e o dar el servicio (conexin), sino que tambin es interesante conocer las longitudes de las l o e neas a establecer (cantidad de material), las dicultades para su trazado (coste en tiempo o monetario), etc. En el grafo, estos valores se reejan asignando a cada arista un valor que represente la magnitud que queremos considerar (un peso a cada arista). Consideremos el grafo de la derecha, donde a cada arista le hemos asignado una distancia. Si buscamos ahora el camino ms corto entre el vrtice v1 a e v2 v4 v6 7 2 s s s y v3 no consideraremos que es el que tiene menos aristas, d d sino aquel que recorre en total menor distancia: C1 = v1 v3 d1 d8 3 v1 s 3 d 5 d 4 recorre slo una arista pero una distancia de 9, C2 = v1 v2 v3 o d d d 7 tiene dos aristas y una distancia total de 6 y C3 = v1 v2 v5 v3 9 d d d 9d d ds s s tiene tres aristas sin embargo la distancia recorrida es slo o v3 1 v5 v7 de 5. Claramente, este ultimo camino es ms corto. a Denicin 19.- Llamaremos peso de un grafo (o digrafo) simple G = (V, A) a una funcin real positiva o o + sobre el conjunto de aristas del grafo, es decir, a una funcin : A IR . o El peso de cada arista (arco) lo denotaremos por ij y llamaremos peso de una trayectoria a la suma de los pesos de las aristas (arcos) que la componen.

ww w.

1.3.1.2

Grafos pesados

at

(c) En qu plaza debe ponerla si quiere que el tiempo que tarda en regresar a la tienda cualquier e repartidor sea lo menor posible?

em

(b) En qu plaza debe ponerla si quiere que el tiempo de entrega en cualquier plaza sea lo menor e posible?

at

ic

3.4 La cadena Moto-Churro quiere establecer una tienda para dar servicio a las plazas de la zona representada por el digrafo del ejercicio anterior.

a1

Cal de ellas porporciona recorridos de menor longitud? Cal de ellas porporciona mejores u u recorridos en relacin con los recorridos existentes antes de las obras? o

.c

om

En un grafo pesado, se llama matriz de pesos del grafo a la matriz = (ij )nn , donde pondremos ij = si no hay arista (arco) desde el vrtice vi al vrtice vj y ii = 0, ceros en la diagonal. (En e e ocasiones puede resultar util poner tambin en la diagonal el valor y, de hecho, algunos autores as lo e hacen.) Nota: Con la introduccin del peso, la bsqueda del camino ms corto y la matriz de alcance vistas en o u a la seccin anterior son un caso particular: cuando el peso de cada arista es 1. o Uniquemos criterios y notacin: o Denicin 20.- Llamaremos peso m o nimo de vi a vj al m nimo de los pesos de los caminos de vi a vj , lo denotaremos por ij , y camino (de peso) m nimo de vi a vj a cualquier camino Cij entre ellos que tenga peso m nimo (es decir, (Cij ) = ij ). La matriz de pesos m nimos es la matriz = (ij )nn con ij = si no hay camino de vi a vj . El siguiente resultado, conocido como el Principio de minimalidad de Bellman, y que bsicamente a dice cualquier camino contenido en un camino m nimo es tambin m e nimo, garantiza que los caminos obtenidos respetando este principio son caminos m nimos. Proposicin 21.- Sea G un grafo pesado. Si x1 x2 xp1 xp es un camino m o nimo, para cada i con = w + w . 1 < i < p, los caminos x1 x2 xi y xi xp1 xp son caminos m nimos y w1p 1i ip Demostracin: o Es claro el resultado, pues si el camino C1i = x1 x2 xi1 xi no es un camino m nimo, existe otro C1i = x1 x2 xi1 xi , con w(C1i ) < w(C1i ), con menor peso. Luego el camino x1 x2 xi1 xi xp , de sustituir C1i por C1i , tiene menor peso que x1 x2 xi1 xi xp , en contra de la hiptesis. o 1.3.1.3 Pesos m nimos con el algoritmo de Floyd

Dos de los algoritmos ms usuales para la bsqueda de caminos de peso m a u nimo son el anteriormente comentado de Floyd y, sobre todo, el algoritmo de Dijkstra; si bien, su planteamiento y resultados dieren bastante. Mientras Floyd proporciona los pesos m nimos de todos los caminos posibles, el de Dijkstra proporciona unicamente los caminos desde un vrtice dado. e Como ya anticipabamos, el algoritmo de Floyd multiplica su utilidad si lo aplicamos a grafos pesados. Usando el algoritmo de Floyd con una matriz de pesos, se obtienen los pesos m nimos entre todos los vrtices, es decir, la matriz resultante contiene en cada posicin el peso m e o nimo entre los vrtices correse pondientes (el mismo resultado que si usaramos Dijkstra con cada uno de los vrtices). Pero es bastante e menos eciente que Dijkstra, por lo que no es conveniente usarlo en su lugar. A Floyd le introducimos la matriz de pesos y nos devuelve la de pesos m nimos, pero funciona un poco a modo de caja negra, pues no es fcil obtener otra informacin adicional del proceso. En particular, a o resulta muy costoso construir a partir de l los caminos m e nimos entre los vrtices. e Est indicado cuando se trata de encontrar los pesos m a nimos entre todos los vrtices del grafo. e Ejemplo 22 El grafo de la gura modela los costos del env de mensajes entre las estaciones de una o red. Si deseo enviar un mensaje a cada una de las otras estaciones, desde cul debo hacerlo para que me a cueste menos? Aplicamos el algoritmo de Floyd para hallar la matriz de peso m del grafo: nimo v6 0 7 2 2 0 3 4 2 4 2 s rr 7 0 4 4 1 1 3 0 3 4 1 1 2 2 1 rr 4 0 2 4 3 0 6 4 2 7 r s v3 4 r v1 s s = = 2 4 0 2 4 6 0 5 4 d vd 2 1 2d 4 d 1 0 4 1 4 5 0 2 ds ds 2 1 2 0 2 1 2 4 2 0 v4 v5 y, la respuesta a la pregunta inicial es la respuesta a: desde cul de los vrtices el costo del envi a los a e o otros vrtices es menor? Ese debe ser el elegido (v6 no? por qu?). e e

ww w.

at

em

at

ic

a1

.c

om

Вам также может понравиться