Está en la página 1de 20

Recorrido de Grafos representados como listas de adyacencia Búsqueda en Amplitud Búsqueda en Profundidad Referencias

Teoría de Grafos
C7: Busqueda en Amplitud y Profundidad

Hernán Darío Toro Zapata

Universidad del Quindío


SIGMA
Seminario Interdisciplinario Grupo en Matemática Aplicada

Octubre 20 de 2014
Recorrido de Grafos representados como listas de adyacencia Búsqueda en Amplitud Búsqueda en Profundidad Referencias

Esquema de la presentación

1 Recorrido de Grafos representados como listas de adyacencia


Introducción
Listas de adyacencia

2 Búsqueda en Amplitud
Descripción

3 Búsqueda en Profundidad
Descripción

4 Referencias
Recorrido de Grafos representados como listas de adyacencia Búsqueda en Amplitud Búsqueda en Profundidad Referencias

Introducción

Esquema de la presentación

1 Recorrido de Grafos representados como listas de adyacencia


Introducción
Listas de adyacencia

2 Búsqueda en Amplitud
Descripción

3 Búsqueda en Profundidad
Descripción

4 Referencias
Recorrido de Grafos representados como listas de adyacencia Búsqueda en Amplitud Búsqueda en Profundidad Referencias

Introducción

Introducción I
Con el algoritmo de Warshall estamos en condiciones de determinar la
existencia de caminos entre parejas de vértices de un grafo, mediante su
matriz de adyacencia.
Un problema mas específico consiste en buscar un vértice en concreto
que nos interesa alcanzar debido a sus características o a la información
que contiene (depende de la aplicación concreta que se modela); además,
en otras aplicaciones puede ser necesario recorrer todo el grafo en un
orden concreto. Para este tipo de problemas se estudiarán dos métodos:
Búsqueda en amplitud (BFS)1 : se puede usar para hallar la
distancia más corta entre un vértice inicial y los restantes vértices
del grafo.
Búsqueda en amplitud (DFS)2 : se puede utilizar la búsqueda en
profundidad en un grafo arbitrario para realizar el recorrido de un
grafo general (no es la mejor estrategia para salir de un laberinto!).

1 Breadth-first search
2 Depth-first search
Recorrido de Grafos representados como listas de adyacencia Búsqueda en Amplitud Búsqueda en Profundidad Referencias

Listas de adyacencia

Esquema de la presentación

1 Recorrido de Grafos representados como listas de adyacencia


Introducción
Listas de adyacencia

2 Búsqueda en Amplitud
Descripción

3 Búsqueda en Profundidad
Descripción

4 Referencias
Recorrido de Grafos representados como listas de adyacencia Búsqueda en Amplitud Búsqueda en Profundidad Referencias

Listas de adyacencia

Listas de adyacencia I
Hasta ahora tenemos tres formas diferentes de representar un grafo G:
Gráfica.
Relacional. Describiendo los conjuntos V (G) y E(G).
Matricial. Si se requiere almacenar información adicional de los
vértices, se requiere una estructura adicional de almacenamiento.
Para grafos ponderados se puede almacenar el valor de la arista en
forma de un valor de bits (habría que modificar el algoritmo de
Warshall). Es preciso conocer de antemano el número de vértices y
para agregar o eliminar vértices se requiere modificar las dimensiones
de la matriz. No es adecuada para grafos muy grandes ni para grafos
dispersos.
La representación más conveniente dependerá de la aplicación. Para un
grafo G = (V, E), se forma una lista de adyacencia para cada vértice
x ∈ V . Es decir, la lista de adyacencia para el vértice x contiene todos los
vértices y que son adyacentes a x. Se asumirá la lista en orden alfabético
por comodidad.
Recorrido de Grafos representados como listas de adyacencia Búsqueda en Amplitud Búsqueda en Profundidad Referencias

Listas de adyacencia

Listas de adyacencia II

Importante
En un grafo no dirigido, la lista de adyacencia se construye de la misma
forma. Debe tenerse en cuenta que cada arista aparece dos veces.
Recorrido de Grafos representados como listas de adyacencia Búsqueda en Amplitud Búsqueda en Profundidad Referencias

Listas de adyacencia

Listas de adyacencia III


Ejercicio
Construir las listas de adyacencia del grafo G que se obtiene de:

V (G) = {a, b, c, d, e, f }

E(G) = {{a, c}, {a, e}, {b, c}, {b, f }, {c, a}, {c, b}, {c, d},
{c, f }, {d, c}, {d, e}}

Importante
Las listas de adyacencia son preferibles cuando el grafo es disperso (para
cada vértice hay pocas aristas que incidan sobre él). Para grafos densos,
podría ser más conveniente usar la matriz de adyacencia.
Recorrido de Grafos representados como listas de adyacencia Búsqueda en Amplitud Búsqueda en Profundidad Referencias

Descripción

Esquema de la presentación

1 Recorrido de Grafos representados como listas de adyacencia


Introducción
Listas de adyacencia

2 Búsqueda en Amplitud
Descripción

3 Búsqueda en Profundidad
Descripción

4 Referencias
Recorrido de Grafos representados como listas de adyacencia Búsqueda en Amplitud Búsqueda en Profundidad Referencias

Descripción

Búsqueda en amplitud (BFS) I


Se estudian grafos sencillos dados en una representación de listas de
adyacencia.
La BFS Se puede usar para hallar la distancia más corta entre un vértice
inicial y los restantes vértices del grafo; es decir, el mínimo número de
aristas que hay que recorrer desde el vértice inicial hasta un vértice final
en concreto.
Comenzando desde el vértice s, se examinan todas las aristas incidentes
en el vértice s, pasando después a un vértice w, se repite el
procedimiento hasta que se hayan recorrido todos los vértices del grafo.
Este enfoque de búsqueda puede dar lugar a problemas: los vértices ya
visitados no deben visitarse de nuevo. Para evitar esta situación, se
marcan los vértices ya visitados
Recorrido de Grafos representados como listas de adyacencia Búsqueda en Amplitud Búsqueda en Profundidad Referencias

Descripción

Búsqueda en amplitud (BFS) II


Suponga que v1 es el
vértice inicial y que cada
arista vale 1.
Para cada vértice hay que
calcular la distancia más
corta desde el vértice
inicial y se marca con ese
valor.
Se marcan los vértices
adyacentes al inicial antes
de seguir con la búsqueda.
Si el grafo es conectado,
los vértices se visitarán al
menos una vez.
Recorrido de Grafos representados como listas de adyacencia Búsqueda en Amplitud Búsqueda en Profundidad Referencias

Descripción

Búsqueda en amplitud (BFS) III


Si la búsqueda comienza desde el vértice v1 (inicial) este se marca
con distancia 0.
Luego se visitan todos los vértices adyacentes a v1 y se marcan con
distancia 1. Como los vértices de la lista de adyacencia están
ordenados, los vértices se visitan en el orden: v2 , v3 , v4 , v5 .
A continuación se visitan todos los vértices que están a una
distancia 2 del vértice v1 ,
Este proceso se facilita almacenando todos los vértices adyacentes a
v1 en una estructura de cola. Dado que v2 fue el primer vértice
adyacente a v1 que se visitó, (y se almacenó en cola), entonces se
exploran todos los vértices adyacentes a v2 que no hayan sido
visitados: el único es v6 .
El proceso se repite para v3 (el segundo vértice adyacente a v1 ) lo
que da lugar a las visitas de v7 y v8 .
A continuación se exploran los vértices no visitados de v4 . No hay
ninguno.
Recorrido de Grafos representados como listas de adyacencia Búsqueda en Amplitud Búsqueda en Profundidad Referencias

Descripción

Búsqueda en amplitud (BFS) IV


Por último, el único vértice no visitado de v5 es v9 , lo que completa
la búsqueda.
Las flechas rojas del grafo representan el recorrido usado en la estrategia
BFS.

Importante
La estructura de cola es adecuada, debido a que los vértices se visitan en
el mismo orden en que aparecen en la lista de adyacencia.

Dado un vértice inicial s el proceso es el siguiente (ver pág 383 de [1]):


1 Se marcan todos los vértices del grafo como no visitados (F).
2 Se marca (V) y se visita s.
3 Se pone a s en la cola.
4 Mientras la cola no esté vacía:
5 Se quita el primero de la cola, y se toma como vértice actual
Recorrido de Grafos representados como listas de adyacencia Búsqueda en Amplitud Búsqueda en Profundidad Referencias

Descripción

Búsqueda en amplitud (BFS) V


6 Para cada vecino del vértice actual:
Si el vecino no está marcado (F), entonces se visita y se marca (V).
Se actualiza el valor distancia del vecino
Se pone el vecino en la cola.
Los resultados del proceso se pueden representar en un árbol BFS de
caminos más cortos o árbol de expansión:

El vértice v1 es el vértice raíz. Los vértices del árbol se examinan en orden


creciente de número de nivel y de izquierda a derecha en cada nivel.
Recorrido de Grafos representados como listas de adyacencia Búsqueda en Amplitud Búsqueda en Profundidad Referencias

Descripción

Esquema de la presentación

1 Recorrido de Grafos representados como listas de adyacencia


Introducción
Listas de adyacencia

2 Búsqueda en Amplitud
Descripción

3 Búsqueda en Profundidad
Descripción

4 Referencias
Recorrido de Grafos representados como listas de adyacencia Búsqueda en Amplitud Búsqueda en Profundidad Referencias

Descripción

Búsqueda en Profundidad (DFS) I


La estrategia DFS es como sigue: se toma un vértice s como comienzo, y
se marca. A continuación se toma un vértice no marcado y adyacente a
s, el cual pasa a ser el nuevo vértice de partida (se dejan por el momento
otros vértices sin explorar). La búsqueda finaliza en un vértice en que
todos los vértices adyacentes estén marcados. Luego la búsqueda vuelve
al último vértice que todavía tenga vértices adyacentes sin marcar y así
sucesivamente. De forma más precisa:
1 Se marcan todos los vértices como no visitados
2 Se invoca el procedimiento DFS para el vértice inicial s
Procedimiento DFS:
1 Se marca y visita s.
2 Para cada vecino w de s:
Si w no está marcado entonces se invoca el procedimiento DFS
para w.
Recorrido de Grafos representados como listas de adyacencia Búsqueda en Amplitud Búsqueda en Profundidad Referencias

Descripción

Búsqueda en Profundidad (DFS) II

Se inicia con v1 , se marca y se


visita.
El primer vértice en la lista de
adyacencia de v1 es v2 , se marca y
se visita.
El primer vértice en la lista de
adyacencia de v2 es v1 , pero ya se
ha visitado entonces se pasa al
siguiente vértice de la lista que es
v3 , se marca y se visita.
El primer vértice en la lista de
adyacencia de v3 (sin marcar) es v4 ,
ya que v1 y v2 ya se visitaron, se
marca y se visita v4 .
Recorrido de Grafos representados como listas de adyacencia Búsqueda en Amplitud Búsqueda en Profundidad Referencias

Descripción

Búsqueda en Profundidad (DFS) III


El primer vértice en la lista de adyacencia de v4 sin marcar es v5 , se
marca y se visita.
El primer vértice en la lista de adyacencia de v5 es v1 , que ya se
visitó, sigue v4 , que también se visitó, por lo tanto solo queda
marcar y visitar v9 .
A partir de v9 ya no hay vértices por visitar, entonces vuelve al
vértice v4 y se marca y visita a v8 .
De nuevo, ya no hay más vértices sin marcar, entonces se vuelva a
v3 y se marca y visita v7 .
Como v8 ya fue visitado, se regresa a v2 y se marca y visita a v6 .
Al comenzar con el vértice v1 se obtuvo la sucesión de vértices v1 ,
v2 , v3 , v4 , v5 , v9 , v8 , v7 , v6 .
Recorrido de Grafos representados como listas de adyacencia Búsqueda en Amplitud Búsqueda en Profundidad Referencias

Descripción

Búsqueda en Profundidad (DFS) IV


Importante
Existe una variante del procedimiento DFS que se enfoca en buscar un
ciclo que contenga a cierto vértice v0 dentro de un grafo no dirigido. Ver
paginas 386 y 387 de [1] para la descripción.
Recorrido de Grafos representados como listas de adyacencia Búsqueda en Amplitud Búsqueda en Profundidad Referencias

Referencias

Grassmann WK, Tremblay JP. (1998) Matemática Discreta y Lógica:


una perspectiva desde la ciencia de la computación. Prentice Hall.
Madrid. (Se encuentra en la carpeta de dropbox)

También podría gustarte