GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.
-
Upload
lita-porto -
Category
Documents
-
view
34 -
download
1
Transcript of GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.
![Page 1: GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.](https://reader033.fdocument.pub/reader033/viewer/2022061303/54f277104a79592a388b48be/html5/thumbnails/1.jpg)
GRAFOS: ALGORITMOS FUNDAMENTALES
ESTRUCTURAS DE DATOS
![Page 2: GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.](https://reader033.fdocument.pub/reader033/viewer/2022061303/54f277104a79592a388b48be/html5/thumbnails/2.jpg)
MATRIZ DE CAMINOS Es una matriz cuadrada P,
Que representa si hay o no camino Entre dos vertices Vi y Vj
hay lo no si 0,
caminohay Vy V entre si ,1 jiPij
![Page 3: GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.](https://reader033.fdocument.pub/reader033/viewer/2022061303/54f277104a79592a388b48be/html5/thumbnails/3.jpg)
CIERRE TRANSITIVO Es el grafo resultante de la matriz de caminos Si un grafo es fuertemente conexo
Su cierre transitivo es un grafo completo
![Page 4: GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.](https://reader033.fdocument.pub/reader033/viewer/2022061303/54f277104a79592a388b48be/html5/thumbnails/4.jpg)
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
0 Bij si 0,
0 Bij si ,1Pij
![Page 5: GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.](https://reader033.fdocument.pub/reader033/viewer/2022061303/54f277104a79592a388b48be/html5/thumbnails/5.jpg)
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
![Page 6: GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.](https://reader033.fdocument.pub/reader033/viewer/2022061303/54f277104a79592a388b48be/html5/thumbnails/6.jpg)
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
![Page 7: GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.](https://reader033.fdocument.pub/reader033/viewer/2022061303/54f277104a79592a388b48be/html5/thumbnails/7.jpg)
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:
no si 0,
[k][j])P [i][k]P( [i][j]P si ,1 1-k1-k1-kPij
![Page 8: GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.](https://reader033.fdocument.pub/reader033/viewer/2022061303/54f277104a79592a388b48be/html5/thumbnails/8.jpg)
WARSHALL IMPLEMENTADOMatrizAdy 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;
}
![Page 9: GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.](https://reader033.fdocument.pub/reader033/viewer/2022061303/54f277104a79592a388b48be/html5/thumbnails/9.jpg)
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
![Page 10: GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.](https://reader033.fdocument.pub/reader033/viewer/2022061303/54f277104a79592a388b48be/html5/thumbnails/10.jpg)
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
![Page 11: GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.](https://reader033.fdocument.pub/reader033/viewer/2022061303/54f277104a79592a388b48be/html5/thumbnails/11.jpg)
EJEMPLO DE DIJKSTRA
V2 V5
V1
V3 V4
V6
38
5
34
7
3
2
Escogidos
Vertice Evaluado
D[0] D[1] D[2] D[3] D[4]D[5]
V1 V2 V3 V4 V5 V6
De V1 AL RESTO
V1 0 3 4 ∞ 8 ∞V1
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
V2
3. Revisar si alguna distancia puede ser mejorada pasando por Vk
Pasando por V2, Distacia de V1 a V5 seria 8, no hay
mejora
0 3 4 ∞ 8 ∞V1,V2
Repetir hasta k se hayan visitado todos los vertices
V3 0 3 4 ∞ 7 ∞V1,V2,V3
V5 0 3 4 14 8 10V1,V2,V3,V5
V6 0 3 4 12 8 10V1,V2,V3,V5,V6
Pasando por V3, Distacia de V1 a V5 seria 7, CAMBIAR
![Page 12: GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.](https://reader033.fdocument.pub/reader033/viewer/2022061303/54f277104a79592a388b48be/html5/thumbnails/12.jpg)
DIKSTRA1. 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 vmenorse 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
![Page 13: GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.](https://reader033.fdocument.pub/reader033/viewer/2022061303/54f277104a79592a388b48be/html5/thumbnails/13.jpg)
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
![Page 14: GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.](https://reader033.fdocument.pub/reader033/viewer/2022061303/54f277104a79592a388b48be/html5/thumbnails/14.jpg)
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
[k][j])) F[i][k] [i][j] ,(FMin(FFij k-k-k- 111
![Page 15: GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.](https://reader033.fdocument.pub/reader033/viewer/2022061303/54f277104a79592a388b48be/html5/thumbnails/15.jpg)
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
![Page 16: GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.](https://reader033.fdocument.pub/reader033/viewer/2022061303/54f277104a79592a388b48be/html5/thumbnails/16.jpg)
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
![Page 17: GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.](https://reader033.fdocument.pub/reader033/viewer/2022061303/54f277104a79592a388b48be/html5/thumbnails/17.jpg)
EJEMPLO
1 2 3
4 5 6
7
1
46
3
45
2
6
8
7
34
Desde 1
W = 1 , 2 , 3 , 4 , 5 , 7 , 6
![Page 18: GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.](https://reader033.fdocument.pub/reader033/viewer/2022061303/54f277104a79592a388b48be/html5/thumbnails/18.jpg)
PRIM1. Se crea un grafo nuevo con los
mismos vertices del grafo original2. vorigen se marca como visitado3. Los arcos de vorigen, cuyos vertices destino no han sido
visitados, se encolan por peso4. Se desencola el menor en peso de los arcos
no visitados(amenor) y su vertice destino se marca como visitado5. 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 visitadossea igual al numero de vertices del grafo
![Page 19: GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.](https://reader033.fdocument.pub/reader033/viewer/2022061303/54f277104a79592a388b48be/html5/thumbnails/19.jpg)
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
![Page 20: GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.](https://reader033.fdocument.pub/reader033/viewer/2022061303/54f277104a79592a388b48be/html5/thumbnails/20.jpg)
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
![Page 21: GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS.](https://reader033.fdocument.pub/reader033/viewer/2022061303/54f277104a79592a388b48be/html5/thumbnails/21.jpg)
EJEMPLO
1 2 3
4 5 6
7
1
4 6
3
45
2
68
734
Desde 1 1 2 3
4 5 6
7