fbpx
Wikipedia

Búsqueda en anchura

En Ciencias de la Computación, Búsqueda en anchura (en inglés BFS - Breadth First Search) es un algoritmo de búsqueda no informada utilizado para recorrer o buscar elementos en un grafo (usado frecuentemente sobre árboles). Intuitivamente, se comienza en la raíz (eligiendo algún nodo como elemento raíz en el caso de un grafo) y se exploran todos los vecinos de este nodo. A continuación para cada uno de los vecinos se exploran sus respectivos vecinos adyacentes, y así hasta que se recorra todo el árbol.

Búsqueda en anchura.

Formalmente, BFS es un algoritmo de búsqueda sin información, que expande y examina todos los nodos de un árbol sistemáticamente para buscar una solución. El algoritmo no usa ninguna estrategia heurística.

Si las aristas tienen pesos negativos aplicaremos el algoritmo de Bellman-Ford en alguna de sus dos versiones.

Procedimiento

  • Dado un vértice fuente s, Breadth-first search sistemáticamente explora los vértices de G para “descubrir” todos los vértices alcanzables desde s.
  • Calcula la distancia (menor número de vértices) desde s a todos los vértices alcanzables.
  • Después produce un árbol BF con raíz en s y que contiene a todos los vértices alcanzables.
  • El camino desde s a cada vértice en este recorrido contiene el mínimo número de vértices. Es el camino más corto medido en número de vértices.
  • Su nombre se debe a que expande uniformemente la frontera entre lo descubierto y lo no descubierto. Llega a los nodos de distancia k, sólo tras haber llegado a todos los nodos a distancia k-1.

Código

  • La nomenclatura adicional utilizada es: Q = Estructura de datos cola


 BFS(grafo G, nodo_fuente s) { // recorremos todos los vértices del grafo inicializándolos a NO_VISITADO, // distancia INFINITA y padre de cada nodo NULL for u ∈ V[G] do { estado[u] = NO_VISITADO; distancia[u] = INFINITO; /* distancia infinita si el nodo no es alcanzable */ padre[u] = NULL; } estado[s] = VISITADO; distancia[s] = 0; padre[s] = NULL; CrearCola(Q); /* nos aseguramos que la cola está vacía */ Encolar(Q, s); while !vacía(Q) do { // extraemos el nodo u de la cola Q y exploramos todos sus nodos adyacentes u = extraer(Q); for v ∈ adyacencia[u] do { if estado[v] == NO_VISITADO then {  estado[v] = VISITADO;  distancia[v] = distancia[u] + 1;  padre[v] = u;  Encolar(Q, v); } } } } 
 *Falta recorrer vértices no adyacentes directa o indirectamente al vértice origen "s", pues la cola queda vacía sin los adyacentes restantes. 
  • El tiempo de ejecución es O(|V|+|E|). Nótese que cada nodo es puesto a la cola una vez y su lista de adyacencia es recorrida una vez también.

Análisis

Complejidad computacional

La complejidad computacional del algoritmo se puede expresar como  , donde  es el número de vértices y  es el número de aristas. El razonamiento es porque en el peor caso, cada vértice y cada arista será visitado por el algoritmo.

Complejidad en memoria

Cuando se sabe anteriormente el número de vértices en el grafo, y se pueden usar otras estructuras de data para determinar qué vértices han sido añadidos a la cola, la complejidad en memoria es  , donde   es el número de vértices. Éste es en adición al espacio requerido para el grafo mismo, que depende en la representación del grafo.

Factor de ramificación

Especialmente con grafos muy grandes (posiblemente infinitos), puede ser más práctico describir la complejidad del algoritmo en términos del factor de ramificación. Para encontrar los nodos que están en una distancia  de la raíz (distancia medida por el número de aristas que tiene que usar), Búsqueda en anchura requiere  en términos computacionales y de memoria, donde  es el factor de ramificación del grafo.

Referencias

Véase también


  •   Datos: Q325904
  •   Multimedia: Breadth-first search

búsqueda, anchura, para, otros, usos, este, término, véase, búsqueda, ciencias, computación, inglés, breadth, first, search, algoritmo, búsqueda, informada, utilizado, para, recorrer, buscar, elementos, grafo, usado, frecuentemente, sobre, árboles, intuitivame. Para otros usos de este termino vease Busqueda En Ciencias de la Computacion Busqueda en anchura en ingles BFS Breadth First Search es un algoritmo de busqueda no informada utilizado para recorrer o buscar elementos en un grafo usado frecuentemente sobre arboles Intuitivamente se comienza en la raiz eligiendo algun nodo como elemento raiz en el caso de un grafo y se exploran todos los vecinos de este nodo A continuacion para cada uno de los vecinos se exploran sus respectivos vecinos adyacentes y asi hasta que se recorra todo el arbol Busqueda en anchura Formalmente BFS es un algoritmo de busqueda sin informacion que expande y examina todos los nodos de un arbol sistematicamente para buscar una solucion El algoritmo no usa ninguna estrategia heuristica Si las aristas tienen pesos negativos aplicaremos el algoritmo de Bellman Ford en alguna de sus dos versiones Indice 1 Procedimiento 2 Codigo 3 Analisis 3 1 Complejidad computacional 3 2 Complejidad en memoria 3 3 Factor de ramificacion 4 Referencias 5 Vease tambienProcedimiento EditarDado un vertice fuente s Breadth first search sistematicamente explora los vertices de G para descubrir todos los vertices alcanzables desde s Calcula la distancia menor numero de vertices desde s a todos los vertices alcanzables Despues produce un arbol BF con raiz en s y que contiene a todos los vertices alcanzables El camino desde s a cada vertice en este recorrido contiene el minimo numero de vertices Es el camino mas corto medido en numero de vertices Su nombre se debe a que expande uniformemente la frontera entre lo descubierto y lo no descubierto Llega a los nodos de distancia k solo tras haber llegado a todos los nodos a distancia k 1 Codigo EditarLa nomenclatura adicional utilizada es Q Estructura de datos cola BFS grafo G nodo fuente s recorremos todos los vertices del grafo inicializandolos a NO VISITADO distancia INFINITA y padre de cada nodo NULL for u V G do estado u NO VISITADO distancia u INFINITO distancia infinita si el nodo no es alcanzable padre u NULL estado s VISITADO distancia s 0 padre s NULL CrearCola Q nos aseguramos que la cola esta vacia Encolar Q s while vacia Q do extraemos el nodo u de la cola Q y exploramos todos sus nodos adyacentes u extraer Q for v adyacencia u do if estado v NO VISITADO then estado v VISITADO distancia v distancia u 1 padre v u Encolar Q v Falta recorrer vertices no adyacentes directa o indirectamente al vertice origen s pues la cola queda vacia sin los adyacentes restantes El tiempo de ejecucion es O V E Notese que cada nodo es puesto a la cola una vez y su lista de adyacencia es recorrida una vez tambien Analisis EditarComplejidad computacional Editar La complejidad computacional del algoritmo se puede expresar como O V E displaystyle O V E donde V displaystyle V es el numero de vertices y E displaystyle E es el numero de aristas El razonamiento es porque en el peor caso cada vertice y cada arista sera visitado por el algoritmo Complejidad en memoria Editar Cuando se sabe anteriormente el numero de vertices en el grafo y se pueden usar otras estructuras de data para determinar que vertices han sido anadidos a la cola la complejidad en memoria es O V displaystyle O V donde V displaystyle V es el numero de vertices Este es en adicion al espacio requerido para el grafo mismo que depende en la representacion del grafo Factor de ramificacion Editar Especialmente con grafos muy grandes posiblemente infinitos puede ser mas practico describir la complejidad del algoritmo en terminos del factor de ramificacion Para encontrar los nodos que estan en una distancia d displaystyle d de la raiz distancia medida por el numero de aristas que tiene que usar Busqueda en anchura requiere O b d 1 displaystyle O b d 1 en terminos computacionales y de memoria donde b displaystyle b es el factor de ramificacion del grafo Referencias EditarThomas H Cormen Charles E Leiserson Ronald L Rivest and Clifford Stein Introduction to Algorithms Second Edition MIT Press and McGraw Hill 2001 ISBN 0 262 03293 7 Section 22 3 Depth first search pp 531 539 Vease tambien EditarArbol estructura de datos Recorrido de arboles Busqueda en profundidad Wikimedia Commons alberga una categoria multimedia sobre Busqueda en anchura Datos Q325904 Multimedia Breadth first searchObtenido de https es wikipedia org w index php title Busqueda en anchura amp oldid 131124064, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos