Según estas notas , se considera que DFS tiene una complejidad de espacio , donde b es el factor de ramificación del árbol ym es la longitud máxima de cualquier ruta en el espacio de estado.
Lo mismo se dice en esta página de Wikibook en Búsqueda desinformada .
Ahora, el "cuadro de información" del artículo de Wikipedia sobre DFS presenta lo siguiente para la complejidad espacial del algoritmo:
, si se recorre todo el gráfico sin repetición, O (se busca la longitud de ruta más larga ) para gráficos implícitos sin eliminación de nodos duplicados
que es más similar a lo que pensé que era la complejidad espacial de DFS, es decir, , donde m es la longitud máxima alcanzada por el algoritmo.
¿Por qué creo que este es el caso?
Bueno, básicamente no necesitamos almacenar ningún otro nodo que no sea el nodo de la ruta que estamos viendo actualmente, por lo que no tiene sentido multiplicarlo por en el análisis proporcionado tanto por Wikibook como por las notas que le envié. a.
Además, según este documento sobre IDA * de Richard Korf , la complejidad espacial de DFS es , donde d se considera el "límite de profundidad".
Entonces, ¿cuál es la complejidad espacial correcta de DFS?
Creo que puede depender de la implementación, por lo que agradecería una explicación de la complejidad del espacio para las diferentes implementaciones conocidas.
DFS is considered to […] of the tree
no todas las gráficas de profundidad atravesada primero son árboles .example where a depth-first traversal on a graph would not result in a tree
sin pensarlo demasiado: análisis. (Espera: ¿a qué te refieresresult in a tree
? La pregunta es sobre buscar / atravesar un gráfico)Respuestas:
Depende de lo que llames exactamente DFS. Considere, por ejemplo, el algoritmo DFS-iterativo descrito en Wikipedia , y suponga que lo ejecuta en un árbol para no tener que realizar un seguimiento de los nodos que ya ha visitado. Supongamos que se ejecuta en un completo árbol ary de profundidad m . Podemos identificar nodos en su árbol con palabras de más de [ b ] de longitud como máximo m . El algoritmo funciona de la siguiente manera:b m [b] m
Comience en la raíz. Empuje a la pila (en orden inverso).1,2,…,b
Pop , y empuja 11 , 12 , ... , 1 b a la pila.1 11,12,…,1b
Pop , y empuja 111 , 112 , ... , 11 b a la pila.11 111,112,…,11b
Haga estallar y empuje 1 m , 1 m - 1 2 , … , 1 m - 1 b a la pila.1m−1 1m,1m−12,…,1m−1b
En este punto, la pila contiene
para un total de nodos. Puede comprobar que esta es la pinta en el tiempo en que se maximiza el tamaño de la pila.(b−1)m+1
fuente
Hay dos puntos aquí para hacer:
Espero que esto ayude,
fuente