Beruflich Dokumente
Kultur Dokumente
• Grafos Dirigidos
Algoritmo de Dijkstra
Algoritmo de Floyd – Warshall
• Grafos No Dirigidos
Algoritmo de Dijkstra
Algoritmo de Kruskal
Algoritmo de Prim
Algoritmo de Floyd
Encuentra el camino mas corto entre todos los vértices del dígrafo.
Sea el grafo dirigido G=(V,A), donde cada arista u --> v tiene asociado un
peso. El algoritmo de Floyd permite encontrar el camino mas corto entre
cada par ordenado u y v
La matriz de distancia sirve como punto de partida de este algoritmo
Se realizan k iteraciones sobre la matriz buscando el camino mas corto,
por tanto en la k-esima iteración
Algoritmo de Floyd
Uso del vértice c como vértice intermedio Uso del vértice e como vértice intermedio
K=3, caminos: e c b = 8 K=5, caminos: a e d= 9, b e c=7, b e d =5
Algoritmo de Warshall
Resultado de usar el vértice c como intermedio, Resultado de usar el vértice e como intermedio
caminos encontrados: e,c,b y e,c,e caminos encontrados: a,e,a,b,e,b,b,e,c y c,e,c
Algoritmo Floyd Wharshall
Matriz de Pesos
Matriz de Pesos
Algoritmo Floyd Wharshall
v1 v2 v3 v4 v5
v2
7 v1 0 7 2 -- --
v2 -- 0 -- -- 1
1
v3 -- 4 0 2 --
4 v5
1 v4 -- 1 -- 0 1
v1
v5 -- -- -- -- 0
1
2 v3 v4
2
Algoritmo Floyd Wharshall
USANDO v1 COMO VERTICE INTERMEDIO
v1 v2 v3 v4 v5
v2
7 v1 0 7 2 -- --
v2 -- 0 -- -- 1
1
v3 -- 4 0 2 --
4 v5
1 v4 -- 1 -- 0 1
v1
v5 -- -- -- -- 0
1
2 v3 v4
2
v2
7 v1 0 7 2 -- 8
v2 -- 0 -- -- 1
1
v3 -- 4 0 2 --
4 v5
1 v4 -- 1 -- 0 1
v1
v5 -- -- -- -- 0
1
2 v3 v4
Estudiando V1 a los demas 2
v2
7 v1 0 7 2 -- 8
v2 -- 0 -- -- 1
1
v3 -- 4 0 2 --
4 v5
1 v4 -- 1 -- 0 1
v1
v5 -- -- -- -- 0
1
2 v3 v4
2
Estudiando V2 a los demás (v1, v3,v4,v5)
Por ser el intermedio no se considera nada
Algoritmo Floyd Wharshall
USANDO v2 COMO VERTICE INTERMEDIO
v1 v2 v3 v4 v5
v2
7 v1 0 7 2 -- 8
v2 -- 0 -- -- 1
1
v3 -- 4 0 2 5
4 v5
1 v4 -- 1 -- 0 1
v1
v5 -- -- -- -- 0
1
2 v3 v4
2
Estudiando V3 a los demás (v1, v4,v5)
Analizar las rutas de v3 a v1 usando v2 como intermedio = --
Analizar las rutas de v3 a v4 usando v2 como intermedio = --
Analizar las rutas de v3 a v5 usando v2 como intermedio = 4+1=5
Algoritmo Floyd Wharshall
USANDO v2 COMO VERTICE INTERMEDIO
v1 v2 v3 v4 v5
v2
7 v1 0 7 2 -- 8
v2 -- 0 -- -- 1
1
v3 -- 4 0 2 5
4 v5
1 v4 -- 1 -- 0 1
v1
v5 -- -- -- -- 0
1
2 v3 v4
2
Estudiando V4 a los demás (v1, v3,v5) No se cambia por ser mayor
v2
7 v1 0 7 2 -- 8
v2 -- 0 -- -- 1
1
v3 -- 4 0 2 5
4 v5
1 v4 -- 1 -- 0 1
v1
v5 -- -- -- -- 0
1
2 v3 v4
2
Estudiando V5 a los demás (v1, v3,v4)
Analizar las rutas de v5 a v1 usando v2 como intermedio = --
Analizar las rutas de v5 a v3 usando v2 como intermedio = --
Analizar las rutas de v5 a v4 usando v2 como intermedio = -- No se cambia no existe camino
Algoritmo Floyd Wharshall
USANDO v3 COMO VERTICE INTERMEDIO
v1 v2 v3 v4 v5
v2
7 v1 0 6 2 4 5
v2 -- 0 -- -- 1
1 v3 -- 4 0 2 5
4 v5
1 v4 -- 1 -- 0 1
v1
v5 -- -- -- -- 0
1
2 v3 v4
2
Desde v1
v2
7 v1 0 6 2 4 5
v2 -- 0 -- -- 1
1
v3 -- 4 0 2 5
4 v5
1 v4 -- 1 -- 0 1
v1
v5 -- -- -- -- 0
1
2 v3 v4
2
Desde v2
v2
7 v1 0 5 2 4 5
v2 -- 0 -- -- 1
1
v3 -- 4 0 2 5
4 v5
1 v4 -- 1 -- 0 1
v1
v5 -- -- -- -- 0
1
2 v3 v4
2
Desde v3
No se considera por ser intermedio
Desde v4
v2
7 v1 0 5 2 4 5
v2 -- 0 -- -- 1
1
v3 -- 4 0 2 5
4 v5
1 v4 -- 1 -- 0 1
v1
v5 -- -- -- -- 0
1
2 v3 v4
2
v2
7 v1 0 5 2 4 5
v2 -- 0 -- -- 1
1
v3 -- 4 0 2 5
4 v5
1 v4 -- 1 -- 0 1
v1
v5 -- -- -- -- 0
1
2 v3 v4
2
P(v2,v1) --
P(v2,v3) --
P(v2,v5) --
Algoritmo Floyd Wharshall
USANDO v4 COMO VERTICE INTERMEDIO
v1 v2 v3 v4 v5
v2
7 v1 0 5 2 4 5
v2 -- 0 -- -- 1
1
v3 -- 3 0 2 3
4 v5
1 v4 -- 1 -- 0 1
v1
v5 -- -- -- -- 0
1
2 v3 v4
2
P(v3,v1) --
P(v3,v2) 3
P(v3,v5) 3
Algoritmo Floyd Wharshall
USANDO v4 COMO VERTICE INTERMEDIO
v1 v2 v3 v4 v5
v2
7 v1 0 5 2 4 5
v2 -- 0 -- -- 1
1
v3 -- 3 0 2 3
4 v5
1 v4 -- 1 -- 0 1
v1
v5 -- -- -- -- 0
1
2 v3 v4
2
P(v3,v1) --
P(v3,v2) 3
P(v3,v5) 3
v2
7 v1 0 5 2 4 5
v2 -- 0 -- -- 1
1
v3 -- 3 0 2 3
4 v5
1 v4 -- 1 -- 0 1
v1
v5 -- -- -- -- 0
1
2 v3 v4
2
v2
RESULTADO 7 v1 0 5 2 4 5
v2 -- 0 -- -- 1
1
v3 -- 3 0 2 3
4 v5
1 v4 -- 1 -- 0 1
v1
v5 -- -- -- -- 0
1
2 v3 v4 Matriz de camino mas corto
2
2
c e 2
10
2
c e 2
10
2
c e 2
10
2
c e 2
10
2
c e 2
10
2
c e 2
10
5
b d 6
4
8
1
s 2 t
2
c e 3
10
1
B C
7
A 3 2 8
4 5
2
D E
5
Grafos Dirigidos – Algoritmo de Dijstra
método de etiquetas
Algoritmo de Dijstra con grafos Dirigidos - Ejercicio
Calcular la ruta y la distancia mas corta desde el vertice 1 al vertice
6 aplicando el método de Dijkstra
1
2 4
2
2
3
1 6
1 2
3 5
4
Etiquetado
[8,B](2)
Valor
Vertice de Numero de
Acumulad
donde iteración
o
procede
(antecesor)
Algoritmo de Dijkstra
[2,1](1 [4,3](2
)
1 ) [3,2](3
2 4
)
2
2
3
[0,- 1 6 [5,4](4
](0) )
1 2
3 5
4
[1,1](1 [5,3](2
) )
RUTA: 1 2 4 6
- - -
Distancia: 5
Ejercicio 1
Aplicando el algoritmo de Dijkstra
El árbol de expansión mínima seria el primer árbol de expansión cuyo peso total es 6.
El problema de hallar el Árbol de Expansión Mínima (MST) puede ser resuelto con varios algoritmos, los
mas conocidos con Prim y Kruskal
Arbol de Cubrimiento Minimo
¿Como funciona?
El algoritmo incrementa continuamente el
tamaño del árbol, comenzando por un vértice
inicial al que se le va agregando vértices, cuya
distancia a los anteriores debe ser mínima
Caso Ejemplo – Algoritmo de Prim
Joseph B. Kruskal (29 de enero de 1928 –
Maplewood, Nueva Jersey, 19 de septiembre de
2010) fue un matemático y estadístico
estadounidense.
Algoritmo de Kruskal
Algoritmo de Kruskal
B
B 8
8 12
12
A
A
10 C
10 C
B
8
12
10 C
Arbol generador de minimo coste
Algoritmo de Kruskal
GRAFOS
Ejercicios
Ejercicio Practico
1 1
1 4
5
c b
RESULTADO Ejercicio Practico
2
e d
5
3 1 1
2
2
z f g a
1 1
1 4
5
c b
6
5 c
b e
3
4
5 1 t
9
s 8
2
2
a f
d
3 10
Aplicar el algoritmo de Kruskal para obtener el camino de ruta mínima
EJERCICIO: Obtener el árbol de cubrimiento mínimo
25
Jmaria 5
Comas E Breña
A 20 H
Los
16
Olivos
10 7
C
12 4
5 Lima 6 UNMS
F M
15 J
70 7
SMP 8
D
Plibre
40 I
9
13
SJL 12
B
56
Callao
G
EJERCICIO: Obtener el camino mínimo entre SJL y La UNMSM en base al grafo
dirigido
25 Jmaria 5
Comas E Breña
A 20 H
16 7
Los
Olivos
8 10
C 4
13 12
5 Lima 6 UNMS
F M
15 8 J
70 SMP
7
D
Plibre
40 45
I
9
13
SJL 12
B
56
Callao
G
Encontrar el árbol de cobertura minima,
utilizando el algoritmo de Kruskal.
2
3 E 3 4
4 J
4
1
S C
3 H T
2 3
2
F
K 5
2
6 4 2
D
I
Grafos
Grafos Eulerianos
Grafos Hamiltonianos
Sesión 14
Gustavo Arredondo C.
Grafo Euleriano
Un circuito Euleriano en un grafo o multigrafo G es un circuito que
recorre cada arista una y sólo una vez.
Un grafo o multigrafo es Euleriano si tiene un circuito Euleriano.
Ciclo Euleriano
Un ciclo euleriano o circuito euleriano es aquel camino que recorre
todas las aristas de un grafo tan solo una única vez, siendo condición
necesaria que regrese al vértice inicial de salida (ciclo = camino en
un grafo donde coinciden vértice inicial o de salida y vértice final o
meta). Una definición más formal lo define como: "aquel ciclo que
contiene todas las aristas de un grafo solamente una vez".
Se debe tener en cuenta que no importa la repetición de vértices
mientras no se repitan aristas
Grafo Euleriano
c) El circuito v1 e1 v2 e2 v1 es euleriano.
d) El circuito v3 e3 v1 e1 v2 e2 v3 es euleriano.
e) No admite ningún circuito euleriano.
f) v1 e1 v2 e2 v3 e3 v4 e4 v2 e5 v5 e6 v1 es un circuito euleriano.
Teorema
Existe un criterio preciso para saber cuando un grafo admite un circuito
Euleriano. Este criterio lo proporciona el siguiente teorema.
Teorema. Sea G un grafo. G contiene un circuito euleriano sí y sólo sí:
G es conexo.
Cada vértice de G es de grado par.
Ejercicio
13
1 5
6 4
14 3
5 15
7 9 11 8
2 10
16
Aplicando Prim
Ejercicio 2
Calcular mediante el algoritmo de Kruskal un arbol generador
minimo del grafo
f 3 e
c
1
3 6
5
1 2
3
7
g h d
2 7 5
4 2
2 b
a
f 3 e
c
1
3 6
5
1 2
3
7
g h d
2 7 5
4 2
2 b
a
Peso: 1 + 1 + 2 + 2 + 2 + 2 + 3 = 13
f 3 e
c
1
3 6
5
1 2
3
7
g h d
2 7 5
4 2
2 b
a
Ejercicio 3
Calcular la ruta y la distancia mas corta desde el vertice 1 al vertice
6 aplicando el método de Dijkstra
1
2 4
2
2
3
1 6
1 2
3 5
4
Etiquetado
[8,B](2)
Valor
Vertice de Numero de
Acumulad
donde iteración
o
procede
(antecesor)
Algoritmo de Dijkstra
[2,1](1 [4,3](2
)
1 ) [3,2](3
2 4
)
2
2
3
[0,- 1 6 [5,4](4
](0) )
1 2
3 5
4
[1,1](1 [5,3](2
) )
RUTA: 1 2 4 6
- - -
Distancia: 5
[1,A]( [6,C](
1 5
A
1)
C F [5,D](3
2)
[0,-
) 3
2 2
](0) 3
1 [8,F](5)
B D [3,C]( H
5 [3,A]( 2) 4
[8,E](6)
1
[4,D]
1)
(3
G ) EE [7,D](3
2
)
[8,B](4)
Ruta 1: A- C-D- F- H
Distancia: 8
Ruta 2: A- C-D- E- H
Ejercicios
Ejercicio 1
MATEMATICAMENTE
Ejercicio 2
Dados los siguientes nodos, verificar si se puede construir un arbol tipo heap-min y un árbol
tipo heap-max
12 10 4 20 50 9 64 43 34 54 67 23
Ejercicio: Arboles ABB