next up previous
Next: 2.2.2.1 Backtracking Up: 2.2 Búsqueda ciega o Previous: 2.2.1.1 Búsqueda de Costo

2.2.2 Depth-first o Búsqueda en Profundidad (LIFO)

Depth-first siempre expande uno de los nodos a su nivel más profundo y sólo cuando llega a un camino sin salida se regresa a niveles menos profundos.


Tabla 2.4: Algoritmo Depth-first
\begin{table}
\begin{tabbing}
12\=123\=123\= \kill
\> Crea una agenda de un elem...
... a\a {n}ade sus sucesores al \emph{frente} de la agenda
\end{tabbing}\end{table}


En depth-first cada nodo que es explorado genera todos sus sucesores antes de que otro nodo sea explorado. Después de cada expansión el nuevo hijo es de nuevo seleccionado para expansión.

Si no se puede continuar, se regresa al punto más cercano de decisión con alternativas no exploradas.

Se puede implementar añadiendo los sucesores de cada nodo al frente de la agenda.

Depth-first necesita almacenar un solo camino de la raíz a una hoja junto con los ``hermanos'' no expandidos de cada nodo en el camino.

Por lo que con un factor de arborecencia de $b$ y profundidad máxima de $m$, su necesidad de almacenamiento es a los más $bm$.

Su complejidad en tiempo (cuanto se tarda) es $O(b^m)$ en el peor de los casos.

Para problemas con muchas soluciones depth-first puede ser más rápido que breadth-first porque existe una buena posibilidad de encontrar una solución después de explorar una pequeña parte del espacio de búsqueda

Depth-first no es ni completo ni óptimo y debe de evitarse en árboles de búsqueda de profunidad muy grande o infinita.



Subsections
next up previous
Next: 2.2.2.1 Backtracking Up: 2.2 Búsqueda ciega o Previous: 2.2.1.1 Búsqueda de Costo
Eduardo Morales Manzanares 2004-11-02