¿Cuál es la principal ventaja de utilizar la búsqueda de profundización iterativa en comparación con la búsqueda de amplitud primero?

La profundización iterativa con Depth-First Search usa mucha menos memoria que Breadth-First Search.

En cualquier punto del DFS, la cantidad de memoria en uso proporcional a los vecinos de una sola ruta a través del árbol de búsqueda. (Posiblemente menos si se pueden generar vecinos de manera ordenada). BFS usa una cantidad de memoria proporcional a todo el ancho del árbol de búsqueda. BFS rápidamente se vuelve inviable.

La compensación es que la profundización iterativa vuelve a visitar los mismos estados muchas veces. Pero, si el número de estados está creciendo exponencialmente, entonces la cantidad de tiempo dedicado a volver a visitar estados anteriores agrega solo un factor constante.

Suponga que el árbol de búsqueda tiene un factor de ramificación de 10. Luego, buscarlo a la profundidad 12 significa que hay [matemáticas] 10 ^ {12} [/ matemáticas] = un billón de hojas. La profundización iterativa usa solo aproximadamente [matemática] 10 \ veces 12 = 120 [/ matemática] valor de memoria de los nodos durante la búsqueda, pero BFS tendría que utilizar casi [matemática] 10 ^ {10} [/ matemática] veces más memoria. Los nodos internos en la profundidad 11 o inferior tienen que revisarse varias veces, pero

profundidad 0, 1 nodo, se visita 13 veces

profundidad 1, 10 nodos, son visitados 12 veces

profundidad 2, 100 nodos, son visitados 11 veces

profundidad 3, 1000 nodos, son visitados 10 veces

etc., entonces DFS tiene que buscar [matemáticas] 13 \ veces 1 + 12 \ veces 10 + 11 \ veces 10 ^ 2 + 10 \ veces 10 ^ 3 + 9 \ veces 10 ^ 4 + 8 \ veces 10 ^ 5 + 7 \ veces 10 ^ 6 + 6 \ veces 10 ^ 7 + 5 \ veces 10 ^ 8 + 4 \ veces 10 ^ 9 + 3 \ veces 10 ^ {10} + 2 \ veces 10 ^ {11} + 1 \ veces 10 ^ {12} = 1234567901233 [/ math] nodos, solo un poco más (proporcionalmente) que los [math] 1111111111111 [/ math] nodos que BFS visitaría.

En general, BFS es mejor para problemas relacionados con la búsqueda de los caminos más cortos o problemas relacionados de alguna manera. Porque aquí pasas de un nodo a todos los nodos adyacentes y, por lo tanto, te mueves efectivamente de la longitud de la ruta uno a la longitud de la ruta dos y así sucesivamente.

Mientras que DFS en el otro extremo ayuda más en los problemas de conectividad y también en la búsqueda de ciclos en el gráfico (aunque creo que también podrías encontrar ciclos con un poco de modificación de BFS). Determinar la conectividad con DFS es trivial, si llama al procedimiento de exploración dos veces desde el procedimiento DFS, entonces el gráfico se desconecta (esto es para un gráfico no dirigido). Puede ver el algoritmo de componente fuertemente conectado para un gráfico dirigido aquí, que es una modificación de DFS. Otra aplicación del DFS es la clasificación topológica.

Estas son algunas aplicaciones de ambos algoritmos:

DFS:

Conectividad
Componentes fuertemente conectados
Clasificación topológica

BFS:

El camino más corto (Dijkstra es algo así como una modificación de BFS).
Prueba de si el gráfico es bipartito

More Interesting

¿Qué es una cola prioritaria?

Cómo hacer un método que devuelva un arrayList que ha ordenado el número de Strings en cada fila del archivo

¿Cuál es el proceso de un algoritmo de red neuronal convolucional para un OCR?

¿Cuál es la complejidad temporal del algoritmo babilónico para encontrar la raíz cuadrada?

¿Cuál es la forma más eficiente para que un programador sea bueno en algoritmos sin participar en competencias de programación?

¿Qué es lo más importante para las empresas de software: código abierto, proyectos extracurriculares o habilidades algorítmicas (habilidades de programación competitiva)?

¿Cómo implementaría el ranking de respuestas de Quora?

Cómo estimar pi usando un hexágono unitario en Matlab

Creamos un algoritmo de software único para medir / cuantificar las diferencias de las imágenes a escala nano-planetaria. ¿Cómo monetizamos esto?

Cómo explorar los datos para elegir un algoritmo de aprendizaje automático

¿Qué es el algoritmo k-Nearest Neighbour? ¿Qué tipo de problemas puede resolver este algoritmo? ¿Qué tipo de matemática se requiere?

Te dan n pilas con p monedas, y cada jugador elimina al menos 1 moneda. El número de monedas eliminadas por un jugador no puede ser eliminado por el otro. ¿Quién ganará?

¿Resolver todos los problemas en Project Euler facilita la resolución de problemas en Topcoder?

¿Cómo se comparten de forma segura las claves de los algoritmos de cifrado y descifrado entre el emisor y el receptor sin ser interrumpidos por intrusos?

Cómo resolver http://www.spoj.com/problems/TRAFFICN/ de spoj