Algoritmos: ¿Cómo decide si usar BFS o DFS para un problema en particular?

Me gustaría agregar a la excelente respuesta de Sastry Aditya que BFS y DFS pueden tener diferentes complejidades espaciales en la práctica.

  • BFS expande todos los hijos de un vértice y los mantiene en la memoria. Luego, pasa al siguiente nivel del primer hijo y expande sus hijos y también los mantiene en la memoria. Por lo tanto, BFS mantiene la franja de un salto de todos los vértices visitados en la memoria, lo que puede conducir a un uso elevado de la memoria.
  • DFS expande iterativamente solo un hijo hasta que ya no puede continuar y retrocede a partir de entonces. Aunque la complejidad del espacio en el peor de los casos es la misma que BFS, es decir, [matemática] O (n) [/ matemática], puede haber un ahorro significativo de espacio en la práctica:

Con factor de ramificación [matemática] b [/ matemática] y profundidad máxima [matemática] m [/ matemática] , DFS requiere el almacenamiento de solo nodos [matemática] bm + 1 [/ matemática] que son [matemática] O (bm) [/ matemática] en comparación con [matemática] O (b ^ (d + 1)) [/ math] de la BFS. [1]

Por otro lado, si la profundidad de su gráfico es (casi) infinita, como en los árboles de búsqueda de ajedrez, el uso de DFS simple resulta en la exploración de un solo camino. La profundización iterativa de la profundidad máxima sería una solución rápida para esto.

Notas al pie

[1] Blog T de Muhamad Hesham

Depende de dónde probablemente espera que esté su nodo de solución. ¿Principalmente en el vecindario de su nodo actual? -> elige BFS
¿Probablemente el descendiente más lejano de un nodo? -> elija DFS
¿Visualiza el algoritmo / solución para verificar todos los nodos secundarios primero -> elija BFS
¿Visualiza el algoritmo / solución para seguir un nodo hasta el final y luego elegir el siguiente nodo secundario? -> elija DFS

El problema de la ruta más corta no es un problema de búsqueda y, por lo tanto, BFS / DFS no lo resuelve.

More Interesting

¿Cuál es la mejor forma / algoritmo para detectar un patrón en una serie de tiempo?

¿Mattermark está utilizando datos para entrenar algoritmos de aprendizaje automático y modelos predictivos que pueden buscar / identificar nuevas empresas potenciales en una etapa temprana que tienen el potencial de interrumpir la industria?

Con los algoritmos de cifrado modernos, ¿es factible que alguien sepa qué algoritmo se utilizó al mirar el texto cifrado?

¿Qué estructuras de datos y algoritmos deben conocer todos los estudiantes de ciencias de la computación / ingeniería?

Cómo ordenar una lista anidada en Python

¿Cuál es el problema si clasificamos los intervalos según su tiempo de finalización como el problema de programación de intervalos? ¿Por qué es necesario ordenar según la hora de inicio en el problema de partición de intervalos?

¿Podría hacerlo sin espacio adicional y en tiempo de ejecución O (n)?

Cómo calcular la correlación de cada fila en una matriz 2D con una matriz 1D de la misma longitud

¿Por qué mi solución C ++ al problema SPOJ.com - Problema DIVSUM2 muestra un error?

¿Cómo calculamos la complejidad espacio-temporal de un algoritmo?

¿Es mejor representar aristas en un gráfico que sale de un vértice como miembros de una matriz dinámica o una lista vinculada?

¿Por qué se ejecuta un análisis de tiempo de un algoritmo llamado asintótico?

¿En cuánto tiempo puedo ser un profesional en la resolución de problemas en algoritmos y estructuras de datos si empiezo hoy sin ningún conocimiento previo?

¿De dónde debo aprender los algoritmos de aprendizaje automático?

¿Cuál es la forma lógica de resolver el problema SPOJ 'Palin'?