Sunteți pe pagina 1din 7

BÚSQUEDA EN ANCHURA

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.

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.

La búsqueda en anchura es otro procedimiento para visitar sistemáticamente todos


los vértices de un grafo. Es adecuado especialmente para resolver problemas de
optimización, en los que se deba elegir la mejor solución entre varias posibles. Al
igual que en la búsqueda en profundidad se comienza en un vértice v (la raíz) que
es el primer vértice activo. En el siguiente paso se etiquetan como visitados todos
los vecinos del vértice activo que no han sido etiquetados. Se continúa etiquetando
todos los vecinos de los hijos de v (que no hayan sido visitados aún). En este
proceso nunca se visita un vértice dos veces por lo que se construye un grafo sin
ciclos, que será un árbol generador de la componente conexa que contiene a v.

Es equivalente a recorrer un árbol por niveles. Dado un nodo v, se visitan primero


todos los nodos adyacentes a v, luego todos los que están a distancia 2 (y no
visitados), a distancia 3, y así sucesivamente hasta recorrer todos los nodos.

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 dt 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.
BÚSQUEDA EN PROFUNDIDAD.

Una Búsqueda en profundidad (en inglés DFS o Depth First Search) es un algoritmo
de búsqueda no informada utilizado para recorrer todos los nodos de un grafo o
árbol de manera ordenada, pero no uniforme. Su funcionamiento consiste en ir
expandiendo todos y cada uno de los nodos que va localizando, de forma
recurrente, en un camino concreto. Cuando ya no quedan más nodos que visitar en
dicho camino, regresa (Backtracking), de modo que repite el mismo proceso con
cada uno de los hermanos del nodo ya procesado.

En la búsqueda en profundidad se avanza de vértice en vértice, marcando cada


vértice visitado. La búsqueda siempre avanza hacia un vértice no marcado,
internándose “profundamente” en el grafo sin repetir ningún vértice. Cuando se
alcanza un vértice cuyos vecinos han sido marcados, se retrocede al anterior vértice
visitado y se avanza desde éste.

Es equivalente a un recorrido en pre-orden de un árbol. Se elige un nodo v de


partida. Se marca como visitado y se recorren los nodos no visitados adyacentes a
v, usando recursivamente la búsqueda primero en profundidad.

El recorrido puede ser para grafos dirigidos o no dirigidos.

EVALUACIÓN

 Completitud: DFS es completo si y solo si usamos búsqueda basada en


grafos en espacios de estado finitos, pues todos los nodos serán expandidos.
 Optimalidad: DFS en ningún caso asegura la optimalidad, pues puede
encontrar una solución más profunda que otra en una rama que todavía no
ha sido expandida
 Complejidad temporal: en el peor caso, es {\displaystyle
O(b^{m})}{\displaystyle O(b^{m})}, siendo b el factor de ramificación (número
promedio de ramificaciones por nodo) y m la máxima profundidad del espacio
de estados.
 Complejidad espacial: {\displaystyle O(b^{d})}{\displaystyle O(b^{d})}, siendo
b el factor de ramificación y d la profundidad de la solución menos costosa,
pues cada nodo generado permanece en memoria, almacenándose la mayor
cantidad de nodos en el nivel meta.
ALGORITMO DEL CAMINO MAS CORTO (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,
hacia el resto de los vértices en un grafo que tiene pesos en cada arista. Su
nombre alude a Edsger Dijkstra, científico de la computación de los Países Bajos
que 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 hasta el resto de
los vértices que componen el grafo, el algoritmo se detiene. Se trata de 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).
Una de sus aplicaciones más importantes reside en el campo de la telemática.
Gracias a él, es posible resolver grafos con muchos nodos, lo que sería muy
complicado resolver sin dicho algoritmo, encontrando así las rutas más cortas
entre un origen y todos los destinos en una red.
Algoritmo
1. Teniendo un grafo dirigido ponderado de N nodos no aislados, sea x el
nodo inicial. Un vector D de tamaño N guardará al final del algoritmo las
distancias desde x hasta el resto de los nodos.
2. Inicializar todas las distancias en D con un valor infinito relativo, ya que son
desconocidas al principio, exceptuando la de x, que se debe colocar en 0,
debido a que la distancia de x a x sería 0.
3. Sea a = x (Se toma a como nodo actual.)
4. Se recorren todos los nodos adyacentes de a, excepto los nodos marcados.
Se les llamará nodos no marcados vi.
5. Para el nodo actual, se calcula la distancia tentativa desde dicho nodo
hasta sus vecinos con la siguiente fórmula: dt(vi) = Da + d(a,vi). Es decir, la
distancia tentativa del nodo ‘vi’ es la distancia que actualmente tiene el
nodo en el vector D más la distancia desde dicho nodo ‘a’ (el actual) hasta
el nodo vi. Si la distancia tentativa es menor que la distancia almacenada
en el vector, entonces se actualiza el vector con esta distancia tentativa. Es
decir, si dt(vi) < Dvi → Dvi = dt(vi)
6. Se marca como completo el nodo a.
7. Se toma como próximo nodo actual el de menor valor en D (puede hacerse
almacenando los valores en una cola de prioridad) y se regresa al paso 3,
mientras existan nodos no marcados.
Una vez terminado al algoritmo, D estará completamente lleno.
https://jorgecontrerasp.wordpress.com/unidad-iii/busquedas-en-anchura-y-
profundidad/

https://es.wikipedia.org/wiki/B%C3%BAsqueda_en_profundidad

https://es.wikipedia.org/wiki/B%C3%BAsqueda_en_anchura

http://docencia.udea.edu.co/regionalizacion/teoriaderedes/informaci%F3n/C3_Prof
undidad.pdf

https://es.wikipedia.org/wiki/Algoritmo_de_Dijkstra

S-ar putea să vă placă și