Recorridos en anchura (BFS)

Anuncio
Recorrido en anchura de un grafo (Breadth First Search)
Recorrer un grafo consiste en “visitar”cada uno de los nodos a través de las aristas del
mismo. Se trata de realizar recorridos de grafos de manera eficiente. Para ello, se pondrá
una marca en un nodo en el momento en que es visitado, de tal manera que, inicialmente,
no está marcado ningún nodo del grafo.
Detallaremos el proceso para grafos no dirigidos, observando que para el caso dirigido
el proceso es análogo, sólo cambia el significado del concepto de adyacencia.
A continuación, describimos la idea de un procedimiento recursivo para realizar un recorrido en anchura de un grafo no dirigido G. Para ello, en primer lugar, a cada nodo,
v, del grafo se le asocia un procedimiento, BF S(G, v), que se denomina recorrido en
anchura de G con origen v.
La idea del procedimiento BF S(G, v) es la siguiente:
• Se marca el nodo v.
• Si todos los nodos adyacentes a v están marcados, entonces TERMINAR; si no,
marcar todos los nodos v1 , v2 , . . . , vk adyacentes a v que no estén marcados.
• Repetir el proceso con los nodos adyacentes a los nodos que se han marcado en el
paso anterior.
Si G es conexo (es decir, si dos vértices cualesquiera de G siempre están conectados por
un camino), entonces BF S(G, v) visita todos los nodos y aristas del grafo.
A diferencia de lo que ocurrı́a con el recorrido en profundidad, DF S, el recorrido en
anchura, BF S, no tiene naturaleza recursiva. Por ello, es posible describir un esquema
algorı́tmico iterativo del recorrido en anchura usando una cola que permita controlar las
visitas a los nodos.
procedimiento BF S(G, v)
marcar (v)
poner (v) en una COLA
mientras la COLA no sea vacia hacer
quitar el primer elemento w de la COLA
para cada vertice x adyacente a w hacer
si x no esta marcado entonces
marcar x
poner x en la COLA
Teorema 1: Sea G = (V, E) un grafo no dirigido y conexo. Para cada v ∈ V se
verifica:
1. El procedimiento BF S(G, v) para.
2. Tras la ejecución del procedimiento BF S(G, v), todos los nodos de G están marcados.
Sea G = (V, E) un grafo no dirigido arbitrario. Para realizar un recorrido en anchura
en G se procede como sigue:
1. Se elige un nodo, v, no marcado.
2. Se ejecuta el procedimiento BF S(G, v).
3. Si no quedan nodos no marcados, el proceso TERMINA; si no, se vuelve al paso 1.
En consecuencia, el procedimiento de recorrido en anchura de un grafo no dirigido arbitrario se puede describir como sigue:
procedimiento BF S(G)
para cada nodo no marcado, v, hacer
BF S(G, v)
Teorema 2: Sea G = (V, E) un grafo no dirigido. El coste del algoritmo BF S(G) es del
orden θ(máx{|V |, |E|}).
Nota: La ejecución de un recorrido en anchura de un grafo, G = (V, E), no dirigido
proporciona de manera natural un bosque de ejecución. Las aristas del grafo, G,
que no pertenecen a ningún árbol del bosque, se denomina arista de vuelta atrás. Si
notamos el bosque del recorrido en anchura por B = (V, F ), entonces las aristas de vuelta
atrás son las del conjunto E − F (que son las aristas no visitadas en dicho recorrido).
Teorema 3: Sea G = (V, E) un grafo no dirigido y conexo. Sea B = (V, F ) un árbol de
recorrido en anchura de G.
• Para cada u ∈ V , el camino desde la raı́z, v, de B a u es el camino más corto desde
v a u en G.
• Si {u, v} ∈ E − F , entonces u y v tienen niveles en el árbol B que difieren, a lo
sumo, en 1.
Descargar