Está en la página 1de 14

Algoritmos básicos de Grafos

Unidad 03: Algoritmos y Estructuras Fundamentales


Búsqueda primer en amplitud (BFS → Breadth-First Search)
• Dado un grafo 𝐺 = (𝑉, 𝐸) y un vértice de origen E S A
(source) distinguido 𝑠, la primera búsqueda
explora sistemáticamente las aristas de 𝐺 para
'descubrir' cada vértice accesible desde 𝑠.
D C B
• Este calcula la distancia (menor número de
aristas) de 𝑠 a cada vértice alcanzable.
• También produce un "árbol de amplitud
primero" con raíces 𝑠 que contiene todos los
vértices accesibles.
Búsqueda primer en amplitud (BFS → Breadth-First Search)
• En el árbol de amplitud primero, un camino E S A
simple de 𝑠 a cualquier vértice 𝑣
correspondiente a un "camino más corto" de 𝑠 a
𝑣.
D C B
• Funciona tanto en grafo dirigidos como sin
dirección. S
• Se llama así porque, descubre todos los vértices
a distancia 𝑘 de 𝑠 antes de descubrir cualquier
A C D E
vértices a distancia 𝑘 + 1.

B
Búsqueda primer en amplitud (BFS → Breadth-First Search)
• Para realizar un seguimiento del progreso, la r s t u
búsqueda primero en amplitud colorea cada ∞ 0 ∞ ∞
vértice blanco, gris o negro.
• Todos los vértices comienzan blancos (sin ∞ ∞ ∞ ∞
descubrir) y luego pueden volverse grises o v w x y
negros (descubiertos).
r s t u
• BFS distingue entre gris y negro para garantizar
1 0 ∞ ∞
que la búsqueda se lleve a cabo con la amplitud
primero.
∞ 1 ∞ ∞
v w x y
Búsqueda primer en amplitud (BFS → Breadth-First Search)
• Todos los vértices adyacentes al negro son r s t u
negros o grises (es decir, descubierto). ∞ 0 ∞ ∞
• Los vértices grises pueden tener algunos vértices
adyacentes blancos; los cuales representan la ∞ ∞ ∞ ∞
frontera entre vértices descubiertos y no v w x y
descubiertos.
r s t u
1 0 ∞ ∞

∞ 1 ∞ ∞
v w x y
Búsqueda primer en amplitud (BFS → Breadth-First Search)
• BFS construye un primer árbol, que 1 2 5 /
inicialmente contiene sólo su raíz (vértice de 2 1 5 3 4 /
origen 𝑠). 3 2 4 /
4 2 5 3 /
• Comience escaneando la lista de adyacencia 5 4 1 2 /
del vértice 𝑠. (en una representación de la lista
de adyacencia) S
• Cuando se encuentra un vértice blanco 𝑣 en la
lista de adyacencia, el vértice 𝑣 y la arista A C D E
(𝑠, 𝑣) se agregan al árbol.

B
Búsqueda primer en amplitud (BFS → Breadth-First Search)
• Entonces se dice que 𝑠 es un predecesor o 1 2 5 /
padre de 𝑣 en el primer árbol. 2 1 5 3 4 /

• Dado que un vértice se descubre como 3 2 4 /


4 2 5 3 /
máximo una vez, sólo puede tener un padre
5 4 1 2 /
(como máximo).
• BFS utiliza la primera cola de entrada y salida S

A C D E

B
Búsqueda primer en amplitud (Inicialización)
BFS(G,s)
1 para cada vértice 𝑢 ∈ 𝐺. 𝑉 − 𝑠
2 𝑢. 𝐶𝑜𝑙𝑜𝑟 = BLANCO
3 𝑢. 𝑑 = ∞
4 𝑢. 𝜋 = NIL
5 𝑠. 𝑐𝑜𝑙𝑜𝑟 = GRIS
6 𝑠. 𝑑 = 0
7 𝑠. 𝜋 = NIL
8 𝑄=∅
9 ENQUEUE(𝑄, 𝑠)
BFS(G,s)
1 para cada vértice 𝑢 ∈ 𝐺. 𝑉 − 𝑠
2 𝑢. 𝐶𝑜𝑙𝑜𝑟 = BLANCO
3 𝑢. 𝑑 = ∞
4 𝑢. 𝜋 = NIL
5 𝑠. 𝑐𝑜𝑙𝑜𝑟 = GRIS
6 𝑠. 𝑑 = 0
7 𝑠. 𝜋 = NIL
8 𝑄=∅
9 ENQUEUE(𝑄, 𝑠)
10 Mientras 𝑄 ≠ ∅
11 𝑢 =DEQUEUE(𝑄)
12 por cada 𝑣 ∈ 𝐺. 𝐴𝑑𝑗 𝑢
13 si 𝑣. 𝑐𝑜𝑙𝑜𝑟 == BLANCO
14 𝑣. 𝑐𝑜𝑙𝑜𝑟 = GRIS
15 𝑣. 𝑑 = 𝑢. 𝑑 + 1
16 𝑣. 𝜋 = 𝑢
17 ENQUEUE(𝑄, 𝑣)
18 𝑢. 𝑐𝑜𝑙𝑜𝑟 = NEGRO
Duración de la ejecución del BFS
• Inicialización → 𝑂(𝑉)
• Cada vértice se encola como máximo una vez y se desencola como máximo
una vez → 𝑂(𝑉)
• El algoritmo analiza la lista de adyacencia de un vértice solo cuando se pone
en cola, por lo que las listas de adyacencia se analizan solo una vez. La suma
total de todas las listas de adyacencia es 𝐸. → 𝑂(𝐸)
• Tiempo total de ejecución → 𝑂(𝑉 + 𝐸).
• BFS se ejecuta en tiempo lineal en el tamaño de la representación de la lista
de adyacencia de 𝐺.
Árbol primero en amplitud y ruta más corta
• BFS construye un árbol de primero en amplitud, mientras busca en el grafo.
El árbol corresponde a los atributos 𝜋.
• El árbol primero en amplitud (un subgrafo predecesor) de un grafo 𝐺 =
(𝑉, 𝐸) es 𝐺𝜋 = (𝑉𝜋 , 𝐸𝜋 ) para que:
• 𝑉𝜋 = 𝑣 ∈ 𝑉: 𝑣. 𝜋 ≠ NIL ∪ 𝑠
• 𝐸𝜋 = 𝑣. 𝜋, 𝑣 : 𝑣 ∈ 𝑉𝜋 − 𝑠
• El subgrafo 𝐺𝜋 contiene un camino simple único de 𝑠 a 𝑣 que también es un
camino más corto de 𝑠 a 𝑣 en 𝐺.
• Dado que 𝐺𝜋 es un árbol conectado, 𝐸𝜋 = 𝑉𝜋 − 1
Trabajo en Clase
• Dibujar un árbol primero en
amplitud para Chennai (C)
• ¿Cuál es la distancia de C a cada una
de las otras ciudades?
• 𝑉𝜋 = 𝑣 ∈ 𝑉: 𝑣. 𝜋 ≠ NIL ∪ 𝑠
• 𝐸𝜋 = 𝑣. 𝜋, 𝑣 : 𝑣 ∈ 𝑉𝜋 − 𝑠
∞ ∞ ∞
∞ ∞ ∞
∞ ∞ ∞ 1 2 1

∞ ∞ ∞
∞ ∞ ∞
Q C Q G L Q L J
∞ 1 1
0 0 0 1 1 0 1 2

∞ ∞ 3 3
2 2 2 2
2 1 2 1 2 1 2 1

2 2 2 2
2 2 2 2
Q J D K N Q D K N Q K N A Q N A
1 1 1 1
0 2 2 2 2 0 2 2 2 0 2 2 3 0 2 3
C
3 3
2 2
2 1 2 1 G L

2 2
2 2 J D K N

Q A Q Ø
1 1 A
0 3 0
∞ ∞ ∞
∞ ∞ 2
∞ ∞ ∞ 1 ∞ 1

∞ ∞ 2
∞ ∞ 2
Q C Q L G Q G D K N
∞ 1 1
0 0 0 1 1 0 1 2 2 2

∞ 3 3 3
2 2 2 2
2 1 2 1 2 1 2 1

2 2 2 2
2 2 2 2
Q D K N J Q K N J A Q N J A Q J A
1 1 1 1
0 2 2 2 2 0 2 2 2 3 0 2 2 3 0 2 3

3 3 C
2 2
2 1 2 1 L G

2 2
2 2 D K N J
Q A Q Ø
1 1
A
0 3 0

También podría gustarte