¿Cuáles son las diferencias entre DFS y BFS?

Hay buenas respuestas aquí y muchas disponibles en línea, pero usemos algunas imágenes para ayudar a visualizar las diferencias paso a paso.

Paso 1.

Ambos comienzan en el nodo raíz.


Paso 2.

Ambos arbitrariamente van al Nodo izquierdo más cercano. (Ambos podrían ser programados para ir primero también).


Paso 3.

DFS continúa explorando el árbol (primero se PROFUNDIZA). BFS está interesado en explorar todo en el nivel en el que se encuentra actualmente. BFS explora nivel por nivel.


Etapa 4.

DFS no tiene más profundidad para explorar en este camino. Sube uno y ve que hay más profundidad para explorar nuevamente desde un camino alternativo.

BFS terminó el nivel que estaba explorando y pasa al siguiente nivel.


Paso 5

DFS no tiene más profundidad para explorar nuevamente en este camino, vuelve a un nodo visitado anteriormente (Root) y ve que puede comenzar su búsqueda de profundidad nuevamente en un nuevo camino. BFS continúa explorando el nivel inferior.

Paso 6

DFS continúa yendo tan lejos como puede en el gráfico. BFS continúa explorando el nivel inferior.

Paso 7

DFS no tenía más nodos para explorar después del paso 6, vuelve a subir e intenta una ruta alternativa. BFS completa la exploración del nivel en el que estaba.


En general, DFS intenta llegar lo más lejos que puede en un gráfico (explore primero la profundidad del gráfico). Si ya no puede explorar la profundidad, retrocede e intenta un camino alternativo en su búsqueda hacia abajo. BFS va nivel por nivel. BFS explora los nodos que lo rodean directamente primero.

Hay un gran video de MIT en BFS

y de manera similar una excelente en DFS

Otras respuestas explican la diferencia en cómo se ejecutan BFS y DFS. Un artefacto de estos algoritmos son los árboles transversales que se generan. En las implementaciones estándar, DFS generalmente genera un bosque de primeros árboles de profundidad y BFS generalmente genera un primer árbol de amplitud. Esto se debe a que generalmente ejecutamos DFS desde múltiples nodos y BFS desde un solo nodo. Esta distinción (que es bastante arbitraria) también define la forma en que se utilizan estos algoritmos transversales. DFS se usa para encontrar conectividad, pedidos, ciclos, etc., mientras que BFS se usa principalmente para encontrar rutas más cortas desde una fuente.

Examina mi publicación sobre DFS y BFS.

Amplitud primera búsqueda y profundidad primera búsqueda ~ Umut Efiloğlu

Si mi artículo no es suficiente y falta, solicíteme información detallada.

Saludos.

~~~~~~~~~~~~~~~~~~~~~~~~~~~

-Umut Efiloğlu

Umut Efiloğlu ~ esperanza de vivir – vivir de la esperanza

https://www.linkedin.com/in/umut

¿Qué es DFS y BFS transversal en estructuras de datos?

Agarra el concepto con ilustración visual.

Comparte para cuidar.

https://goo.gl/EbKbmK

El uso máximo de memoria de DFS es la distancia al nodo ‘más profundo’ del árbol, el uso máximo de memoria de BFS es el nivel ‘más amplio’ (a menos que elija un algoritmo más lento que el ingenuo), que generalmente es mucho más. El primer nodo objetivo encontrado por DFS será la solución ‘más a la izquierda’, el primer nodo objetivo encontrado por BFS será una de las soluciones ‘menos profundas’. Si el árbol es infinito, pero tiene un nodo objetivo, BFS terminará pero DFS no.

More Interesting

Resolví el problema de la Torre de Hanoi de una manera que no requiere conocer el movimiento anterior o siguiente. ¿Se ha hecho esto antes?

¿Por qué alguien usa el hashing cuando el peor tiempo de búsqueda del hashing es O (n) y eso para bbst es logn?

Cómo imprimir todas las permutaciones de una cadena tanto de forma iterativa como recursiva

¿Puede una computadora generar un número verdaderamente aleatorio?

¿Cuál es la diferencia entre analizar un archivo CSV y JSON? ¿Qué algoritmos comunes usarías en ambos?

Un k-palíndromo es una cadena que se transforma en un palíndromo al eliminar como máximo k caracteres de él. Dada una cadena S y un número entero K, ¿encuentra si S es un k-palíndromo o no? Restricciones: S tiene como máximo 20,000 caracteres y 0 <= k <= 30

¿Alguien puede compartir el conocimiento sobre el algoritmo de Monte Carlo que recoge datos al azar?

En Codeforces Round # 308 (Div. 2), ¿cómo descubrieron todos la cantidad de dígitos de un número usando un algoritmo eficiente de toma de tiempo? ¿Alguien puede explicarlo?

¿Por qué el cifrado de la función Algoritmo de hash no puede transformar el texto cifrado en texto sin formato?

¿Por qué estudiamos diferentes algoritmos para la misma tarea?

¿Cómo puedo extender el algoritmo KMP a 2 dimensiones?

¿Qué es binario?

¿Cómo reconocen los programas el nombre usando el procesamiento del lenguaje natural?

¿Cuál es la mejor manera de saber qué estrategia (codiciosa, dividir y conquistar, programación dinámica) funcionaría mejor para un problema de algoritmo en particular?

¿Cuál es el problema matemático más difícil que existe?