SlideShare una empresa de Scribd logo
GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS www.espol.edu.ec www.fiec.espol.edu.ec
MATRIZ DE CAMINOS Es una matriz cuadrada P,  Que representa si hay o no camino Entre dos vértices Vi y Vj
CIERRE TRANSITIVO Es el grafo resultante de la matriz de caminos Si un grafo es fuertemente conexo Su cierre transitivo es un grafo completo
UN POSIBLE ALGORITMO Entre Vi y Vj puede haber camino Directo, cuando A[i][j] == 1, camino de long. 1 O pasando por otros vértices 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, A 2 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 + A 2  + A 3  + A 4  +….  A n
WARSHALL: MAS EFICIENTE El anterior algoritmo Es poco eficiente, peor Cuando el grafo tiene muchos vértices 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 vértice Vk-1 al análisis Para saber y a través de Vk-1 hay camino entre V1 y Vj
COMO FUNCIONA Existe una matriz inicial  P0 Indica si hay o no camino  DIRECTO  de  Vi  a  Vj La matriz que le sigue  P1 Indicaría si hay o no camino  DIRECTO  (Esto ya lo sabe  P0 )  O pasando por  V0  (añade este vértice al análisis) P2 Indicaría si hay camino  DIRECTO  o pasando por  V0  (Esto ya lo sabe  P1 ) O pasando por  V1 P3 Indicaría si hay camino  DIRECTO  o pasando por  V0 , o  V1  (Lo sabe  P2 ) O pasando por  V2 Pk Indicaría lo que ya sabe  Pk-1 O pasando por  Vk-1
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:
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; }
CAMINOS MAS CORTOS Frecuentemente, se desea conocer en una red Cual es el camino mas corto  Entre un par de vértices 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 ávido, ya que Resuelve el problema en sucesivos pasos En cada paso Selecciona la solución mas optima
DIJKSTRA Dado un V0, Dijkstra busca un conjunto  D  con Las menores distancias de V0 al resto de vértices 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 vértice 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 Vértice restante del grafo
EJEMPLO DE DIJKSTRA V2 V5 V1 V3 V4 V6 3 8 5 3 4 7 3 2 Escogidos Vértice 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 inicializa con F.P. de adyacentes al origen  2. Escoger vértice 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, Distancia de V1 a V5 seria 8, no hay mejora 0 3 4 ∞ 8 ∞ V1,V2 Repetir hasta k se hayan visitado todos los vértices V3 0 3 4 ∞ 7 ∞ V1,V2,V3 V5 0 3 4 14 7 10 V1,V2,V3,V5 V6 0 3 4 12 7 10 V1,V2,V3,V5,V6 Pasando por V3, Distancia de V1 a V5 seria 7, CAMBIAR
DIKSTRA 1. Se crea una lista de VDiks con todos los vértices del grafo,  y cada VDiks creado también 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 vértice es adyacente al  vértice de vmenor y si pasando por vmenor se puede conseguir una mejor distancia  Si es así, se modifica v con los nuevos datos 4.  Se repite todo desde el paso 2  hasta que no haya nada mas en la cola
CAMINOS MAS CORTOS ENTRE TODOS LOS PARES DE VERTICES Es una generalización de lo anterior Si se puede obtener la menor distancia De un V0 al resto También se puede obtener La menor distancia de todos los vértices Al resto Se podría aplicar Dijkstra  A cada vértice Y obtener n vectores D, o , una matriz F Pero se puede aplicar otro algoritmo
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
ARBOL DE EXPANSION DE COSTE MINIMO Dado un grafo G No dirigido Valorado, con pesos no negativos El árbol de expansión mínima Es un grafo parcial conexo a partir de G Tal que la suma de sus aristas sea mínima Ejemplo de aplicación Redes de comunicaciones, de costo mínimo
ALGORITMO DE PRIM Dado el grafo, se debe seleccionar Un vértice de inicio v Dicho vértice v se añade a un conjunto W Escoger el vértice  u  que no pertenezca a W Adyacente a cualquiera de los vértices de W Y que tenga un costo mínimo Añadir el vértice u al conjunto W Repetir proceso hasta que V == W
EJEMPLO 1 2 3 4 5 6 7 1 4 6 3 4 5 2 6 8 7 3 4 Desde 1 W =  1 , 2 , 3 , 4 , 5 , 7 , 6
PRIM 1. Se crea un grafo nuevo con los  mismos vértices del grafo original 2. vorigen se marca como visitado 3. Los arcos de vorigen, cuyos vértices destino no han sido  visitados, se encolan por peso 4. Se desencola el menor en peso de los arcos  no visitados(amenor)  y su vértice 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 vértice del arco sacado(amenor) hasta que el numero de vértices marcados como visitados sea igual al numero de vértices del grafo
ALGORITMO DE KRUSKAL Kruskal se basa en el concepto de Componentes conexas Sabemos que en el árbol de expansión  Deben aparecer todos los vértices 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 vértices, como en Prim
COMO FUNCIONA Primero añadir todos los vértices al árbol A Estos forman n componentes conexas Luego elegir el arco de costo mínimo Que no haya sido elegido anteriormente y que No una dos vértices de una misma componente Este proceso se repite hasta que Se hayan unido todos los vértices Es decir, n-1 veces
EJEMPLO 1 2 3 4 5 6 7 1 4 6 3 4 5 2 6 8 7 3 4 Desde 1 1 2 3 4 5 6 7

Más contenido relacionado

PPTX
Enfoques.
PPTX
Algoritmo warshall
PDF
Transformada zeta
PDF
La transformada zeta
DOCX
Control digital unidad # 2
DOC
55852564 metodo-de-cross
DOCX
Ejercicios transformada z
PDF
Analisis de-estructuras-de-segundo-orden
Enfoques.
Algoritmo warshall
Transformada zeta
La transformada zeta
Control digital unidad # 2
55852564 metodo-de-cross
Ejercicios transformada z
Analisis de-estructuras-de-segundo-orden

La actualidad más candente (11)

PPTX
Funcion De Transferencia
PPTX
PPT
Kruskal
DOCX
Guía rectangular. Onda TM
PDF
Taller de transformaciones lineales
PPT
Transformada Zeta
PPT
Estabilidad y lgr
PDF
Criterio de estabilidad en los s.de control automatico
PDF
Unidad 2 control 2 /FUNCIÓN DE TRANSFERENCIA PULSO
PDF
Analisis estructural 2
PDF
2 el tensor_de_tensiones
Funcion De Transferencia
Kruskal
Guía rectangular. Onda TM
Taller de transformaciones lineales
Transformada Zeta
Estabilidad y lgr
Criterio de estabilidad en los s.de control automatico
Unidad 2 control 2 /FUNCIÓN DE TRANSFERENCIA PULSO
Analisis estructural 2
2 el tensor_de_tensiones
Publicidad

Similar a Grafos 2 (20)

PPT
Grafos Iii
PPT
Grafos
PPT
Grafos
PPT
Grafos
PPT
Algoritmo de Dijkstra
PPTX
Floyd Prim y Kruscal
PPTX
Presentación_T3_JoséJaén (1).pptx
PDF
grafosalgoritmosfundamentales-170507070811.pdf
PPTX
Algoritmos de Dijkstra, Warshall, Ordenación Topológica.
PDF
Grafos-2021.pdf
PDF
Flyd+Warshall
PPTX
PPT
Grafos[1]
PPTX
Modelo del camino mas corto.pptx
PDF
Algoritmo de dijkstra tutorial interactivo
PPT
GRAFOS_Eulerianos_Hamiltonianos.ppthgfff
PPTX
Presentación OR Problemas de Caminos Más Cortos
PDF
Teoría de Grafos en sage
Grafos Iii
Grafos
Grafos
Grafos
Algoritmo de Dijkstra
Floyd Prim y Kruscal
Presentación_T3_JoséJaén (1).pptx
grafosalgoritmosfundamentales-170507070811.pdf
Algoritmos de Dijkstra, Warshall, Ordenación Topológica.
Grafos-2021.pdf
Flyd+Warshall
Grafos[1]
Modelo del camino mas corto.pptx
Algoritmo de dijkstra tutorial interactivo
GRAFOS_Eulerianos_Hamiltonianos.ppthgfff
Presentación OR Problemas de Caminos Más Cortos
Teoría de Grafos en sage
Publicidad

Más de Johanna Toledo Morillo (19)

PPT
Logica Juridica
DOC
Contrato Ocasional
DOC
Rodrigo Borja Cevallos
PPT
Ventajas De La ComunicacióN
PPT
Niveles De La ComunicacióN Oral
PPT
PPT
Crear vocabulario
PPT
Gran Depresion
PPT
Comunicación Oral
PPT
Comunicaciòn Interpersonal
PPT
Comunicación Empresarial
PPT
PPT
1 Tipos De Datos Ejercicios
PPT
Tipos De Datos
PPT
Tipo de Datos
PPT
U 1 Ae. %2 Bconceptos%2 Bbasicos%2 Bde%2 Badminist.%2 By%2 Borganiz
Logica Juridica
Contrato Ocasional
Rodrigo Borja Cevallos
Ventajas De La ComunicacióN
Niveles De La ComunicacióN Oral
Crear vocabulario
Gran Depresion
Comunicación Oral
Comunicaciòn Interpersonal
Comunicación Empresarial
1 Tipos De Datos Ejercicios
Tipos De Datos
Tipo de Datos
U 1 Ae. %2 Bconceptos%2 Bbasicos%2 Bde%2 Badminist.%2 By%2 Borganiz

Grafos 2

  • 1. GRAFOS: ALGORITMOS FUNDAMENTALES ESTRUCTURAS DE DATOS www.espol.edu.ec www.fiec.espol.edu.ec
  • 2. MATRIZ DE CAMINOS Es una matriz cuadrada P, Que representa si hay o no camino Entre dos vértices 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 vértices 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, A 2 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 + A 2 + A 3 + A 4 +…. A n
  • 5. WARSHALL: MAS EFICIENTE El anterior algoritmo Es poco eficiente, peor Cuando el grafo tiene muchos vértices 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 vértice Vk-1 al análisis Para saber y a través de Vk-1 hay camino entre V1 y Vj
  • 6. COMO FUNCIONA Existe una matriz inicial P0 Indica si hay o no camino DIRECTO de Vi a Vj La matriz que le sigue P1 Indicaría si hay o no camino DIRECTO (Esto ya lo sabe P0 ) O pasando por V0 (añade este vértice al análisis) P2 Indicaría si hay camino DIRECTO o pasando por V0 (Esto ya lo sabe P1 ) O pasando por V1 P3 Indicaría si hay camino DIRECTO o pasando por V0 , o V1 (Lo sabe P2 ) O pasando por V2 Pk Indicaría 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 vértices 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 ávido, ya que Resuelve el problema en sucesivos pasos En cada paso Selecciona la solución mas optima
  • 10. DIJKSTRA Dado un V0, Dijkstra busca un conjunto D con Las menores distancias de V0 al resto de vértices 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 vértice 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 Vértice restante del grafo
  • 11. EJEMPLO DE DIJKSTRA V2 V5 V1 V3 V4 V6 3 8 5 3 4 7 3 2 Escogidos Vértice 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 inicializa con F.P. de adyacentes al origen 2. Escoger vértice 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, Distancia de V1 a V5 seria 8, no hay mejora 0 3 4 ∞ 8 ∞ V1,V2 Repetir hasta k se hayan visitado todos los vértices V3 0 3 4 ∞ 7 ∞ V1,V2,V3 V5 0 3 4 14 7 10 V1,V2,V3,V5 V6 0 3 4 12 7 10 V1,V2,V3,V5,V6 Pasando por V3, Distancia de V1 a V5 seria 7, CAMBIAR
  • 12. DIKSTRA 1. Se crea una lista de VDiks con todos los vértices del grafo, y cada VDiks creado también 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 vértice es adyacente al vértice de vmenor y si pasando por vmenor se puede conseguir una mejor distancia Si es así, 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 generalización de lo anterior Si se puede obtener la menor distancia De un V0 al resto También se puede obtener La menor distancia de todos los vértices Al resto Se podría aplicar Dijkstra A cada vértice 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 árbol de expansión mínima Es un grafo parcial conexo a partir de G Tal que la suma de sus aristas sea mínima Ejemplo de aplicación Redes de comunicaciones, de costo mínimo
  • 16. ALGORITMO DE PRIM Dado el grafo, se debe seleccionar Un vértice de inicio v Dicho vértice v se añade a un conjunto W Escoger el vértice u que no pertenezca a W Adyacente a cualquiera de los vértices de W Y que tenga un costo mínimo Añadir el vértice u al conjunto W Repetir proceso hasta que V == W
  • 17. EJEMPLO 1 2 3 4 5 6 7 1 4 6 3 4 5 2 6 8 7 3 4 Desde 1 W = 1 , 2 , 3 , 4 , 5 , 7 , 6
  • 18. PRIM 1. Se crea un grafo nuevo con los mismos vértices del grafo original 2. vorigen se marca como visitado 3. Los arcos de vorigen, cuyos vértices destino no han sido visitados, se encolan por peso 4. Se desencola el menor en peso de los arcos no visitados(amenor) y su vértice 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 vértice del arco sacado(amenor) hasta que el numero de vértices marcados como visitados sea igual al numero de vértices del grafo
  • 19. ALGORITMO DE KRUSKAL Kruskal se basa en el concepto de Componentes conexas Sabemos que en el árbol de expansión Deben aparecer todos los vértices 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 vértices, como en Prim
  • 20. COMO FUNCIONA Primero añadir todos los vértices al árbol A Estos forman n componentes conexas Luego elegir el arco de costo mínimo Que no haya sido elegido anteriormente y que No una dos vértices de una misma componente Este proceso se repite hasta que Se hayan unido todos los vértices Es decir, n-1 veces
  • 21. EJEMPLO 1 2 3 4 5 6 7 1 4 6 3 4 5 2 6 8 7 3 4 Desde 1 1 2 3 4 5 6 7