Consulta sobre DFS iterativo

Consulta sobre DFS iterativo

de Martin Rocamora -
Número de respuestas: 2

Hola. Una duda con respecto a la versión iterativa. Seguí el pseudocódigo de la Wikipedia: http://en.wikipedia.org/wiki/Depth-first_search

Y cada vez que se procesa un nodo se agregan sus hijos y se lo marca como ya cerrado. Esto estrictamente da un orden de cerrado inverso al caso iterativo en el que un nodo se cierra luego de haber procesado a sus hijos. Entiendo que es lo mismo, porque luego podemos imprimir en el orden correcto cuando terminamos de procesar. Es correcto hacer eso? O modifico el algoritmo para cerrar un nodo después de procesar a sus hijos?

Otra cuestión es que se supone que el algoritmo iterativo puede hacer que explote el stack de invocación y por eso el iterativo es más apropiado (aunque menos intuitivo). Entonces la duda es si probamos con un árbol grande hasta hacer reventar el stack de invocación :) o alcanza con comentar esto sin verificarlo. A mi la verdad que me gustaría hacer volar el stack de invocación, solo que no me he puesto a generar un árbol lo suficientemente grande. Además, me da la impresión de que debería de ser verdaderamente grande para que eso ocurra y tal vez me quede sin memoria antes de reventar el stack. No sé, quería saber si la idea era probarlo o simplemente comentar que eso podría pasar.

Saludos!

 

 

 

En respuesta a Martin Rocamora

Re: Consulta sobre DFS iterativo

de Martin Rocamora -

Otra consulta. Con respecto a la comparación en el uso de  memoria, la idea es medir la memoria usada por cada implementación? O simplemente hacer notar que uno usa más memoria que otro por las estructuras de datos auxiliares? Me surgió la duda porque tal vez hay una forma de medir el uso de memoria con el valgrind memcheck y no la conozco, porque lo único que he hecho ha sido verificar que no hay leaks. Es decir, puedo ver el heap usage, pero como no hago malloc en ninguna de las dos implementaciones no hay diferencias en el heap.

Saludos!

P.D. Un par de detalles. Habría que hacer un tree_delete que haga el free de los nodes si no queremos tener leaks de memoria. Y falta el fclose en la función read_tree, que también es necesario para no tener leaks.

En respuesta a Martin Rocamora

Re: Consulta sobre DFS iterativo

de Juan Cardelino -

Yo creo que los bugs que había eran esos. Sobre el fclose y el free lo hago y lo subo a ver si prueban. De hecho, creo que lo tengo ya programado pero no actualcé el zip. Lo miro.

Cuando hay memoria estática no podés medir con el valgrind, pero justamente como es estática es fácil medir a mano.

Sobre hacer reventar el stack de invocación, yo tengo un ejemplo expresamente para eso, que se los voy a mostrar cuando haga la puesta a punto (tengo un video y unos slides con eso justamente). Así como la medida del stack con valgrind.

Con respecto al tamaño del árbol, no es del todo trivial hacerlo. Yo lo armo y se los mando entre hoy y mañana.

Un abrazo.