Вы находитесь на странице: 1из 17

Un algoritmo de bsqueda se basa en la construccin de un rbol, cuyo

nodo raz representa el estado inicial, es decir, la situacin desde la cual


partimos. Cada uno de los nodos hijos de la raz representar los estados
posibles a los que se puede cambiar desde el estado inicial, y as
sucesivamente.

En la bsqueda primero en profundidad, partiendo del estado inicial, el
algoritmo comienza a examinar cada uno de las transiciones posibles,
construyendo el rbol de estados, pero no abandona una rama hasta
haber agotado todas las posibilidades, o haber llegado a la solucin
(denominada estado final o estado meta). Por tanto, su funcionamiento
sera el siguiente: Parte del estado inicial y examina la primera de las
posibilidades de transicin, a continuacin, pasa a examinar la primera de
las posibilidades del nuevo estado, y as sucesivamente, va bajando de
nivel en el rbol. Una vez que ha alcanzado el estado meta o un estado ya
repetido (lo cual indica que por esa rama no va a ninguna parte), examina
la siguiente posibilidad del ltimo nodo explorado, y as hasta completar
el rbol.
Una bsqueda en profundidad la realizamos yendo al primer vrtice hijo
que encontremos. Repetimos esto hasta llegar al vrtice con la respuesta
o a una hoja. En caso de que encontremos la respuesta, paramos; en caso
de que lleguemos a una hoja, regresamos un nivel y buscamos en los
vrtices que no hayamos visitado. Para saber cmo regresarnos, los
vrtices los vamos guardando en una pila (seccin 11.4). Es por esto que
se acostumbra programar esta bsqueda de forma recursiva, con lo que
el manejo de la pila lo realiza el lenguaje.

Conociendo el nmero de ramas (E) y de aristas (V), la complejidad en
tiempo de esta bsqueda es de O(E + V). Si denotamos la profundidad
mxima como d, y a la cantidad de opciones (ramificaciones) que
tenemos en cada vrtice como c, entonces la complejidad en tiempo la
podemos expresar como O(cd) y la complejidad en espacio como O(d).

Cuando es utilizada para bsquedas exhaustivas en problemas de
cumplimiento de restricciones, a la bsqueda en profundidad tambin se
le conoce como vuelta atrs (backtracking). Para acelerar la bsqueda,
es comn que en los problemas de vuelta atrs se revise si al visitar un
nuevo vrtice se siguen cumpliendo las condiciones de restriccin. Con
esto podemos evitar tener que llegar hasta una hoja para saber si el
problema est resuelto. Tambin se acostumbra utilizar las variables con
ms restricciones al principio, ya que generalmente ayuda a visitar menos
vrtices.

PSEUDOCODIGO


Se tiene un rbol en
un estado inicial y
se cuenta con
cuatro metas: M1,
M2, M3 y M4.
Se introduce A
como primer
elemento de la lista.
A no es la meta as
que se saca de la
lista.
Se introducen los
hijos de A al frente
de la lista
guardando siempre
el orden de
descendencia y
empezando de
izquierda a
derecha.

Se saca AB de la
lista ya que no se
llego a ninguna
meta.
Se introducen los
hijos de B siguiendo
siempre el orden de
izquierda a
derecha.
En el frente de la
lista quedan ABD y
ABE.
Al no ser ABD una
meta se saca de la
lista.
Se introducen los
hijos de D al frente
de la lista.
Queda como
resultado el estado
mostrado.
No se encuentra
una meta en H.
Se introducen los
hijos de H y se
puede ver que uno
de los hijos es una
meta.
Se comprueba de
que P no es una
meta y se saca
ABDHP de la lista.
Se comprueba de
que M2 es una de
las metas y se
registra el recorrido
completo.
Se Obtiene el
recorrido hacia la
meta.
Existe mas de una
meta en el rbol, el
algoritmo alcanza el
xito cuando
encuentra una meta
y no distingue cual
de ellas sea
En el caso hipottico de que M2 no fuese una meta
el siguiente paso habra sido sacar ABDHM2 de la
lista y analizar el nodo I.
Como I no es una meta el siguiente estado de la
lista seria: L7 = {ABDIQ ABDIR ABDE AC}
Se comprueba que ni Q ni R son metas y se sacan
de la lista hasta llegar al estado de la lista L9 =
{ABEJ ABEM1 AC}.
Se expanden los hijos de J y la lista queda como
L10 = {ABEJS ABEJT ABEM1 AC}.
Ni S ni J son metas as que se sacan de la lista y
finalmente se llega al estado meta M1 con la lista
L12 = {ABEM1 AC}.
Se hace el recorrido que lleva desde A hasta M1: A
B E M1.

Вам также может понравиться