SlideShare una empresa de Scribd logo
Grafos, algoritmos
fundamentales.
Autor: Bryan Aguilar
Docente: Ing. Ángel Vásquez
CAPÍTULO 16.
Programación 3: “Estructura de Archivos.”
1
Contenido:
1. Introducción.
2. Concepto de Grafo.
3. Ordenación topológica.
4. Implementación Java.
5. Matriz de Caminos: Algoritmo de
Warshall.
6. Implementación Java.
7. Caminos más cortos con un solo
origen: Algoritmo de Dijkstra.
8. Implementación Java.
9. Conclusiones
10. Referencias y enlace de códigos.
2
Introducción.
Existen numerosos problemas que se pueden modelar en términos de
grafos.
Por ejemplo: la planificación de las tareas que completan un proyecto,
encontrar las rutas de menor longitud entre dos puntos geográficos,
calcular el camino más rápido en un transporte, etc.
Se estudian en este capítulo el concepto de ordenación topológica, los
problemas del camino más corto, estos algoritmos han sido desarrollado
por grandes investigadores y en su honor se conocen por sus nombre es:
Dijkstra, Warshall, Prim, Kruscal, Ford-Fulkerson entre otros. 3
Grafos:
Los grafos son un conjunto de nodos y aristas conectadas entre sí. En
el ámbito de las ciencias de la computación es un tipo abstracto de
datos (TAD), que consiste en un conjunto de nodos (también llamados
vértices) y un conjunto de arcos (aristas) que establecen relaciones
entre los nodos.
Ejemplo:
4
Ordenación Topológica.
Es un sistema de ordenamiento de un grafo acíclico (no tiene ciclos).
Consiste en organizar de forma lineal/lista (ascendente/descendente),
una serie de vértices en desorden, primero se debe de empezar de un
"vértice padre" (sin predecesores), y después visitar a sus vecinos,
después de que haya visitado a todos sus vecinos, pasa a analizar otro
vértice, identifica sus vecinos, y así recursivamente, hasta que haya
visitado a todos los vértices.
“En pocas palabras no se visitará un vértice, hasta que todos sus
predecesores hayan sido visitados”.
5
Ejemplo: estructura de prerrequisito de 8 cursos.
T12
E11
C22
M21
R23 S32
S31 T41
Un arista cualquiera (r,s)
significa que el curso “r” debe
completarse antes de empezar
el curso s.
6
Encontrando el orden topológico.
T12
E11
C22
M21
R23 S32
S31 T41
0
2
2
2
2
1
1
0
7
Encontrando el orden topológico.
T12
E11
C22
M21
R23 S32
S31 T41
0
2
2
2
2
1
1
0
8
Encontrando el orden topológico.
T12
E11
C22
M21
R23 S32
S31 T41
2
2
2
1
1
1
0
E11 - 9
Encontrando el orden topológico.
T12
E11
C22
M21
R23 S32
S31 T41
2
2
2
1
1
1
E11 - 10
Encontrando el orden topológico.
T12
E11
C22
M21
R23 S32
S31 T41
2
2
2
0
0
0
E11 - T12 - 11
Encontrando el orden topológico.
T12
E11
C22
M21
R23 S32
S31 T41
2
2
2
0
0
0
E11 - T12 - 12
Encontrando el orden topológico.
T12
E11
C22
M21
R23 S32
S31 T41
2
2
1
0
0
E11 - T12 - M21 - 13
Encontrando el orden topológico.
T12
E11
C22
M21
R23 S32
S31 T41
2
2
1
0
0
E11 - T12 - M21 - 14
Encontrando el orden topológico.
T12
E11
C22
M21
R23 S32
S31 T41
2
2
1
0
E11 - T12 - M21 - C22 - 15
Encontrando el orden topológico.
T12
E11
C22
M21
R23 S32
S31 T41
2
2
1
0
E11 - T12 - M21 - C22 - 16
Encontrando el orden topológico.
T12
E11
C22
M21
R23 S32
S31 T41
2
1
0
E11 - T12 - M21 - C22 - R23 17
Encontrando el orden topológico.
T12
E11
C22
M21
R23 S32
S31 T41
2
1
0
E11 - T12 - M21 - C22 - R23 18
Encontrando el orden topológico.
T12
E11
C22
M21
R23 S32
S31 T41
1
0
E11 - T12 - M21 - C22 - R23 - S31 - 19
Encontrando el orden topológico.
T12
E11
C22
M21
R23 S32
S31 T41
1
0
E11 - T12 - M21 - C22 - R23 - S31 - 20
Encontrando el orden topológico.
T12
E11
C22
M21
R23 S32
S31 T41
0
E11 - T12 - M21 - C22 - R23 - S31 - S32 - 21
Encontrando el orden topológico.
T12
E11
C22
M21
R23 S32
S31 T41
0
E11 - T12 - M21 - C22 - R23 - S31 - S32 - 22
Encontrando el orden topológico.
T12
E11
C22
M21
R23 S32
S31 T41
E11 - T12 - M21 - C22 - R23 - S31 - S32 - T41 23
Ordenación Topológica.
Una ordenación topológica de estos cursos es cualquier secuencia
de cursos que cumple los requerimientos (prerrequisito). Entonces,
para un grafo dirigido acíclico no tiene por qué existir una única
ordenación topológica.
Ordenaciones topológicas:
E11 - T12 - M21 - C22 - R23 - S31 - S32 - T41
T12 - E11 - R23 - C22 - M21 - S31 - S32 - T41
24
Algoritmo de Ordenación Topológica.
★ Busca un vértice “V” que no contenga predecesores (Sin arcos de
entrada).
★ Este vértice “V” pasa a formar parte de la ordenación “T” (Cola).
★ Ya que el vértices sin predecesores, se añadió a “T”, este es eliminado del
grafo inicial (Todos los arcos que salen de “V” son eliminados). Y se
disminuye el grado de los vértices adyacentes.
★ Se repite el proceso.
★ Se toma otro vértices “W”, que no contenga arcos de entrada.
★ Se incorpora a la ordenación “T”. 25
Implementación. Algoritmo de Ordenación Topológica.
Representación de un grafo dirigido con una lista de adyacencia y una pila para la
ordenación de los elementos.
26
27
28
5
4
0
2 3
1
Ejecución. Algoritmo de Ordenación Topológica.
29
30
Complejidad de la ordenación topológica.
La complejidad de este algoritmo depende de la
representación del grafo.
★ Representación del grafo con listas de adyacencia,
es O(a+n), siendo “a” el número de arcos y “n” el
número de vértices.
★ Representación de un grafo con una matriz de
adyacencia, la complejidad es O(n2).
31
Matriz de Caminos: Algoritmo de Warshall.
★ Calcula la matriz de caminos P (también llamado cierre transitivo)
de un grafo G de n vértices, representado por su matriz de
adyacencia A.
★ Con frecuencia, se suele confundir este algoritmo con el de Floyd
Warshall (encuentra el camino mínimo de grafos dirigidos
ponderados).
★ El algoritmo de Warshall, trabaja sobre grafos dirigidos no
ponderados, y encuentra caminos entre un par de vértices.
32
Estrategia del algoritmo de Warshall.
★ Recibe una matriz de adyacencia de un grafo de “n” vértices y retorna una matriz
de caminos llamada “Cierre transitivo”.
★ El algoritmo consiste en definir a nivel lógico, una secuencia de matrices n-
cuadradas P0, P1, P2, P3 ... Pn; los elementos de cada una de las matrices Pk[i,j]
tienen el valor 0 si no hay camino y 1 si existe un camino del vértice i y al j.
★ A cada nodo del grafo, lo convierte en un “puente” para comunicar las aristas.
★ El nodo “puente” ayudará a encontrar caminos entre los vértices, e irá aumentando
los posibles caminos según se acaben los nodos.
★ La matriz P0 es la matriz de adyacencia y la matriz Pn es la matriz de caminos.
33
Ejemplo: matriz de caminos de un grafo.
a
dc
b
Como el grafo no es ponderado,
colocamos un “1”, si hay un camino desde
un vértice a otro o un “0”, si no existe un
posible camino.
a b c d
a 0 1 0 0
b 0 0 0 1
c 0 0 0 0
d 1 0 1 0
34
Encontrando matriz de caminos. “M1”
a
dc
b
a b c d
a 0 1 0 0
b 0 0 0 1
c 0 0 0 0
d 1 1 1 0
35
Encontrando matriz de caminos. “M2”
a
dc
b
a b c d
a 0 1 0 1
b 0 0 0 1
c 0 0 0 0
d 1 1 1 1
Del proceso anterior.
36
Encontrando matriz de caminos. “M3”
a
dc
b
a b c d
a 0 1 0 1
b 0 0 0 1
c 0 0 0 0
d 1 1 1 1
Del proceso anterior.
“c” no tiene conexión con ningún otro nodo,
Aún si lo eliminamos. Entonces M2 = M3.
Delprocesoanterior.
37
Encontrando matriz de caminos. “M4”
a
dc
b
a b c d
a 1 1 1 1
b 1 1 1 1
c 0 0 0 0
d 1 1 1 1
Del proceso anterior.
Delprocesoanterior.
38
Matriz de caminos (matriz booleana).
a
dc
b
a b c d
a 1 1 1 1
b 1 1 1 1
c 0 0 0 0
d 1 1 1 1
39
Implementación. Algoritmo de Warshall.
40
41
Función de Warshall. Establece relaciones entre vértices.
a b c d
a 0 1 0 0
b 0 0 0 1
c 0 0 0 0
d 1 0 1 0
41
Matriz de Adyacencia.
Complejidad del Algoritmo de Warshall.
★ La complejidad de este algoritmo es cúbica O(n3),
siendo n el número de vértices.
★ Lo que hace que el tiempo de ejecución crezca
rápidamente para grafos con, relativamente muchos
nodos.
42
Caminos más cortos con un solo origen:
Algoritmo de Dijkstra.
Uno de los problemas que se encuentran en la programación
y en la vida real, es encontrar el camino más corto entre dos
puntos (vértices). El algoritmo que se presenta a
continuación, tiene como requisito que el grafo a ser tratado
sea dirigido y que sus aristas sean valoradas (grafo
ponderado). De esta manera podremos encontrar la ruta
mínima para llegar de un vértice a otro.
43
Observación:
Este algoritmo encuentra el camino más corto desde un vértice al
resto de vértices de un grafo, es un algoritmo ávido (voraz). Además
debe cumplir que sus aristas no contengan pesos negativos.
Aplicación:
En el campo de la telemática, podemos resolver grafos con muchos
nodos, los cuales serían muy complicados de hacer sin dicho
algoritmo, encontrando así las rutas más cortas entre un origen y
todos los destinos en una red.
44
Ejemplo: camino más corto entre dos vértices.
A
DB
C E
F
2
4
1
3
1
2
2
45
Camino más corto entre dos vértices (Etiquetado).
[ 8 , B](2)
Distancia acumulada
(Desde el inicio hasta
este nodo).
Desde que nodo procede.
Número de
iteraciones
realizadas.
46
Camino más corto entre dos vértices.
A
DB
C E
F
2
4
1
3
1
2
2
47
Camino más corto entre dos vértices.
A
DB
C E
F
2
4
1
3
1
2
2
[ 0 , -](0)
48
Camino más corto entre dos vértices.
A
DB
C E
F
2
4
1
3
1
2
2
[ 0,-](0)
[ 2,A](1)
[ 1,A](1)
49
Camino más corto entre dos vértices.
A
DB
C E
F
2
4
1
3
1
2
2
[ 0,-](0)
[ 2,A](1)
[ 1,A](1)
50
Camino más corto entre dos vértices.
A
DB
C E
F
2
4
1
3
1
2
2
[ 0,-](0)
[ 2,A](1)
[ 1,A](1)
[ 4,C](2)
[ 5,C](2)
51
Camino más corto entre dos vértices.
A
DB
C E
F
2
4
1
3
1
2
2
[ 0,-](0)
[ 2,A](1)
[ 1,A](1)
[ 4,C](2)
[ 5,C](2)
52
Camino más corto entre dos vértices.
A
DB
C E
F
2
4
1
3
1
2
2
[ 0,-](0)
[ 2,A](1)
[ 1,A](1)
[ 4,C](2)
[ 5,C](2)
[ 3,B](3)
53
Camino más corto entre dos vértices.
A
DB
C E
F
2
4
1
3
1
2
2
[ 0,-](0)
[ 2,A](1)
[ 1,A](1) [ 5,C](2)
[ 3,B](3)
54
Camino más corto entre dos vértices.
A
DB
C E
F
2
4
1
3
1
2
2
[ 0,-](0)
[ 2,A](1)
[ 1,A](1) [ 5,C](2)
[ 3,B](3)
55
Camino más corto entre dos vértices.
A
DB
C E
F
2
4
1
3
1
2
2
[ 0,-](0)
[ 2,A](1)
[ 1,A](1) [ 5,C](2)
[ 3,B](3)
[ 5,D](4)
56
Camino más corto entre dos vértices.
A
DB
C E
F
2
4
1
3
1
2
2
[ 0,-](0)
[ 2,A](1)
[ 1,A](1) [ 5,C](2)
[ 3,B](3)
[ 5,D](4)
57
Camino más corto entre A y F.
A
DB
C E
F
2
4
1
3
1
2
2
[ 0,-](0)
[ 2,A](1)
[ 1,A](1) [ 5,C](2)
[ 3,B](3)
[ 5,D](4)
Empezamos por el nodo “F”:
F
D
B
A
58
Camino más corto entre A y F.
A
DB
C E
F
2
4
1
3
1
2
2
[ 0,-](0)
[ 2,A](1)
[ 1,A](1) [ 5,C](2)
[ 3,B](3)
[ 5,D](4)
Finalmente la ruta obtenida es:
A - B - D - F
La distancia obtenida es: 5
59
Implementación. Algoritmo de Dijkstra.
60
61
Algoritmo de Dijkstra.
62
Función que devuelve el costo mínimo.
63
Función que imprime los caminos a todos los vértices.
64
A
DB
C E
F
2
4
1
3
1
2
2
Ejemplo de aplicación
desde el vértice A a
todos los vértices
(Caminos y Costos).
A partir de la matriz de adyacencia.
65
Conclusiones.
★ En el ordenamiento topológico se tiene relaciones de precedencia que se representan
con un grafo dirigido/acíclico, donde los vértices son tareas/prerrequisitos y la arista
representa que el inicio de la futura tarea depende de la finalización de la anterior.
★ El orden de un grafo con el método topológico implica obtener una planificación u
orden de prerrequisitos.
★ El algoritmo de Warshall devuelve una matriz de caminos, que indica todos los posibles
caminos de un vértice a otro (pasando por otros vértices), siendo un grafo dirigido.
★ El algoritmo de dijkstra es eficiente a la hora de encontrar un camino partiendo de un
nodo específico hacia cualquier nodo del grafo.
66
Bibliografía.
★ Luis Joyanes Aguilar, I. Z. (2008). Estructura de datos en Java.
España: MCGRAW - HILL/INTERAMERICANA DE ESPAÑA, S.A.U.
67
Link de los códigos implementados en Java.
★ https://github.com/UcuencaProgramacionIII/EjerciciosProgramacionC
apitulos16

Más contenido relacionado

La actualidad más candente

Reporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamientoReporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamiento
TAtiizz Villalobos
 
Estructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamientoEstructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamiento
José Antonio Sandoval Acosta
 
Estructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busquedaEstructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busqueda
José Antonio Sandoval Acosta
 
Método de ordenamiento por selección (selection sort
Método de ordenamiento por selección (selection sortMétodo de ordenamiento por selección (selection sort
Método de ordenamiento por selección (selection sort
linkinpark03
 
Árboles Multicamino, B y B+
Árboles Multicamino, B y B+Árboles Multicamino, B y B+
Árboles Multicamino, B y B+
Alvaro Enrique Ruano
 
Algoritmo dijkstra
Algoritmo dijkstraAlgoritmo dijkstra
Algoritmo dijkstra
osmar gutierrez
 
Cuadro sinóptico estructuras de datos y su clasificación
Cuadro sinóptico   estructuras de datos y su clasificaciónCuadro sinóptico   estructuras de datos y su clasificación
Cuadro sinóptico estructuras de datos y su clasificación
Alex Uhu Colli
 
Teoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaTeoría De La Complejidad Algoritmica
Teoría De La Complejidad Algoritmica
Rolf Pinto
 
grafos conexos
grafos conexosgrafos conexos
grafos conexos
Deivis Alexander
 
Teoria de grafos
Teoria de grafosTeoria de grafos
Teoria de grafos
Pavel Aliaga
 
Lista de adyacencia
Lista de adyacenciaLista de adyacencia
Lista de adyacencia
Frank Doria
 
Arboles En Estructura de Datos
Arboles En Estructura de DatosArboles En Estructura de Datos
Arboles En Estructura de Datos
DARKGIRL93
 
Diapositiva de prueba
Diapositiva de pruebaDiapositiva de prueba
Diapositiva de prueba
JPi2013
 
Estructura de datos - Unidad 1: Introducción a las estructuras de datos
Estructura de datos - Unidad 1: Introducción a las estructuras de datosEstructura de datos - Unidad 1: Introducción a las estructuras de datos
Estructura de datos - Unidad 1: Introducción a las estructuras de datos
José Antonio Sandoval Acosta
 
Programación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructoresProgramación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructores
Alvaro Enrique Ruano
 
Listas doblemente enlazadas
Listas doblemente enlazadasListas doblemente enlazadas
Listas doblemente enlazadas
DĴäîřo Lêmä
 
Listas,pilas y colas Estructura de Datos
Listas,pilas y colas Estructura de DatosListas,pilas y colas Estructura de Datos
Listas,pilas y colas Estructura de Datos
Yorka Marisol Perez Feliz
 
Mapa Conceptual de Grafos
Mapa Conceptual de GrafosMapa Conceptual de Grafos
Mapa Conceptual de Grafos
Sandra Biondi
 
Guía de ejercicios de normalizacion
Guía de ejercicios de normalizacionGuía de ejercicios de normalizacion
Guía de ejercicios de normalizacion
Rodrigo Alzamora Mendieta
 
Estructura de Datos Unidad - V: Métodos de Ordenamiento
Estructura de Datos Unidad - V: Métodos de OrdenamientoEstructura de Datos Unidad - V: Métodos de Ordenamiento
Estructura de Datos Unidad - V: Métodos de Ordenamiento
José Antonio Sandoval Acosta
 

La actualidad más candente (20)

Reporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamientoReporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamiento
 
Estructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamientoEstructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamiento
 
Estructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busquedaEstructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busqueda
 
Método de ordenamiento por selección (selection sort
Método de ordenamiento por selección (selection sortMétodo de ordenamiento por selección (selection sort
Método de ordenamiento por selección (selection sort
 
Árboles Multicamino, B y B+
Árboles Multicamino, B y B+Árboles Multicamino, B y B+
Árboles Multicamino, B y B+
 
Algoritmo dijkstra
Algoritmo dijkstraAlgoritmo dijkstra
Algoritmo dijkstra
 
Cuadro sinóptico estructuras de datos y su clasificación
Cuadro sinóptico   estructuras de datos y su clasificaciónCuadro sinóptico   estructuras de datos y su clasificación
Cuadro sinóptico estructuras de datos y su clasificación
 
Teoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaTeoría De La Complejidad Algoritmica
Teoría De La Complejidad Algoritmica
 
grafos conexos
grafos conexosgrafos conexos
grafos conexos
 
Teoria de grafos
Teoria de grafosTeoria de grafos
Teoria de grafos
 
Lista de adyacencia
Lista de adyacenciaLista de adyacencia
Lista de adyacencia
 
Arboles En Estructura de Datos
Arboles En Estructura de DatosArboles En Estructura de Datos
Arboles En Estructura de Datos
 
Diapositiva de prueba
Diapositiva de pruebaDiapositiva de prueba
Diapositiva de prueba
 
Estructura de datos - Unidad 1: Introducción a las estructuras de datos
Estructura de datos - Unidad 1: Introducción a las estructuras de datosEstructura de datos - Unidad 1: Introducción a las estructuras de datos
Estructura de datos - Unidad 1: Introducción a las estructuras de datos
 
Programación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructoresProgramación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructores
 
Listas doblemente enlazadas
Listas doblemente enlazadasListas doblemente enlazadas
Listas doblemente enlazadas
 
Listas,pilas y colas Estructura de Datos
Listas,pilas y colas Estructura de DatosListas,pilas y colas Estructura de Datos
Listas,pilas y colas Estructura de Datos
 
Mapa Conceptual de Grafos
Mapa Conceptual de GrafosMapa Conceptual de Grafos
Mapa Conceptual de Grafos
 
Guía de ejercicios de normalizacion
Guía de ejercicios de normalizacionGuía de ejercicios de normalizacion
Guía de ejercicios de normalizacion
 
Estructura de Datos Unidad - V: Métodos de Ordenamiento
Estructura de Datos Unidad - V: Métodos de OrdenamientoEstructura de Datos Unidad - V: Métodos de Ordenamiento
Estructura de Datos Unidad - V: Métodos de Ordenamiento
 

Similar a Algoritmos de Dijkstra, Warshall, Ordenación Topológica.

Presentación OR Problemas de Caminos Más Cortos
Presentación OR Problemas de Caminos Más CortosPresentación OR Problemas de Caminos Más Cortos
Presentación OR Problemas de Caminos Más Cortos
Rosa E Padilla
 
Algoritmo de Floyd-Warshall
Algoritmo de Floyd-WarshallAlgoritmo de Floyd-Warshall
Algoritmo de Floyd-Warshall
202101829f
 
Flujo en redes
Flujo en redesFlujo en redes
Programación 3: Grafos, representación y operaciones
Programación 3: Grafos, representación y operacionesProgramación 3: Grafos, representación y operaciones
Programación 3: Grafos, representación y operaciones
Angel Vázquez Patiño
 
Tema 5 diapositivas de la teoría de grafos.pptx
Tema 5 diapositivas de la teoría de grafos.pptxTema 5 diapositivas de la teoría de grafos.pptx
Tema 5 diapositivas de la teoría de grafos.pptx
AndreFurios
 
Unidad iii
Unidad iiiUnidad iii
grafosssssssßssssssssssssssssssssssss.ppt
grafosssssssßssssssssssssssssssssssss.pptgrafosssssssßssssssssssssssssssssssss.ppt
grafosssssssßssssssssssssssssssssssss.ppt
mapajoben
 
S03 - Planos de fase.pdf
S03 - Planos de fase.pdfS03 - Planos de fase.pdf
S03 - Planos de fase.pdf
GUIDOCHAMBILLACONDOR1
 
Grafos
GrafosGrafos
Ejercicios propuestos
Ejercicios propuestos Ejercicios propuestos
Ejercicios propuestos
Ana Gabriela Garcia Seekatz
 
Unidad 6 grafos
Unidad 6  grafosUnidad 6  grafos
Unidad 6 grafos
Miguel Guanira Erazo
 
Unidad 6 grafos
Unidad 6  grafosUnidad 6  grafos
Unidad 6 grafos
Miguel Guanira Erazo
 
Unidad 6 grafos
Unidad 6  grafosUnidad 6  grafos
Unidad 6 grafos
Miguel Guanira Erazo
 
Teoría de grafos
Teoría de grafosTeoría de grafos
Teoría de grafos
Isaias Toledo
 
Matematicas discretas
Matematicas discretasMatematicas discretas
Matematicas discretas
luissanchez1240
 
IO 2(REDES).pdf
IO 2(REDES).pdfIO 2(REDES).pdf
Algoritmos de Johnson en Python
Algoritmos de Johnson en PythonAlgoritmos de Johnson en Python
Algoritmos de Johnson en Python
202101963d
 
Unidad 3
Unidad  3Unidad  3
Detector de secuencia no solapada 1011 empleando PLA
Detector de secuencia no solapada 1011 empleando PLADetector de secuencia no solapada 1011 empleando PLA
Detector de secuencia no solapada 1011 empleando PLA
Marc Tena Gil
 
Proyecto pibap
Proyecto pibapProyecto pibap

Similar a Algoritmos de Dijkstra, Warshall, Ordenación Topológica. (20)

Presentación OR Problemas de Caminos Más Cortos
Presentación OR Problemas de Caminos Más CortosPresentación OR Problemas de Caminos Más Cortos
Presentación OR Problemas de Caminos Más Cortos
 
Algoritmo de Floyd-Warshall
Algoritmo de Floyd-WarshallAlgoritmo de Floyd-Warshall
Algoritmo de Floyd-Warshall
 
Flujo en redes
Flujo en redesFlujo en redes
Flujo en redes
 
Programación 3: Grafos, representación y operaciones
Programación 3: Grafos, representación y operacionesProgramación 3: Grafos, representación y operaciones
Programación 3: Grafos, representación y operaciones
 
Tema 5 diapositivas de la teoría de grafos.pptx
Tema 5 diapositivas de la teoría de grafos.pptxTema 5 diapositivas de la teoría de grafos.pptx
Tema 5 diapositivas de la teoría de grafos.pptx
 
Unidad iii
Unidad iiiUnidad iii
Unidad iii
 
grafosssssssßssssssssssssssssssssssss.ppt
grafosssssssßssssssssssssssssssssssss.pptgrafosssssssßssssssssssssssssssssssss.ppt
grafosssssssßssssssssssssssssssssssss.ppt
 
S03 - Planos de fase.pdf
S03 - Planos de fase.pdfS03 - Planos de fase.pdf
S03 - Planos de fase.pdf
 
Grafos
GrafosGrafos
Grafos
 
Ejercicios propuestos
Ejercicios propuestos Ejercicios propuestos
Ejercicios propuestos
 
Unidad 6 grafos
Unidad 6  grafosUnidad 6  grafos
Unidad 6 grafos
 
Unidad 6 grafos
Unidad 6  grafosUnidad 6  grafos
Unidad 6 grafos
 
Unidad 6 grafos
Unidad 6  grafosUnidad 6  grafos
Unidad 6 grafos
 
Teoría de grafos
Teoría de grafosTeoría de grafos
Teoría de grafos
 
Matematicas discretas
Matematicas discretasMatematicas discretas
Matematicas discretas
 
IO 2(REDES).pdf
IO 2(REDES).pdfIO 2(REDES).pdf
IO 2(REDES).pdf
 
Algoritmos de Johnson en Python
Algoritmos de Johnson en PythonAlgoritmos de Johnson en Python
Algoritmos de Johnson en Python
 
Unidad 3
Unidad  3Unidad  3
Unidad 3
 
Detector de secuencia no solapada 1011 empleando PLA
Detector de secuencia no solapada 1011 empleando PLADetector de secuencia no solapada 1011 empleando PLA
Detector de secuencia no solapada 1011 empleando PLA
 
Proyecto pibap
Proyecto pibapProyecto pibap
Proyecto pibap
 

Último

PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdfPC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
JhenryHuisa1
 
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdfIntroducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
AbbieDominguezGirond
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptxTECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
KatiuskaDominguez2
 
primer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporteprimer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporte
eliersin13
 
Buscador de Eventos y Fiestas en España - Buscafiesta
Buscador de Eventos y Fiestas en España - BuscafiestaBuscador de Eventos y Fiestas en España - Buscafiesta
Buscador de Eventos y Fiestas en España - Buscafiesta
holabuscafiesta
 
Arquitectura de Sistema de Reservaciones
Arquitectura de Sistema de ReservacionesArquitectura de Sistema de Reservaciones
Arquitectura de Sistema de Reservaciones
AlanL15
 

Último (6)

PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdfPC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
PC-04-DISEÑOS DE PITS Y STOPES DE UNA MINA A TAJO ABIERTO.pdf
 
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdfIntroducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptxTECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
TECLADO ERGONÓMICO Y PANTALLAS TACTILES.pptx
 
primer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporteprimer manual de nuestra compañía de soporte
primer manual de nuestra compañía de soporte
 
Buscador de Eventos y Fiestas en España - Buscafiesta
Buscador de Eventos y Fiestas en España - BuscafiestaBuscador de Eventos y Fiestas en España - Buscafiesta
Buscador de Eventos y Fiestas en España - Buscafiesta
 
Arquitectura de Sistema de Reservaciones
Arquitectura de Sistema de ReservacionesArquitectura de Sistema de Reservaciones
Arquitectura de Sistema de Reservaciones
 

Algoritmos de Dijkstra, Warshall, Ordenación Topológica.

  • 1. Grafos, algoritmos fundamentales. Autor: Bryan Aguilar Docente: Ing. Ángel Vásquez CAPÍTULO 16. Programación 3: “Estructura de Archivos.” 1
  • 2. Contenido: 1. Introducción. 2. Concepto de Grafo. 3. Ordenación topológica. 4. Implementación Java. 5. Matriz de Caminos: Algoritmo de Warshall. 6. Implementación Java. 7. Caminos más cortos con un solo origen: Algoritmo de Dijkstra. 8. Implementación Java. 9. Conclusiones 10. Referencias y enlace de códigos. 2
  • 3. Introducción. Existen numerosos problemas que se pueden modelar en términos de grafos. Por ejemplo: la planificación de las tareas que completan un proyecto, encontrar las rutas de menor longitud entre dos puntos geográficos, calcular el camino más rápido en un transporte, etc. Se estudian en este capítulo el concepto de ordenación topológica, los problemas del camino más corto, estos algoritmos han sido desarrollado por grandes investigadores y en su honor se conocen por sus nombre es: Dijkstra, Warshall, Prim, Kruscal, Ford-Fulkerson entre otros. 3
  • 4. Grafos: Los grafos son un conjunto de nodos y aristas conectadas entre sí. En el ámbito de las ciencias de la computación es un tipo abstracto de datos (TAD), que consiste en un conjunto de nodos (también llamados vértices) y un conjunto de arcos (aristas) que establecen relaciones entre los nodos. Ejemplo: 4
  • 5. Ordenación Topológica. Es un sistema de ordenamiento de un grafo acíclico (no tiene ciclos). Consiste en organizar de forma lineal/lista (ascendente/descendente), una serie de vértices en desorden, primero se debe de empezar de un "vértice padre" (sin predecesores), y después visitar a sus vecinos, después de que haya visitado a todos sus vecinos, pasa a analizar otro vértice, identifica sus vecinos, y así recursivamente, hasta que haya visitado a todos los vértices. “En pocas palabras no se visitará un vértice, hasta que todos sus predecesores hayan sido visitados”. 5
  • 6. Ejemplo: estructura de prerrequisito de 8 cursos. T12 E11 C22 M21 R23 S32 S31 T41 Un arista cualquiera (r,s) significa que el curso “r” debe completarse antes de empezar el curso s. 6
  • 7. Encontrando el orden topológico. T12 E11 C22 M21 R23 S32 S31 T41 0 2 2 2 2 1 1 0 7
  • 8. Encontrando el orden topológico. T12 E11 C22 M21 R23 S32 S31 T41 0 2 2 2 2 1 1 0 8
  • 9. Encontrando el orden topológico. T12 E11 C22 M21 R23 S32 S31 T41 2 2 2 1 1 1 0 E11 - 9
  • 10. Encontrando el orden topológico. T12 E11 C22 M21 R23 S32 S31 T41 2 2 2 1 1 1 E11 - 10
  • 11. Encontrando el orden topológico. T12 E11 C22 M21 R23 S32 S31 T41 2 2 2 0 0 0 E11 - T12 - 11
  • 12. Encontrando el orden topológico. T12 E11 C22 M21 R23 S32 S31 T41 2 2 2 0 0 0 E11 - T12 - 12
  • 13. Encontrando el orden topológico. T12 E11 C22 M21 R23 S32 S31 T41 2 2 1 0 0 E11 - T12 - M21 - 13
  • 14. Encontrando el orden topológico. T12 E11 C22 M21 R23 S32 S31 T41 2 2 1 0 0 E11 - T12 - M21 - 14
  • 15. Encontrando el orden topológico. T12 E11 C22 M21 R23 S32 S31 T41 2 2 1 0 E11 - T12 - M21 - C22 - 15
  • 16. Encontrando el orden topológico. T12 E11 C22 M21 R23 S32 S31 T41 2 2 1 0 E11 - T12 - M21 - C22 - 16
  • 17. Encontrando el orden topológico. T12 E11 C22 M21 R23 S32 S31 T41 2 1 0 E11 - T12 - M21 - C22 - R23 17
  • 18. Encontrando el orden topológico. T12 E11 C22 M21 R23 S32 S31 T41 2 1 0 E11 - T12 - M21 - C22 - R23 18
  • 19. Encontrando el orden topológico. T12 E11 C22 M21 R23 S32 S31 T41 1 0 E11 - T12 - M21 - C22 - R23 - S31 - 19
  • 20. Encontrando el orden topológico. T12 E11 C22 M21 R23 S32 S31 T41 1 0 E11 - T12 - M21 - C22 - R23 - S31 - 20
  • 21. Encontrando el orden topológico. T12 E11 C22 M21 R23 S32 S31 T41 0 E11 - T12 - M21 - C22 - R23 - S31 - S32 - 21
  • 22. Encontrando el orden topológico. T12 E11 C22 M21 R23 S32 S31 T41 0 E11 - T12 - M21 - C22 - R23 - S31 - S32 - 22
  • 23. Encontrando el orden topológico. T12 E11 C22 M21 R23 S32 S31 T41 E11 - T12 - M21 - C22 - R23 - S31 - S32 - T41 23
  • 24. Ordenación Topológica. Una ordenación topológica de estos cursos es cualquier secuencia de cursos que cumple los requerimientos (prerrequisito). Entonces, para un grafo dirigido acíclico no tiene por qué existir una única ordenación topológica. Ordenaciones topológicas: E11 - T12 - M21 - C22 - R23 - S31 - S32 - T41 T12 - E11 - R23 - C22 - M21 - S31 - S32 - T41 24
  • 25. Algoritmo de Ordenación Topológica. ★ Busca un vértice “V” que no contenga predecesores (Sin arcos de entrada). ★ Este vértice “V” pasa a formar parte de la ordenación “T” (Cola). ★ Ya que el vértices sin predecesores, se añadió a “T”, este es eliminado del grafo inicial (Todos los arcos que salen de “V” son eliminados). Y se disminuye el grado de los vértices adyacentes. ★ Se repite el proceso. ★ Se toma otro vértices “W”, que no contenga arcos de entrada. ★ Se incorpora a la ordenación “T”. 25
  • 26. Implementación. Algoritmo de Ordenación Topológica. Representación de un grafo dirigido con una lista de adyacencia y una pila para la ordenación de los elementos. 26
  • 27. 27
  • 28. 28
  • 29. 5 4 0 2 3 1 Ejecución. Algoritmo de Ordenación Topológica. 29
  • 30. 30
  • 31. Complejidad de la ordenación topológica. La complejidad de este algoritmo depende de la representación del grafo. ★ Representación del grafo con listas de adyacencia, es O(a+n), siendo “a” el número de arcos y “n” el número de vértices. ★ Representación de un grafo con una matriz de adyacencia, la complejidad es O(n2). 31
  • 32. Matriz de Caminos: Algoritmo de Warshall. ★ Calcula la matriz de caminos P (también llamado cierre transitivo) de un grafo G de n vértices, representado por su matriz de adyacencia A. ★ Con frecuencia, se suele confundir este algoritmo con el de Floyd Warshall (encuentra el camino mínimo de grafos dirigidos ponderados). ★ El algoritmo de Warshall, trabaja sobre grafos dirigidos no ponderados, y encuentra caminos entre un par de vértices. 32
  • 33. Estrategia del algoritmo de Warshall. ★ Recibe una matriz de adyacencia de un grafo de “n” vértices y retorna una matriz de caminos llamada “Cierre transitivo”. ★ El algoritmo consiste en definir a nivel lógico, una secuencia de matrices n- cuadradas P0, P1, P2, P3 ... Pn; los elementos de cada una de las matrices Pk[i,j] tienen el valor 0 si no hay camino y 1 si existe un camino del vértice i y al j. ★ A cada nodo del grafo, lo convierte en un “puente” para comunicar las aristas. ★ El nodo “puente” ayudará a encontrar caminos entre los vértices, e irá aumentando los posibles caminos según se acaben los nodos. ★ La matriz P0 es la matriz de adyacencia y la matriz Pn es la matriz de caminos. 33
  • 34. Ejemplo: matriz de caminos de un grafo. a dc b Como el grafo no es ponderado, colocamos un “1”, si hay un camino desde un vértice a otro o un “0”, si no existe un posible camino. a b c d a 0 1 0 0 b 0 0 0 1 c 0 0 0 0 d 1 0 1 0 34
  • 35. Encontrando matriz de caminos. “M1” a dc b a b c d a 0 1 0 0 b 0 0 0 1 c 0 0 0 0 d 1 1 1 0 35
  • 36. Encontrando matriz de caminos. “M2” a dc b a b c d a 0 1 0 1 b 0 0 0 1 c 0 0 0 0 d 1 1 1 1 Del proceso anterior. 36
  • 37. Encontrando matriz de caminos. “M3” a dc b a b c d a 0 1 0 1 b 0 0 0 1 c 0 0 0 0 d 1 1 1 1 Del proceso anterior. “c” no tiene conexión con ningún otro nodo, Aún si lo eliminamos. Entonces M2 = M3. Delprocesoanterior. 37
  • 38. Encontrando matriz de caminos. “M4” a dc b a b c d a 1 1 1 1 b 1 1 1 1 c 0 0 0 0 d 1 1 1 1 Del proceso anterior. Delprocesoanterior. 38
  • 39. Matriz de caminos (matriz booleana). a dc b a b c d a 1 1 1 1 b 1 1 1 1 c 0 0 0 0 d 1 1 1 1 39
  • 41. 41 Función de Warshall. Establece relaciones entre vértices. a b c d a 0 1 0 0 b 0 0 0 1 c 0 0 0 0 d 1 0 1 0 41 Matriz de Adyacencia.
  • 42. Complejidad del Algoritmo de Warshall. ★ La complejidad de este algoritmo es cúbica O(n3), siendo n el número de vértices. ★ Lo que hace que el tiempo de ejecución crezca rápidamente para grafos con, relativamente muchos nodos. 42
  • 43. Caminos más cortos con un solo origen: Algoritmo de Dijkstra. Uno de los problemas que se encuentran en la programación y en la vida real, es encontrar el camino más corto entre dos puntos (vértices). El algoritmo que se presenta a continuación, tiene como requisito que el grafo a ser tratado sea dirigido y que sus aristas sean valoradas (grafo ponderado). De esta manera podremos encontrar la ruta mínima para llegar de un vértice a otro. 43
  • 44. Observación: Este algoritmo encuentra el camino más corto desde un vértice al resto de vértices de un grafo, es un algoritmo ávido (voraz). Además debe cumplir que sus aristas no contengan pesos negativos. Aplicación: En el campo de la telemática, podemos resolver grafos con muchos nodos, los cuales serían muy complicados de hacer sin dicho algoritmo, encontrando así las rutas más cortas entre un origen y todos los destinos en una red. 44
  • 45. Ejemplo: camino más corto entre dos vértices. A DB C E F 2 4 1 3 1 2 2 45
  • 46. Camino más corto entre dos vértices (Etiquetado). [ 8 , B](2) Distancia acumulada (Desde el inicio hasta este nodo). Desde que nodo procede. Número de iteraciones realizadas. 46
  • 47. Camino más corto entre dos vértices. A DB C E F 2 4 1 3 1 2 2 47
  • 48. Camino más corto entre dos vértices. A DB C E F 2 4 1 3 1 2 2 [ 0 , -](0) 48
  • 49. Camino más corto entre dos vértices. A DB C E F 2 4 1 3 1 2 2 [ 0,-](0) [ 2,A](1) [ 1,A](1) 49
  • 50. Camino más corto entre dos vértices. A DB C E F 2 4 1 3 1 2 2 [ 0,-](0) [ 2,A](1) [ 1,A](1) 50
  • 51. Camino más corto entre dos vértices. A DB C E F 2 4 1 3 1 2 2 [ 0,-](0) [ 2,A](1) [ 1,A](1) [ 4,C](2) [ 5,C](2) 51
  • 52. Camino más corto entre dos vértices. A DB C E F 2 4 1 3 1 2 2 [ 0,-](0) [ 2,A](1) [ 1,A](1) [ 4,C](2) [ 5,C](2) 52
  • 53. Camino más corto entre dos vértices. A DB C E F 2 4 1 3 1 2 2 [ 0,-](0) [ 2,A](1) [ 1,A](1) [ 4,C](2) [ 5,C](2) [ 3,B](3) 53
  • 54. Camino más corto entre dos vértices. A DB C E F 2 4 1 3 1 2 2 [ 0,-](0) [ 2,A](1) [ 1,A](1) [ 5,C](2) [ 3,B](3) 54
  • 55. Camino más corto entre dos vértices. A DB C E F 2 4 1 3 1 2 2 [ 0,-](0) [ 2,A](1) [ 1,A](1) [ 5,C](2) [ 3,B](3) 55
  • 56. Camino más corto entre dos vértices. A DB C E F 2 4 1 3 1 2 2 [ 0,-](0) [ 2,A](1) [ 1,A](1) [ 5,C](2) [ 3,B](3) [ 5,D](4) 56
  • 57. Camino más corto entre dos vértices. A DB C E F 2 4 1 3 1 2 2 [ 0,-](0) [ 2,A](1) [ 1,A](1) [ 5,C](2) [ 3,B](3) [ 5,D](4) 57
  • 58. Camino más corto entre A y F. A DB C E F 2 4 1 3 1 2 2 [ 0,-](0) [ 2,A](1) [ 1,A](1) [ 5,C](2) [ 3,B](3) [ 5,D](4) Empezamos por el nodo “F”: F D B A 58
  • 59. Camino más corto entre A y F. A DB C E F 2 4 1 3 1 2 2 [ 0,-](0) [ 2,A](1) [ 1,A](1) [ 5,C](2) [ 3,B](3) [ 5,D](4) Finalmente la ruta obtenida es: A - B - D - F La distancia obtenida es: 5 59
  • 61. 61
  • 63. Función que devuelve el costo mínimo. 63
  • 64. Función que imprime los caminos a todos los vértices. 64 A DB C E F 2 4 1 3 1 2 2 Ejemplo de aplicación desde el vértice A a todos los vértices (Caminos y Costos).
  • 65. A partir de la matriz de adyacencia. 65
  • 66. Conclusiones. ★ En el ordenamiento topológico se tiene relaciones de precedencia que se representan con un grafo dirigido/acíclico, donde los vértices son tareas/prerrequisitos y la arista representa que el inicio de la futura tarea depende de la finalización de la anterior. ★ El orden de un grafo con el método topológico implica obtener una planificación u orden de prerrequisitos. ★ El algoritmo de Warshall devuelve una matriz de caminos, que indica todos los posibles caminos de un vértice a otro (pasando por otros vértices), siendo un grafo dirigido. ★ El algoritmo de dijkstra es eficiente a la hora de encontrar un camino partiendo de un nodo específico hacia cualquier nodo del grafo. 66
  • 67. Bibliografía. ★ Luis Joyanes Aguilar, I. Z. (2008). Estructura de datos en Java. España: MCGRAW - HILL/INTERAMERICANA DE ESPAÑA, S.A.U. 67 Link de los códigos implementados en Java. ★ https://github.com/UcuencaProgramacionIII/EjerciciosProgramacionC apitulos16

Notas del editor

  1. el grafo representa las relaciones de amistad entre un grupo de personas de una red social.
  2. Por ejemplo, el curso M21 se puede empezar sólo cuando se terminen los cursos E11 y T12; en ese sentido, E11 y T12 son prerrequisito de M21.
  3. Se puede comprobar que un grafo es acíclico realizando un recorrido en profundidad, de tal forma que si se encuentra un arco de retroceso en el árbol de búsqueda, el grafo tiene al menos un ciclo.