Вы находитесь на странице: 1из 33

Grafos y Algoritmos de

Camino mas corto Presentado por:


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

• Describir el TDA Grafo y sus operaciones

• Aplicar los algoritmos de Dijkstra y Floyd


Contenido
• Repaso
• Grafos
– Representación
– Conceptos Básicos
– Grafo dirigido
• Algoritmo Dijkstra
• Algoritmo Floyd
Repaso
• La cantidad de hijos de un árbol se mide a través del grado.
• La raíz es el único nodo que no tiene antecesor.
• Una hoja es un nodo que no tiene hijos.
• Un árbol binario es de grado dos.
• Un árbol binario de búsqueda es un tipo de árbol ordenado.
• Las operaciones de un árbol binario de búsqueda normalmente son de
orden logarítmico.
• En un ABB, al eliminar un nodo deben analizarse los hijos del nodo a
eliminar.
• En un ABB, si un nodo tiene dos hijos debe sustituir por el predecesor o
sucesor.
• Un árbol puede recorrerse preorden, postorden, inorden
Repaso
• La cantidad de hijos de un árbol se mide a través del grado.
• La raíz es el único nodo que no tiene antecesor.
• Una hoja es un nodo que no tiene hijos.
• Un árbol binario es de grado dos.
• Un árbol binario de búsqueda es un tipo de árbol ordenado.
• Las operaciones de un árbol binario de búsqueda normalmente son de
orden logarítmico.
• En un ABB, al eliminar un nodo deben analizarse los hijos del nodo a
eliminar.
• En un ABB, si un nodo tiene dos hijos debe sustituir por el predecesor o
sucesor.
• Un árbol puede recorrerse preorden, postorden, inorden
Repaso
– Representar en un árbol binario: (12+(a*45)^n ) / (m – j*k)
– Represente en una tabla i izquierdo información derecho

10

11

12

13
Grafo
• Los árboles no pueden resolver cierto tipo de
problemas (situaciones en las que cada nodo tiene
mas de un padre).
• Los grafos (gráficas) son estructuras de datos no
lineales donde cada componente puede tener uno o
más predecesores y sucesores.
• Se distinguen dos elementos:
– Vértices: nodos
– Aristas: arcos, que conectan un vértice con otro
Grafos
• Los grafos se utilizan para representar redes,
dentro de las cuales se pueden mencionar:
– Transporte
– Redes de Comunicación
– Mapas
– Asignación de tareas
– Redes sociales, etc…
Vértices y Aristas
• ¿Cuántos vértices?
–7
• ¿Cuántas aristas?
– 11
Conceptos básicos de Grafos
• Un grafo está representado por los conjuntos
– G = (V, A)
• Una arista se identifica por un par de nodos del conjunto de
vértices, que puede o no estar ordenado.
• Una arista que va del vértice u al vértice v se representa
mediante la expresión a = (u,v)
• Para esta arista, u y v están conectados por a; a es incidente
en u y v.
• Grado de un vértice: grado(v) es el número de aristas que
contiene al nodo v. Si grado(v) = 0, se trata de un nodo
aislado.
Conceptos básicos de Grafos
• Lazo, ciclo o bucle: una arista que conecta a un vértice consigo
mismo, a = (u,u)
• Camino: un camino C de longitud n se define como la
secuencia de vertices que se deben seguir para llegar del
vértice origen v1 al vértice destino vn. P = (v1, …., vn)
• Camino cerrado: camino donde el primer y último nodo son el
mismo.
• Camino simple: camino donde todos los nodos son distintos a
excepción del primero y último que si pueden ser el mismo.
• Ciclo: un camino simple cerrado de longitud 3 o mayor.
Conceptos básicos de Grafos
• Grafo conexo: si existe un camino simple entre
cualesquiera dos nodos.
• Grafo árbol: un grafo conexo sin ciclos.
• Grafo completo: si cada vértice es adyacente a todos
los demás vértices. Un grafo completo de n vértices
tiene n(n-1)/2 aristas.
• Multigrafo: cuando al menos dos nodos de un grafo
se conectan mediante dos aristas (aristas múltiples o
paralelas).
Ejemplo
• Grado de los vértices:
• Caminos para llegar de a a e:
• Camino cerrado: ¿Longitud del camino?
• Camino simple: ¿Longitud del camino?
• Ciclo:
• ¿Es conexo?
• ¿Es completo?
Grafos dirigidos
• Se conocen también como digrafo.
• Se caracteriza porque cada arista a tiene una dirección
asignada.
• Una arista dirigida a = (u,v) se llama arco, y generalmente se
expresa como u  v
• Terminología:
– a empieza en u y termina en v. u v
– u es el origen o punto inicial de a.
– v es el destino o punto final de a.
– U es predecesor de v, v es sucesor o vecino de u.
– u es adyacente hacia v y v es adyacente desde u.
Representación
• Matriz de adyacencia M(i,j) =  j
– Una matriz booleana, de orden n, donde n indica
la cantidad de vértices de G. Las filas y columnas
son los V, y el contenido la existencia o no de
arcos o aristas que se representan normalmente
media 1 o 0. a e i o u
a 0 1 1 0 0
e 0 0 0 1 0
i 0 0 0 0 1
o 0 0 1 0 0
u 1 0 0 1 0
Representación
• Matrices de costos o de distancias
– Es una matriz con costo asociado a cada arco
a b c d e f
a 0 5 0 0 8 0
b 0 0 0 3 5 4
c 2 0 0 3 0 0
d 0 0 0 0 5 7
e 0 0 6 0 0 0
f 0 0 0 0 0 0
Representación - Matrices
• Ventajas
– Mas fácil de implementar
– Remover una arista se puede hacer en un tiempo O(1)
– Buscar si un vértice existe también puede realizarse en
O(1)
• Desventajas
– Mas espacio (v2)
– Aunque el grafo esté disperso siempre consumirá la misma
cantidad de espacio.
– Agregar un vértice siempre toma un
tiempo de O(v2)
Representación
• Lista de adyacencia
– Una lista de adyacencia para un vértice a es una lista
ordenada de todos los vértices adyacentes a a
– Recomendable utilizarse cuando la cantidad de aristas es
menor a v2
a a b

b c

c d

d
Representación - Lista
• Ventajas:
– Ahorra espacio, máximo espacio O(V + A)
– Agregar un vértice se hace de manera rápido
• Desventajas:
– Consultas sobre la existencia de una arista de un
vértice u a un vértice v no son eficientes. Se
realizan en un tiempo O(v)
Ejercicio
• Represente el siguiente grafo mediante una matriz de
adyacencia.

• Diseñe un algoritmo que determine la cantidad de


dependencias de un grafo. En un grafo una dependencia se
establece de la siguiente manera: si existe una arista (u, v), u
depende de v.
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)
Algunos problemas típicos de
grafos
• Determinar si hay un camino entre dos
vértices.
• Encontrar un ciclo dentro de un grafo.
• Determinar el grado saliente/ entrante de
cada vértice del árbol.
Obtención de caminos dentro de
un grafo
• Es de bastante interés encontrar los caminos directos o
indirectos, entre sus vértices.
• Específicamente con el menor costo o a la menor distancia
posible.
• Los algoritmos mas utilizados son:
– Dijkstra
– Floyd
– Warshall
• Algunas convenciones:
0: si i = j
– M[i,j] ∞: si no hay camino de i a j, donde i <> j
costo de ir de i a j: si existe a(i,j)
Algoritmo de Dijkstra
• Algoritmo Ávido
• Permite encontrar la ruta mas corta entre dos vértices.
• Trabaja con aristas positivas
• Se utilizan dos arreglos y la Matriz de Costos:
– S, arreglo formado por los vertices de los cuales ya conocemos la
distancia mínima entre ellos y el origen. Inicialmente tiene solo el
nodo origen.
– D, es el arreglo formado por las distancias del vertice origen a cada
uno de los otros. D[i] almacena la menor distancia desde el origen
hasta el vértice i.
– M, es la matriz de costos
Algoritmo de Dijkstra
1. Agregar el vértice 1 a S
2. Repetir con i desde 2 hasta N
Elegir un vértice v en (V-S) tal que D[v] sea el mínimo valor
Agregar v a S
2.1 Repetir para cada vértice w en (V-S)
Hacer D[w]  mínimo (D[w],D[v] + M[v,w])
2.2 Fin Ciclo
3. Fin Ciclo
Algoritmo de Dijkstra
• Determina Matriz de Costos y aplique Algoritmo de Dijkstra
para determinar las distancias mínimas desde el vértice a
b 6 d a b c d e
4 a 0 4 11 ∞ ∞
2 6
b ∞ 0 ∞ 6 2
a 3 3
c ∞ 3 0 6 ∞
11 d ∞ ∞ ∞ 0 ∞
c 5 e e ∞ ∞ 5 3 0

S D[a] D[b] D[c] D[d] D[e]


{a} 0 4 11 ∞ ∞
{a,b} 0 4 11 10 6
{a,b,e} 0 4 11 9 6
{a,b,e,d} 0 4 11 9 6
{a,b,e,d,c} 0 4 11 9 6
Ejercicio
• Determine la distancia mínima desde los vértices A y B hacia
el resto de los nodos utilizando el Algoritmo de Dijkstra
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
Actividades Pendientes
• Próxima clase
– Participación en clase Foro Caso de Éxito
• 09/03 11 p.m.
– Tarea 6.2 Ejercicios árboles
• 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 Opcional
– Publicación y respuesta Foro 2 (Semana 6)
• 23/03 10 a.m.
– Entrega proyecto final
Conclusiones
• Un grafo puede resolver algunos problemas que no pueden ser analizados
utilizando un árbol, debido a las restricciones de relaciones de este último.
• Un grafo consta de vértices y aristas.
• Un grafo puede ser conexo, completo, tener caminos simples, caminos
cerrados, poseer ciclos.
• Un grafo puede ser representado por medio de:
– Matriz de adyacencia / Matriz de costos
– Lista de adyacencia
• 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.

Вам также может понравиться