1 / 21

GRAFOS: ALGORITMOS FUNDAMENTALES

GRAFOS: ALGORITMOS FUNDAMENTALES. ESTRUCTURAS DE DATOS. MATRIZ DE CAMINOS. Es una matriz cuadrada P, Que representa si hay o no camino Entre dos vertices Vi y Vj. CIERRE TRANSITIVO. Es el grafo resultante de la matriz de caminos Si un grafo es fuertemente conexo

hertz
Download Presentation

GRAFOS: ALGORITMOS FUNDAMENTALES

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS

  2. MATRIZ DE CAMINOS • Es una matriz cuadrada P, • Que representa si hay o no camino • Entre dos vertices Vi y Vj

  3. CIERRE TRANSITIVO • Es el grafo resultante de la matriz de caminos • Si un grafo es fuertemente conexo • Su cierre transitivo es un grafo completo

  4. UN POSIBLE ALGORITMO • Entre Vi y Vj puede haber camino • Directo, cuando A[i][j] == 1, camino de long. 1 • O pasando por otros vertices • Si solo analizamos pasar por un Vk extra • Cuando A[i][k] == 1 && A[k][j] == 1, Long. 2 • Si Vk puede ser V1 o V2 o … Vn, realmente (A[i][1] && A[1][j]) || (A[i][2] && A[2][j]) || (A[i][n] && A[3][n]) • Que representa A * A, A2 • Nos indica solo si hay un camino de long. 2 entre Vi y Vj • La matriz de caminos indicara si hay camino ya sea • De long. 1 o de long. 2 o de long. 3 o de long. N, es decir: B = A + A2 + A3 + A4 +…. An

  5. WARSHALL: MAS EFICIENTE • El anterior algoritmo • Es poco eficiente, peor • Cuando el grafo tiene muchos vertices • Warshall propuso otro algoritmo • Mas eficiente • Calcular una secuencia de matrices cuadradas • De 0s(no hay camino) y 1s(hay camino) • P0, P1, P2, P3… PN • La diferencia entre Pk y Pk-1 • Se basa añadir un vertice Vk-1 al analisis • Para saber y a traves de Vk-1 hay camino entre V1 y Vj

  6. COMO FUNCIONA • Existe una matriz inicial P0 • Inidica si hay o no camino DIRECTO de Vi a Vj • La matriz que le sigue P1 • Indicaria si hay o no camino DIRECTO (Esto ya lo sabe P0) • O pasando por V0 (añade este vertice al analisis) • P2 • Indicaria si hay camino DIRECTO o pasando por V0 (Esto ya lo sabe P1) • O pasando por V1 • P3 • Indicaria si hay camino DIRECTO o pasando por V0, o V1 (Lo sabe P2) • O pasando por V2 • Pk • Indicaria lo que ya sabe Pk-1 • O pasando por Vk-1

  7. EL ALGORITMO ENTONCES • Debemos encontrar Pn • Sabiendo que Pk[i][j] es 1 si • Pk-1[i][j] es 1 o • Pk-1[i][k] && Pk-1[k][j] • En otras palabras:

  8. WARSHALL IMPLEMENTADO MatrizAdy Warshall(Grafo G){ int i, j, k; MatrizAdy P; CopiarMatrices(P, G.A); for(k = 0; k < G.nvertices; k++){ for(i = 0; i < G.nvertices; i++){ for(j = 0; j < G.nvertices; i++){ P[i][j]= P[i][j] || (P[i][k] && P[k][j]); } } }return P; }

  9. CAMINOS MAS CORTOS • Frecuentemente, se desea conocer en una red • Cual es el camino mas corto • Entre un par de vertices • En este caso • Si importa cuantos caminos existen • Si ya conozco un camino, pero encuentro uno mejor, sustituir • Se aplica el algoritmo de Dijkstra • Es un algoritmo avido, ya que • Resuelve el problema en sucesivos pasos • En cada paso • Selecciona la solucion mas optima

  10. DIJKSTRA • Dado un V0, Dijkstra busca un conjunto D con • Las menores distancias de V0 al resto de vertices • Al inicio, solo conocemos • Las distancias de los adyacentes • D es inicializada a • Factor de peso para los adyacentes, Infinito para los no adyacentes • D va ser mejorado sucesivamente • Escogiendo el vertice Vk no elegido antes • Que tenga la distancia mas corta V0, Vk • Probamos si pasando por Vk • Se puede obtener distancias mas cortas de las que tenemos • Para cada Vertice restante del grafo

  11. Pasando por V3, Distacia de V1 a V5 seria 7, CAMBIAR Pasando por V2, Distacia de V1 a V5 seria 8, no hay mejora EJEMPLO DE DIJKSTRA V1 V2 V3 V4 V5 V6 Vertice Evaluado D[0] D[1] D[2] D[3] D[4] D[5] Escogidos De V1 AL RESTO 5 V1 V1 0 3 4 ∞ 8 ∞ V2 V5 3 V1,V2 0 3 4 ∞ 8 ∞ V2 3 8 0 3 4 ∞ 7 ∞ V3 V1,V2,V3 V6 0 3 4 14 8 10 V1 7 V5 V1,V2,V3,V5 3 0 3 4 12 8 10 V6 V1,V2,V3,V5,V6 2 4 V4 V3 1. D[] se incializa con F.P. de adyacentes al origen 2. Escoger vertice Vk que no haya sido escogido, con la menor distancia del Vevaluado a Vk Repetir hasta k se hayan visitado todos los vertices 3. Revisar si alguna distancia puede ser mejorada pasando por Vk

  12. DIKSTRA 1. Se crea una lista de VDiks con todos los vertices del grafo, y cada VDiks creado tambien se encola 2. Se saca de la cola el menor VDiks por distancia(vmenor) 3. Por cada VDiks v de la lista, se revisa Si su vertice es adyacente al vertice de vmenor y si pasando por vmenor se puede conseguir una mejor distancia Si es asi, se modifica v con los nuevos datos 4. Se repite todo desde el paso 2 hasta que no haya nada mas en la cola

  13. CAMINOS MAS CORTOS ENTRE TODOS LOS PARES DE VERTICES • Es una generalizacion de lo anterior • Si se puede obtener la menor distancia • De un V0 al resto • Tambien se puede obtener • La menor distancia de todos los vertices • Al resto • Se podria aplicar Dijkstra • A cada vertice • Y obtener n vectores D, o , una matriz F • Pero se puede aplicar otro algoritmo

  14. FLOYD • Este algoritmo se basa en Warshall • Se calculaba una secuencia de matrices Pk • Cada Pk evaluaba dos opciones • Que Pk-1 indicara camino entre Vi y Vj o • Que Pk-1 indicara camino entre Vi y Vj • Pasando por Vk • Floyd tambien calcula Fk, pero • Cada Fk escogera la menor distancia entre • Distancia entre Vi y Vj, indicado por Fk-1 o • Distancia entre Vi y Vj pasando por Vk, indicado por Fk-1

  15. ARBOL DE EXPANSION DE COSTE MINIMO • Dado un grafo G • No dirigido • Valorado, con pesos no negativos • El arbol de expansion minima • Es un grafo parcial conexo a partir de G • Tal que la suma de sus aristas sea minima • Ejemplo de aplicacion • Redes de comunicaciones, de costo minimo

  16. ALGORITMO DE PRIM • Dado el grafo, se debe seleccionar • Un vertice de inicio v • Dicho vertice v se añade a un conjunto W • Escoger el vertice u que no pertenezca a W • Adyacente a cualquiera de los vertices de W • Y que tenga un costo minimo • Añadir el vertice u al conjunto W • Repetir proceso hasta que V == W

  17. EJEMPLO Desde 1 1 2 1 2 3 6 4 4 6 5 8 3 4 5 6 7 4 3 7 1 W = , 2 , 3 , 4 , 5 , 7 , 6

  18. PRIM 1. Se crea un grafo nuevo con los mismos vertices del grafo original 2. vorigen se marca como visitado 3. Los arcos de vorigen, cuyos vertices destino no han sido visitados, se encolan por peso 4. Se desencola el menor en peso de los arcos no visitados(amenor) y su vertice destino se marca como visitado 5. En el nuevo grafo, se lanza el arco correspondiente a amenor(de ida y vuelta) 6. Se repite todo desde el punto 3 pero para un vorigen igual al vertice del arco sacado(amenor) hasta que el numero de vertices marcados como visitados sea igual al numero de vertices del grafo

  19. ALGORITMO DE KRUSKAL • Kruskal se basa en el concepto de • Componentes conexas • Sabemos que en el arbol de expansion • Deben aparecer todos los vertices de G • Lo que no sabemos aun • Es que arcos escoger para unirlos • Lo que a Kruskal le interesara elegir • Son los arcos, no los vertices, como en Prim

  20. COMO FUNCIONA • Primero añadir todos los vertices al arbol A • Estos forman n componentes conexas • Luego elegir el arco de costo minimo • Que no haya sido elegido anteriormente y que • No una dos vertices de una misma componente • Este proceso se repite hasta que • Se hayan unido todos los vertices • Es decir, n-1 veces

  21. EJEMPLO Desde 1 2 1 1 2 3 1 2 3 5 6 4 4 6 8 3 4 5 6 4 5 6 7 4 3 7 7

More Related