22

Normalmente, cuando he tenido que recorrer un gráfico, siempre he utilizado la búsqueda de profundidad primero debido a la menor complejidad del espacio. Honestamente, nunca he visto una situación que requiera una búsqueda amplia, aunque mi experiencia es bastante limitada.¿Para qué sirve la búsqueda exhaustiva?

¿Cuándo tiene sentido utilizar una búsqueda de amplitud?

ACTUALIZACIÓN: Supongo que mi respuesta here muestra una situación en la que he usado un BFS (porque pensé que era un DFS). Todavía tengo curiosidad por saber por qué fue útil en este caso.

Respuesta

10

Cuando desee alcanzar un nodo, recorra la menor cantidad posible de bordes, es decir, cuando desee encontrar la ruta más corta en un gráfico sin ponderar.

También la complejidad del espacio de una primera búsqueda en profundidad puede ser mayor que la de una primera búsqueda de ancho cuando, p. Ej. cada nodo tiene solo un nodo hijo, es decir, cuando el gráfico es profundo pero no muy amplio.

+0

Parece que debería ser un caso bastante extremo para que un BFS ocupe menos espacio que un DFS, considerando que la complejidad del espacio de un BFS es b^d. –

+0

Después de refrescarme en lo que realmente quiero decir con b y d en mi comentario anterior, recordé que cada nodo que tenga un nodo hijo sería 1^d. Por lo tanto, supongo que tener solo un nodo hijo * sería * un caso extremo. :-) –

2

Un ejemplo es atravesar el sistema de archivos (con profundidad recursiva limitada).

Según wikipedia, también es útil para ciertos algoritmos de gráficos (bipartitos, componentes conectados).

3

Podría ser utilizado para resolver un problema de búsqueda con un mínimo de pasos. Ir en profundidad primero podría llevar (si no se limita de alguna manera) a una profundidad infinita.

Ejemplo: encontrar el nodo más cercano a la raíz que satisface una condición.

+0

Entonces, en otras palabras, BFSes son la solución más simple para gráficos infinitos? –

+1

No realmente. Es un enfoque ingenuo. Si está 100% seguro de que existe una solución, entonces podría funcionar. Pero si no existe una solución y no se limita la búsqueda, entonces no es un buen enfoque. –

1

Cuando necesite obtener la ruta más corta a un vértice desde un gráfico sin ningún borde de peso.

+0

Sin embargo, ¿cómo es un BFS la mejor herramienta para el trabajo en ese caso? ¿No se puede lograr eso usando un DFS? –

+0

@JasonBaker: ¡pruébalo alguna vez! Para encontrar el camino más corto en un gráfico con muchos ciclos, DFS requiere una contabilidad ominosa para evitar el trabajo duplicado y para tratar de garantizar el progreso. Cuando BFS alcanza un objetivo, listo, cuando DFS alcanza un objetivo, debe continuar hasta que finalice el recorrido completo para asegurarse de que no se haya perdido nada. BFS visita cada nodo a la meta una vez, DFS visitará muchas veces (de nuevo, para limitar eso, se necesita una cuidadosa contabilidad y heurística específica del dominio que puede ser muy complicado de obtener). – Bogatyr

1

En la primera búsqueda en profundidad puede encontrar soluciones "locales": para encontrar realmente una solución global, necesita recorrer todo el gráfico (o usar una heurística).

1

BFS a veces es realmente útil. Supongamos que tiene un árbol que representa digamos WBS. Es posible que desee presentarle a su usuario solo 1 nivel.

+1

Erm ... ¿Qué es WBS? –

+0

Estructura de desglose de trabajo;) http://en.wikipedia.org/wiki/Work_breakdown_structure – kubal5003

6

Si su dominio de búsqueda es infinito, depth-first-search no garantiza terminar/encontrar una solución, incluso si existe una solución finita.

También puede ver algoritmos más elaborados como A * para ser un subtipo especial de búsqueda de ancho primero.

En general, bfs es óptimo y completo (con factor de ramificación finito) mientras que dfs no lo es.

2

¿Cuándo tiene sentido utilizar una búsqueda de amplitud?

Por ejemplo, cuando necesita encontrar la ruta más corta en un gráfico, DFS simplemente no puede hacer eso. Existen algunas otras aplicaciones, pero, en general, DFS y BFS son el mismo algoritmo que trabaja en diferentes estructuras de datos (BFS usa la cola y el DFS funciona con la pila).

3

Nadie ha mencionado un factor clave en los casos en que la búsqueda de amplitud es útil: visitar un nodo de una manera puede eliminar el requisito de visitar el nodo de otra manera.En algunos casos, uno terminará haciendo el mismo trabajo independientemente del orden en que se visiten los nodos, pero BFS tendrá muchas menos acciones pendientes a la vez que DFS. En otros casos, visitar nodos en una secuencia puede requerir más trabajo que otros; varios algoritmos de ruta más corta se dan como un ejemplo de eso. Si visitar un nodo requiere visitar a sus vecinos a menos que se sepa que el nodo es accesible por una ruta más corta que la actual, visitar los nodos en orden de amplitud típicamente dará como resultado que los nodos tengan asignada la ruta más corta, o algo cercano a ella. en su primera visita Por el contrario, una búsqueda en profundidad haría que muchos nodos fueran visitados por caminos muy largos la primera vez, luego por caminos ligeramente más cortos, luego por caminos ligeramente más cortos, etc., que requerían una cantidad total de trabajo realmente monstruosa.

BTW, una bonita ilustración gráfica de la diferencia entre los algoritmos primero en profundidad y ancho es un relleno de inundación de área, donde un nodo blanco está lleno de inundaciones pintándolo de negro y llenando de inundación a sus vecinos. Si se intenta rellenar un área cuadrada NxN comenzando en un maíz, una operación de profundidad llenaría el cuadrado en una secuencia en espiral o en zig-zag, con operaciones NxN-1 restantes en la pila. Un relleno de ancho primero se "vierta" desde el punto de inicio y tiene como máximo O (N) operaciones pendientes, independientemente de la forma que se llene. Por cierto, el relleno de inundación en IBM BASICA funcionó de esa manera (no estoy seguro acerca de QBASIC).

1

Algoritmo de búsqueda de primer orden le gusta estar lo más cerca posible del punto de partida. Algunas de las situaciones que se me ocurren son:

  1. sitios web de redes sociales se pueden utilizar para encontrar a las personas en la distancia especificada .
  2. Puede ser útil en torrenting/peer-to-peer network para buscar computadoras vecinas.
  3. Los sistemas de navegación GPS pueden usarlo para encontrar lugares cercanos.