Está en la página 1de 32

Floyd/Warshall (Grafos

Dirigidos) - Grafos No Dirigidos


y sus algoritmos
Presentado por:
Ing. Oscar F. D’Cuire Galeano, MAP
Objetivos
Al finalizar esta sesión el alumno será capaz de:

• Describir el TDA Grafo No dirigido y sus


operaciones

• Aplicar los algoritmos de Floyd, Warshall a grafos


dirigidos

• Aplicar los algoritmos Prim y Kruskal a grafos no


dirigidos
Contenido
• Repaso
• Algoritmo Floyd
• Algoritmo Warshall
• Grafos no dirigidos
• Algoritmo de Prim
• Algoritmo de Kruskal
• Montículos
• Indicaciones Finales
Repaso
• Grafo • Dijkstra
– Utilizado para representar esquemas • Determina la distancia mas corta
donde los elementos se encuentran entre un vértice y el resto de los
interconectados/ relacionados entre vértices.
sí (redes). • Se utiliza una matriz D con las
– Estructura no lineal distancias que se van
– Formado a partir de Vértices y modificando
Aristas
5
• Grafo dirigido
– Se conocen como digrafo
– Hay aristas u  v
• Representación 4

• Matriz de Adyacencia
• Matriz de Costos
• Lista de Adyacencia
Algoritmo de Floyd
• Permite encontrar el camino mas corto entre cada
par de u  v
• Determina si utilizando un nodo intermedio k, es mas
corto que llegar a j desde i, que llegar de i a j
directamente
1. Repetir con K desde 1 hasta N
1.1 Repetir con I Desde 1 hasta N
1.1.1 Repetir con J desde 1 hasta N
1.1.1.1 Si (MIK + MKJ < MIJ) entonces
Hacer MIJ  MIK + MKJ
Ejercicio Floyd
1 2 3 4 5

1 0 ∞ 6 3 ∞

2 3 0 ∞ ∞ ∞

3 ∞ ∞ 0 2 ∞

4 ∞ 1 1 0 ∞

5 ∞ 4 ∞ 2 0

1 2 3 4 5
1
2
3
4
5
Ejercicio
• Determine el camino mas corto entre todos
los vértices del siguiente grafo
a 1 b

4 2
3

c d
Simulación de Floyd
• https://www.cs.usfca.edu/~galles/visualizatio
n/Floyd.html
Algoritmo Warshall
• Encuentra, si es posible, un camino entre cada
uno de los vértices del grafo dirigido.
• Se basa en un concepto llamado cerradura
transitiva
– La cerradura transitiva de M es la matriz C, tal que
C[i,j] = 1 si hay un camino de longitud mayor o
igual a 1 de i a j, 0 en otro caso.
Algoritmo Warshall
1. Repetir con K desde 1 hasta N
1.1 Repetir con I Desde 1 hasta N
1.1.1 Repetir con J desde 1 hasta N
1.1.1.1 Si (A[I,J] = 0) entonces
Hacer A[I,J]  A[I,K] + A[K,J]

1 1
Ejercicio - Warshall
1 2 3 4 5

1 0 0 1 1 0

2 1 0 0 0 0

3 0 0 0 1 0

4 0 1 1 0 0

5 0 1 0 1 0

1 2 3 4 5
1
2
3
4
5
Foro Caso de Éxito
• En el Aula Virtual (50%)
• En el Aula Presencial (50%)
• Aplicación, software o servicio que haya servido para resolver
problema, dificultar, etc…(documentada, fuente de 2 años,
con fecha)
Grafos no dirigidos
• Son estructuras de datos abstractos, deben utilizar otras
estructuras para ser representados en memoria.
• Se utilizan para modelar relaciones simétricas entre
diferentes objetos, representados por medio de vértices.
– Ejm. Distancia entre A y B es igual a la distancia entre B y A
• Se pueden representar mediante:
– Matriz de Adyacencia
– Lista de Adyacencia
• Se comportan igual que en los grafos dirigidos, con la
excepción de que:
– En el grafo no dirigido, M deberá ser una
matriz simétrica
Ejemplo de Grafo no dirigido
A B C D E
A 0 1 0 0 1
B 1 0 0 0 1
C 0 0 0 1 1
D 0 0 1 0 0
E 1 1 1 0 0
Árbol abarcador
• Es un árbol libre que conecta todos los
vértices de V.
• Un árbol abarcador de costo mínimo es el que
se forma a partir de las aristas de menor
costo.
• Se pueden construir utilizando los algoritmo
de
– Prim
– Kruskal
Algoritmo Prim
• Permite encontrar el árbol abarcador de costo
mínimo de un grafo.
• Utiliza dos conjuntos
– V: todos los vértices
– U: conjunto auxiliar iniciando desde el primer
vértice
– L: son las aristas de menor costo
Algoritmo Prim
1. Mientras (V <> U) Repetir
1.1 Elegir una arista (u,v) ϵ A(G) tal que su costo sea mínimo,
siendo u ϵ U y v ϵ (V-U)
1 1 2
1.2 Agregar la arista (u,v) a L
1.3 Agregar el nodo v a U
2. Fin 4

5
Algoritmo Prim
Iteración
Iteración UU (u,v)
(u,v) Costo
Costo vv LL UUactualizado
actualizado
11 {1}
{1} (1,2) 11 22 {(1,2)}
{(1,2)} {1,2}
{1,2}
22 {1,2}
{1,2} (2,3) 33 33 {(1,2),
{(1,2), (2,3)}
(2,3)} {1,2,3}
{1,2,3}
33 {1,2,3}
{1,2,3} (3,5)
(3,5) 22 55 {(1,2),
{(1,2), (2,3),(3,5)}
(2,3),(3,5)} {1,2,3,5}
{1,2,3,5}
4 {1,2,3,5} (3,4) 4 4 {(1,2), (2,3),(3,5), (3,4)} {1,2,3,5,4}

1 1 2

5
Ejercicio Prim
• Encuentre el árbol abarcador de costo mínimo
del siguiente grafo:
Iteración U (u,v) Costo v L U actualizado
Algoritmo Kruskal
• También permite encontrar el árbol abarcador de
menor costo de un grafo.
• Se inicia con un conjunto de Particiones P0 que
contiene a todos los vértices de V
• A partir de ahí se van buscando las aristas con costos
menores y si alguna une a dos vértices diferentes, los
vértices se sustituyen por un nuevo conjunto.
• Se continúa hasta incluir todos los vértices.
Algoritmo Kruskal
1. Mientras haya vértices en P que pertenezcan a particiones
distinas Repetir
1.1 De L seleccionar la arista (u,v) que tenga el menor costo
1.2 Si (u y v se encuentran en particiones diferentes)
1.2.1 Unir las particiones a las cuales pertenecen u y v
1 1 2

5
Algoritmo Kruskal
Iteración Arista Elegida Costo Particiones
Iteración
Iteración Arista Elegida
Arista Elegida Costo
Costo Particiones
Particiones
Iteración
0 Arista Elegida Costo Particiones
P0 = {{1},{2},{3},{4},{5}}
0 P = {{1},{2},{3},{4},{5}}
0
01 (1,2) 1 P0001 == {{1},{2},{3},{4},{5}}
P {{1},{2},{3},{4},{5}}
{{1,2},{3},{4},{5}}
11
2
(1,2)
(1,2)
(3,5) 11
2 PP1 1= = {{1,2},{3},{4},{5}}
{{1,2},{3},{4},{5}}
P2 = {{1,2},{3,5},{4}}
22
3
(3,5)
(3,5)
(1,3) 22
3 PP 2 = {{1,2},{3,4},{5}}
P23 == {{1,2},{3,4},{5}}
{{1,2,3,5},{4}}
1 1 2
3 (1,3) 3 P3 = {{1,2,3,5},{5}}
4 (3,4) 4 P4 = {1,2,3,5,4}

5
Ejercicio Kruskal
• Encuentre el árbol abarcador de costo mínimo
del grafo siguiente, utilizando el algoritmo de
Kruskal
Iteración Arista Elegida Costo Particiones
Montículo (heap)
• Montículo:
– Para todo nodo del árbol se debe cumplir que su valor sea
mayor o igual que el valor de cualquiera de sus hijos.
• Es el más eficiente de los métodos que trabaja con
árboles.
• Se basa en dos operaciones:
1. Construir un montículo
2. Eliminar la raíz del montículo en forma
repetida
Heapsort
• Representación de un montículo
– Para un arreglo lineal se debe tener en cuenta que
para todo nodo K:
• El nodo K se almacena en la posición K correspondiente del
arreglo.
• El hijo izquierdo del nodo K se almacena en la posición 2*K
• El hijo derecho del nodo K se almacena en la posición 2*K+1
• Padre de un nodo K se almacena en la posición: Parte Entera de
(K/2)
Representación de un montículo
67

36 60

28 21 56 44

27 16 15 08 35
1 2 3 4 5 6 7 8 9 10 11 12
• ¿Cómo encontrar el padre de 44? 67 36 60 28 21 56 44 27 16 15 08 35

• ¿Cuáles son los hijos del nodo 60?


• ¿En que índice se almacena el padre del nodo con valor 08?
• ¿En que índice se almacena el padre del nodo que se encuentra en el índice 8?
Inserción de un elemento en un
montículo
• Se realizan los siguientes pasos:
1. Se inserta el elemento en la primera posición
disponible. (completando niveles de izquierda a
derecha)
2. Se verifica si su valor es mayor que el de su
padre. Si se cumple esta condición, entonces se
intercambian. En caso contrario, el algoritmo se
detiene ya que el elemento se encuentra en su
posición correcta.
Ejercicio
• Inserte las siguientes claves en un montículo
que se encuentra vacío.
– 15, 60, 08, 16, 44, 27, 12, 35

1 2 3 4 5 6 7 8
Eliminación de un montículo
• Es el proceso necesario para obtener los elementos
ordenados.
• Se realizan los siguientes pasos:
1. Se reemplaza la raíz con el elemento que ocupa la última posición
del montículo (la raíz sale del montículo y pasa al final del arreglo)
2. Se verifica si el valor de la raíz es menor que el valor más grande de
sus descendientes (hijos e hijos de hijos, etc..). Si se cumple la
condición, se intercambian. En caso contrario, el algoritmo se
detiene ya que el elemento se encuentra en su posición correcta.
El paso 2 se aplica desde arriba hacia debajo de manera recursiva.
3. Al final del algoritmo los elementos se encontrarán ordenados en el
arreglo.
Eliminación de un montículo
• Ejemplo.
– Represente los siguientes elementos en un
montículo y obtenga los elementos ordenados.
– 60, 44, 27, 35, 16, 08, 12, 15
Actividades Pendientes
• Sesión virtual:
• 14/03 – 21/03
– Prueba Segundo Parcial
• 15/03 11 p.m.
– Publicación Foro Caso de Éxito
• 16/03 11 p.m.
– Tarea 7.2 Ejercicios Grafos
• 22/03 11 p.m.
– Tareas 5.3, 6.3, 8.3 Opcional
– Publicación y respuesta Foro 2 (Semana 6)
– Tarea 8.2 Ejercicios Grafos No dirigidos
• 23/03 11 p.m.
– Tarea 9.2 Ejercicios Ordenamiento
• 25/03 10 a.m.
– Entrega Proyecto final (Semana 10 - Actividades)
• 27/03 6 p.m. – 10 p.m.
– Examen II Parcial
• 29/03 11 p.m.
– Examen Reposición
Conclusiones
• Un grafo dirigido tiene una dirección específica para cada arista.
• Algunos algoritmos para encontrar caminos mas cortos son:
– Dijkstra, que encuentra el camino mas corto en un vértice origen y el resto de los nodos
– Floyd, que encuentra el camino mas corto entre todos los pares de nodos.
– Warshall, que determina si hay un camino entre todos los pares de nodos.
• Un grafo no dirigido representa una relación en ambas vías entre dos
vértices.
• El árbol abarcador es un grafo diseñado en forma de árbol que conecta a
todos los vértices del grafo.
• Los algoritmos de Prim y Kruskal permiten encontrar el árbol abarcador de
costo mínimo de un grafo.

También podría gustarte