Estuviste despierto hasta las 4 de la mañana y es fin de semana, así que te despertaste a las 2 de la tarde y ahora estás atrapado viendo videos de Jake y Amir en YouTube.
El video actual tiene un conjunto de “Recomendar videos” en la barra lateral.
Algunas de estas recomendaciones son videos que desea ver.
Llamemos a estas recomendaciones que desea ver los “vecinos” de su video actual. Forman parte de un conjunto completo de videos que desea ver.
Mientras mira su video actual, se da cuenta de que también quiere ver los videos vecinos X.
Así que haz clic derecho sobre ellos y presiona “Abrir enlace en una pestaña nueva”.
Ahora a la derecha de su video actual, tiene una lista de otros videos para ver, todos en pestañas separadas.
¿Qué vas a hacer después?
Profundidad-Primera búsqueda:
- Termina de ver su video, luego cierra esta pestaña.
- Abre la pestaña más a la derecha / última (la pestaña más recientemente agregada).
- Si ya ha visto ese video hoy, cierre esa pestaña sin abrir ningún vecino.
- Si no lo ha visto hoy, mire y abra cualquier video recomendado que le interese.
Continúe hasta que todas las pestañas estén cerradas.
Así es como se ve el pedido …
Breadth-First Search:
- Termina de ver su video, luego cierra esta pestaña.
- Abre la pestaña más a la izquierda (la primera / más antigua pestaña que abrió).
- Si ya ha visto ese video hoy, cierre esa pestaña sin abrir ningún vecino.
- Si no lo ha visto hoy, mire y abra cualquier video recomendado que le interese.
Continúe hasta que todas las pestañas estén cerradas.
Así es como se ve el pedido:
La única diferencia en la operación es qué lado usan las búsquedas para elegir la siguiente pestaña:
- La pestaña agregada más recientemente (DFS)
- O la pestaña agregada más antigua (BFS)
En realidad, esto tiene un gran impacto en la cantidad de pestañas que están abiertas en un momento dado, como veremos en breve. Pero primero, para ser claros …
Obtener la pestaña agregada más recientemente primero (DFS) se llama usando una pila:
Obtener la pestaña agregada más antigua primero (BFS) se llama usando una cola:
Con una pila / DFS, solo necesitamos hacer un seguimiento de unos pocos elementos a la vez.
Echemos un vistazo a la cantidad de elementos que necesitamos para realizar un seguimiento de algunos pasos:
Como puede ver … el número promedio de videos que necesitamos hacer un seguimiento en un momento dado es solo:
# Promedio de vecinos para cualquier video * Profundidad del gráfico
El número de videos que necesitamos rastrear es directamente proporcional a la profundidad del gráfico.
Uno mas:
Pero no es así con Breadth-First Search.
Simplemente cambiando de una Pila a una Cola, de repente necesitamos hacer un seguimiento de todos los vecinos de todos los videos en la cola:
Si me salteo algunos pasos, puede ver cómo puede aumentar la cantidad de videos en la cola:
Entonces, en BFS, al usar una Cola, el número de videos que debemos seguir puede crecer exponencialmente .
El número promedio de videos que necesitamos hacer un seguimiento en cualquier punto dado se convierte en:
Profundidad del gráfico ^ (número promedio de vecinos)
En lugar de multiplicar los dos, estamos elevando la profundidad a un poder . Entonces, esencialmente el número de elementos rastreados puede ser exponencial.
Puede pensar en esto como el número de pestañas abiertas: con DFS, solo tendrá un puñado de pestañas abiertas en un momento dado, con BFS podría tener un número ridículamente grande.
Es esto (DFS):
vs. esto (BFS):
Como resultado, a pesar de que hacen lo mismo, la Búsqueda en profundidad requiere mucho menos espacio que la Búsqueda en profundidad.
Entonces, si está buscando un gráfico muy grande y tiene un espacio limitado, un DFS a menudo es útil.
Por ejemplo, si usa Recursion, debe mantener todos los videos en la Memoria de pila, que no tiene mucho espacio.
Por lo tanto, generalmente se prefiere usar DFS en esos casos.
Pero, como habrás notado, BFS garantiza un pedido específico.
A saber: los elementos más cercanos al inicio son siempre los primeros elementos visitados.
Los elementos más lejanos son los últimos elementos visitados.
DFS no tiene este orden: algunos videos muy alejados del origen tienen números pequeños y otros tienen números grandes.
Entonces, si está buscando determinar cuál es la distancia más corta entre dos elementos, generalmente usará BFS, porque conserva automáticamente esa distancia en el orden en que visita las cosas.
Toma un poco de tiempo entenderlo, pero espero que esto te dé una idea de algunos de los pros y los contras de BFS vs DFS y por qué funcionan.