¿Por qué se considera que DFS tiene una complejidad de espacio

11

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.O(bm)bm

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 duplicadosO(|V|)O()

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.O(m)m

¿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.b

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".O(d)d

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.

nbro
fuente
DFS is considered to […] of the treeno todas las gráficas de profundidad atravesada primero son árboles .
barba gris
Hay una diferencia entre decir "aquí la implementación de DFS ha costado X" y "DFS puede implementarse de modo que haya costado X". Parece estar discutiendo sobre diferentes declaraciones del segundo tipo, que no tienen por qué ser contradictorias. (Tenga en cuenta que no hay contradicción en absoluto ya que , si O ( b m ) significa algo en absoluto.)O(bm)O(m)O(bm)
Raphael
@greybeard ¿Puede decirme un ejemplo en el que un recorrido en profundidad en un gráfico no resulte en un árbol?
nbro
example where a depth-first traversal on a graph would not result in a treesin pensarlo demasiado: análisis. (Espera: ¿a qué te refieres result in a tree? La pregunta es sobre buscar / atravesar un gráfico)
Barba gris
1
@greybeard Según todas las definiciones que he encontrado hasta ahora. Búscame una definición donde vuelva a visitar los nodos, luego podremos discutirlo.
nbro

Respuestas:

7

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:bm[b]m

  1. Comience en la raíz. Empuje a la pila (en orden inverso).1,2,,b

  2. Pop , y empuja 11 , 12 , ... , 1 b a la pila.111,12,,1b

  3. Pop , y empuja 111 , 112 , ... , 11 b a la pila.11111,112,,11b

  4. Haga estallar y empuje 1 m , 1 m - 1 2 , , 1 m - 1 b a la pila.1m11m,1m12,,1m1b

En este punto, la pila contiene

1m,1m12,,1m1b,,112,,11b,12,,1b,2,,b,

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.(b1)m+1

Yuval Filmus
fuente
2
Una pinta a tiempo mantiene al médico alejado.
barba gris
3

Hay dos puntos aquí para hacer:

  1. O(bd)bddbbO(d)

  2. O(d)db

O(bd)O(d)

Espero que esto ayude,

Carlos Linares López
fuente