PARA OBSERVAR PASO A PASO EL PROCESO DE LOS RECORRIDOS MINIMOS ES NECESARIO REPRODUCIRLAS EN MODO PRESENTACION PARA ASI APRECIAR EL CONTENIDO COMPLETO
Grafos,recorridos minimo, algoritmos, tipos de grafos, ilustrado, ejemplos , recorridos,terminologia,Dijkstra,Bellman - Ford, Floyd - Warshall,conceptos basicos
2. Un grafo es una estructura de datos no lineal que sirve para representar
relaciones arbitrarias (no necesariamente jerárquicas) entre objetos de
datos
Un grafo G= (V, R) compuesta de:
Un conjunto V de vértices (nodos)
Un conjunto R de ramas (arcos), conexiones entre los vértices de V
Ejemplo de grafo
V= {a, b, c, d, e, f}
R= {(a,d), (a,e), (a,f), (b,c),…, (e,a), (f,b)}
INTRODUCCIÓN
3. TERMINOLOGÍA
Vértices: Son los objetos representados por
punto dentro del grafo
Aristas: son las líneas que unen dos vértices
Aristas Adyacentes: dos aristas son
adyacentes si convergen sobre el mismo
vértice
Aristas Múltiples o Paralelas: dos aristas son
múltiples o paralelas si tienen los mismos
vértices en común o incidente sobre los
mismos vértices
Lazo: es una arista cuyos extremos inciden
sobre el mismo vértice
4. TERMINOLOGÍA
Arista Incidente : Una arista es incidente a
un vértice si ésta lo une a otro vértice.
Vértice Aislado: Es un vértice de grado cero
Vértice Pendiente: Es aquel grafo que contiene
sólo una arista, es decir tiene grado 1
Cruce: Son intersecciones de las aristas en
puntos diferentes a los vértices
A B
a
La arista a, es
Incidente en los
Vértices A Y B .
4
1
2 3
b
a
c
41
2 3
b
a
c
d e
f
5. El grado o valencia de un vértice es el
número de aristas incidentes al vértice.
GRADO O VALENCIA
Vecindad de un vértice
El grado del vértice x es el número de
vecinos que tiene
Lema del apretón de manos
La suma de los grados de un grafo es igual al doble del número de
aristas
6. El Lema del apretón de manos también es cierto en los grafos dirigidos. Para
ello hay que distinguir para cada nodo entre grados de entrada y de salida.
Por lo tanto, el Lema se expresa del siguiente modo:
GRADO O VALENCIA
Grafos dirigidos
Se distingue entre grado de entrada 𝑔−
(𝑥) ,
como el número de aristas que tiene al
vértice x como vértice final, y grado de
salida 𝑔+
(𝑥), como el número de aristas que
tiene al vértice x como vértice inicial, de
forma que:
7. Matriz de adyacencias: se asocia
cada fila y cada columna a cada
nodo del grafo, siendo los
elementos de la matriz la
relación entre los mismos,
tomando los valores de 1 si
existe la arista y 0 en caso
contrario.
Lista de adyacencias: se asocia
a cada nodo del grafo una lista
que contenga todos aquellos
nodos que sean adyacentes a él.
FORMAS DE REPRESENTACIÓN
Existen diferentes implementaciones del tipo grafo: con
una matriz de adyacencias (forma acotada) y con listas y
multilistas de adyacencia (no acotadas).
8.
9. 2. Grafo Completo
El grafo completo de orden
n, que se denota por 𝐾 𝑛 ,
es un grafo con n vértices,
donde cada vértice es
adyacente a todos los
demás.
1. Grafo Nulo
El grafo nulo de orden n,
que se denota por 𝑁 𝑛 , es
un grafo que tiene n
vértices y ninguna arista.
3. Grafo Regular
Un grafo es regular (de
grado d) si todos sus
vértices tienen el mismo
grado (d).
TIPOS DE GRAFOS
Grafo No
completo
10. TIPOS DE GRAFOS
4. Grafo Bipartito
Un grafo G = (V, E) es bipartito si su conjunto de vértices V admite una partición
en dos subconjuntos (disjuntos), 𝑉1 y 𝑉2 , de modo que cada arista de G sea
incidente con un vértice de 𝑉1 y con un vértice de 𝑉2 (no hay adyacencias entre
vértices de una misma parte). Si cada vértice de 𝑉1 es adyacente a todos los
vértices de 𝑉2 , el grafo G se denomina bipartito y completo.
( 𝐺 = 𝐾 𝑚, 𝑛 ) ; 𝑑 𝑜 𝑛𝑑 𝑒
𝑚 = 𝑉1 𝑦 𝑛 = 𝑉2
11. TIPOS DE GRAFOS (DIRECCIÓN)
1. Grafos no dirigidos
Un grafo en el cual todas las aristas son no dirigidas
se denominará "grafo no dirigido". El grafo no
dirigido es aquel que no tiene sentido su arista. Un
grafo no dirigido G representa elementos, y una
arista (v, w) representa una incompatibilidad entre
los elementos v y w.
2. Grafos dirigidos o Dígrafos
Un grafo dirigido o dígrafo es un tipo de grafo en el
cual el conjunto de los vértices tiene una dirección
definida1 , a diferencia del grafo generalizado, en el
cual la dirección puede estar especificada o no.
V = {C, D, E, F, H}
E= {(E,H), (H,E), (E,C), (C,D), (D,F)}
12. VARIANTES DEL CONCEPTO DE GRAFO (DÍGRAFO)
2. Multígrafo
Si en un ‘grafo’ se permite la
existencia de más de una arista entre
un mismo par de vértices (arista
múltiple), entonces se denomina
multígrafo
1. Grafo Simple
Es un grafo o dígrafo que no tiene
bucles y que no es multígrafo
Arcos
múltiples o
paralelos
13. VARIANTES DEL CONCEPTO DE GRAFO (DÍGRAFO)
3. Pseudografo
Si además se permite que un
elemento esté relacionado consigo
mismo (lazo), entonces se llama
pseudografo
4. Grafo Ponderado
Un grafo G cuyas aristas tienen
asociados valores reales, llamados
pesos, se denomina grafo ponderado.
Lazo o
Bucle
Valor
Asignado
14.
15. Exploración en anchura (BFS)
Breadth First Search (BFS): A partir del nodo origen, recorrer
por niveles de distancia a ese nodo.
1. Fijar nodo origen del recorrido (arbitrario)
EXPLORACIÓN (RECORRIDO) DE GRAFOS
16. Exploración en anchura (BFS)
2. Acceder a todos los nodos que están a distancia 1, es decir,
directamente relacionados con el origen (existe un arco que
los une).
EXPLORACIÓN (RECORRIDO) DE GRAFOS
17. Exploración en anchura (BFS)
3. Acceder a todos los nodos que están a distancia 2, es decir,
directamente relacionados con los que está a distancia 1
EXPLORACIÓN (RECORRIDO) DE GRAFOS
18. Exploración en anchura (BFS)
El resultado del recorrido es una árbol, que incluye los nodos
visitados y los arcos utilizados para acceder a ellos.
EXPLORACIÓN (RECORRIDO) DE GRAFOS
19. Exploración en profundidad (DFS)
Depth First Search (DFS): A partir del nodo origen, avanzar a
otro nodo no visitado y seguir el recorrido, de la misma manera,
a partir de él.
EXPLORACIÓN (RECORRIDO) DE GRAFOS
20. Exploración en profundidad (DFS)
EXPLORACIÓN (RECORRIDO) DE GRAFOS
21. Exploración en profundidad (DFS)
El resultado del recorrido es una árbol, que incluye los nodos
visitados y los arcos utilizados para acceder a ellos.
EXPLORACIÓN (RECORRIDO) DE GRAFOS
22.
23. Algoritmos de búsqueda del camino mínimo
1. Algoritmo Breadth-first search
2. Algoritmo de Dijkstra
3. Algoritmo de Bellman-Ford
4. Algoritmo de Floyd-Warshall
ALGORITMOS DE BÚSQUEDA
Algoritmos de búsqueda del árbol de recubrimiento mínimo
1. Algoritmo de Prim
Los algoritmos de búsqueda en grafos nacen por la necesidad de crear un mecanismo
de navegación autónoma, bien sea de robots, coches, o personajes en un videojuego.
Un algoritmo de búsqueda tratará, de encontrar un camino optimo entre dos nodos
como por ejemplo un camino que minimice el coste de desplazamiento, o el número
de pasos a realizar.
La expansión de la búsqueda se realiza en forma de árbol. Partiendo del nodo inicial,
se extenderá la búsqueda a sus nodos vecinos, de cada uno de estos nodos vecinos, a
sus respectivos nodos vecinos, y así hasta que uno de los nodos a los que se expande
la búsqueda es el nodo objetivo.
24. 1. Algoritmo Breadth-first search
Objetivo:
Ejemplo de uso:
ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO
Encontrar el camino mínimo desde un nodo inicial a todos los
demás nodos de un grafo sin tener en cuenta los pesos de los
nodos
Saber el número de escalas
que hay que hacer desde un
aeropuerto para llegar a otro
25. 1. Algoritmo Breadth-first search
Pseudocódigo
ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO
método breadth_first_search(grafo, origen)
inicializar
crear cola Q
agregar origen a cola Q
mientras Q no esté vacia:
sacar elemento v de la cola Q
marcar como visitado v
para cada nodo adyacente w a v en el grafo:
si w no ha sido visitado y no está en la cola:
actualizar el contador de w (ahora es v+1)
actualizar el predecesor de w (ahora es v)
insertar w dentro de la cola Q:
27. 2. Algoritmo de Dijkstra
El algoritmo de Dijkstra, también
llamado algoritmo de caminos mínimos, es
un algoritmo para la determinación del camino más
corto dado un vértice origen al resto de los vértices en
un grafo con pesos en cada arista. Su nombre se refiere
a Edsger Dijkstra, quien lo describió por primera vez en
1959.
La idea subyacente en este algoritmo consiste
en ir explorando todos los caminos más cortos que
parten del vértice origen y que llevan a todos los demás
vértices; cuando se obtiene el camino más corto desde
el vértice origen, al resto de vértices que componen el
grafo, el algoritmo se detiene. El algoritmo es una
especialización de la búsqueda de costo uniforme, y
como tal, no funciona en grafos con aristas de coste
negativo (al elegir siempre el nodo con distancia menor,
pueden quedar excluidos de la búsqueda nodos que en
próximas iteraciones bajarían el costo general del
camino al pasar por una arista con costo negativo).
ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO
28. 2. Algoritmo de Dijkstra
Objetivo:
Ejemplo de uso:
ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO
Encontrar el camino mínimo desde un nodo inicial a todos los
demás nodos de un grafo con pesos positivos
Averiguar la ruta más corta
entre dos poblaciones a
través de una red de
carreteras
29. 2. Algoritmo de Dijkstra
Pseudocódigo
ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO
método dijkstra(grafo, origen)
inicializar
crear cola de prioridades Q ordenada de menor a mayor peso
agregar origen a cola Q
mientras Q no esté vacia:
sacar elemento v de la cola Q
marcar como visitado v
para cada nodo adyacente w a v en el grafo:
si (peso de w) > (peso de v + peso entre v y w):
actualizar el peso de w (disminuye)
actualizar el predecesor de w (ahora es v)
si w no ha sido visitado:
si w está en la cola Q:
actualizar prioridad de w
y si w no está en la cola:
insertar w dentro de la cola Q:
30. 2. Algoritmo de Dijkstra
Ejemplo:
ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO
31. 3. Algoritmo de Bellman-Ford
El algoritmo de Bellman-Ford (algoritmo de Bell-End-Ford) genera el camino
más corto en un grafo dirigido ponderado (en el que el peso de alguna de
las aristas puede ser negativo). El algoritmo de Dijkstra resuelve este mismo
problema en un tiempo menor, pero requiere que los pesos de las aristas no sean
negativos, salvo que el grafo sea dirigido y sin ciclos. Por lo que el Algoritmo
Bellman-Ford normalmente se utiliza cuando hay aristas con peso negativo. Este
algoritmo fue desarrollado por Richard Bellman, Samuel End y Lester Ford.
Según Robert Sedgewick, “Los pesos negativos no son simplemente una
curiosidad matemática; […] surgen de una forma natural en la reducción a problemas
de caminos más cortos”, y son un ejemplo de una reducción del problema del camino
hamiltoniano que es NP-completo hasta el problema de caminos más cortos con pesos
generales. Si un grafo contiene un ciclo de coste total negativo entonces este grafo
no tiene solución. El algoritmo es capaz de detectar este caso.
Si el grafo contiene un ciclo de coste negativo, el algoritmo lo detectará,
pero no encontrará el camino más corto que no repite ningún vértice. La complejidad
de este problema es al menos la del problema del camino más largo de complejidad
NP-Completo.
ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO
32. 3. Algoritmo de Bellman-Ford
Objetivo:
Ejemplo de uso:
ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO
Encontrar el camino mínimo desde un nodo inicial a todos los
demás nodos de un grafo con pesos positivos y negativos
Protocolos de
encaminamiento de
información
33. 3. Algoritmo de Bellman-Ford
Pseudocódigo
ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO
método bellman_ford(grafo, origen)
inicializar
crear cola Q
agregar origen a cola Q
mientras Q no esté vacia:
sacar elemento v de la cola Q
si hay bucle negativo
“bucle negativo”
y si no, para cada nodo adyacente w a v en el grafo:
si (peso de w) > (peso de v + peso entre v y w):
actualizar el peso de w (disminuye)
actualizar el predecesor de w (ahora es v)
si w no está en la cola:
insertar w dentro de la cola Q:
34. 3. Algoritmo de Bellman-Ford
Ejemplo:
ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO
35. 4. Algoritmo de Floyd-Warshall
Objetivo:
Ejemplo de uso:
ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO
Encontrar el camino mínimo entre todos los pares de nodos de
un grafo
Averiguar la ruta más
corta entre TODAS las
poblaciones a través
de una red de
carreteras
36. 4. Algoritmo de Floyd-Warshall
Pseudocódigo
ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO
método floyd-warshall(grafo)
M[i, j] := ∞ ∀i != j
M[i, j] := p(i, j) ∀(i, j) ∈ en el grafo
M[i, i] := 0 ∀i
for k := 1 to n do
for i := 1 to n do
for j := 1 to n do
si M[i, j] > M[i, k] + M[k, j]
M[i, j] = M[i, k] + M[k, j]
for i := 1 to n do
si M[i, i] < 0
“bucle negativo”
37. 4. Algoritmo de Floyd-Warshall
Ejemplo:
ALGORITMOS DE BÚSQUEDA DEL CAMINO MÍNIMO
38. ALGORITMOS DE BÚSQUEDA DEL ÁRBOL DE
RECUBRIMIENTO MÍNIMO
1. Algoritmo de Prim
Objetivo:
Ejemplo de uso:
Encontrar el árbol de recubrimiento mínimo en un grafo conexo,
no dirigido
Trazar la mínima
cantidad de cable
posible para cubrir las
necesidades de una
nueva urbanización
Un grafo es conexo si cada
par de vértices está
conectado por un camino
39. 1. Algoritmo de Prim
Pseudocódigo
ALGORITMOS DE BÚSQUEDA DEL ÁRBOL DE
RECUBRIMIENTO MÍNIMO
método prim(grafo, origen)
1- marcar un nodo dentro del grafo, el cual será el nodo de partida
2- seleccionar la arista de menor valor que salga del nodo marcado
3- marcar el nodo al que llega la arista seleccionada en el paso
previo
4- repetir los pasos 2 y 3 de tal modo que se vayan obteniendo
aristas entre nodos marcados y otros que no lo están
5- el algoritmo termina cuando están todos los nodos marcados
40. 1. Algoritmo de Prim
Ejemplo:
ALGORITMOS DE BÚSQUEDA DEL ÁRBOL DE
RECUBRIMIENTO MÍNIMO