Sei sulla pagina 1di 8

Búsqueda en Arboles

Búsqueda Ciega

d
– Búsqueda en profundidad ...
b
– Búsqueda en anchura

– Profundización iterativa

– Ampliación iterativa soluciones

Arbol de búsqueda:
– finito: profundidad d
– no hay estados repetidos
– factor de ramificación b uniforme
– soluciones a profundidad d
Esquema de Búsqueda Búsqueda en Profundidad

Esquema: Depth-First Search nivel


1. L ! lista de nodos iniciales del problema. 1 0
En cualquier momento, L contiene la lista de nodos no
visitados.
2 15 28
1
2. Si L vacía, fallo, stop.
Sino, n ! extrae un nodo de L
2
3. Si n es objetivo, éxito, stop. Retornar el camino desde 3 7 11 16 20 24 29 33 37
la raíz hasta n.
4. Sino, eliminar n de L. Añadir a L los sucesores de n,
3
etiquetando sus respectivos caminos desde la raíz. 4 5 6 8 9 10 12 13 14 17 18 19 21 22 23 25 26 27 30 31 32 34 35 36 38 39 40
Volver al paso 2.

Opciones:
extrae un nodo de L Algoritmo DFS:

¿al principio? ¿al final ? 1. Lista L ! nodo raíz

añadir a L 2. Si L vacía, fallo, stop.


Sino, n ! extrae-primero(L).
¿al principio? ¿al final ?
3. Si n es objetivo, éxito, stop. Sino, generar los
sucesores de n
sucesores de n.
¿todos? ¿unos pocos?
4. Añadir al principio de L todos los sucesores de n,
repetir la búsqueda etiquetando cada sucesor con su camino desde la
otros parámetros raíz. Ir al paso 2.
Búsqueda en Profundidad Búsqueda en Anchura

Breath-First Search
1 0

d 1
2 3 4

2
5 6 7 8 9 10 11 12 13

b
3
Espacio: d (b - 1) + 1 lineal en d 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

Tiempo: (nodos visitados)


objetivo: hoja más a la izquierda
d+1 Algoritmo BFS:
objetivo: hoja más a la derecha 1. Lista L ! nodo raíz
bd+1 - 1
1 + b + b2 + .... + bd = b-1 2. Si L vacía, fallo, stop.
media: Sino, n ! extrae-primero(L).
3. Si n es objetivo, éxito, stop. Sino, generar los
bd+1 + bd + b - d - 2 bd+1
" (d grande) sucesores de n.
2(b - 1) 2(b-1)
4. Añadir al final de L todos los sucesores de n,
etiquetando cada sucesor con su camino desde la
exponencial en d raíz. Ir al paso 2.
Búsqueda en Anchura Profundidad vs Anchura
1

Espacio: lineal vs exponencial


2 3 4
Tiempo: ambos exponenciales
d DFS mejor que BFS por un factor
5 6 7 8 1
1+
b

Características:

Espacio: bd exponencial en d

Tiempo: (nodos visitados) BFS


nodos internos
1 + b + b2 + .... + bd-1 = bd - 1
b-1
media nodos hoja
1 + bd
2
media nodos visitados DFS
bd+1 + bd + b -3 bd+1 + bd
" (d grande)
2(b - 1) 2(b-1)
Solución más cercana a la raíz:
BFS: Sí DFS: No
exponencial en d

DFS y ramas infinitas?


Profundización Iterativa Profundización Iterativa

Iterative Deepening Search [Korf 85]


1, 2, 6, 19 0

3, 7, 20 4, 11, 33 5, 15, 46
1

2
8, 21 9, 25 10, 29 12, 34 13, 38 14, 42 16, 47 17, 51 18, 55

3
22 23 24 26 27 28 30 31 32 35 36 37 39 40 41 43 44 45 48 49 50 52 53 54 56 57 58

Algoritmo:
1. Cota profundidad c ! 1.
2. Lista L ! nodo raíz.
3. Si L vacia, c ! c + 1, ir al paso 2.
Sino, n ! extrae-primero(L).
4. Si n es objetivo, éxito, stop.
5. Si profundidad(n) < c, añadir al principio de L
todos los sucesores de n, etiquetando cada
sucesor con su camino desde la raíz.
En cualquier caso, ir al paso 3.
Profundización Iterativa DFS / BFS vs IDA

DFS BFS IDA


Espacio: igual que DFS Espacio: lineal exp lineal
d (b - 1) + 1 lineal en d
Tiempo: exp exp exp
Tiempo: (nodos visitados)
iteraciones anteriores: a profundidad j
BFS b+1
=
bj+1 - 1 DFS b
b-1
d-1 IDA b
bj+1 - 1 bd+1 - bd - b + d =
! b-1 = (b - 1) 2 BFS b-1
j=0

IDA b+1
=
última iteración: a profundidad d DFS b-1
bd+1 + bd + b - d - 2
2(b - 1) Características:
Solución más cercana a la raíz
sumando BFS: Sí DFS: No IDA: Sí

bd+2 + bd+1 + b2d + b2 - 4bd - 5b + 3d +2 Problema con ramas infinitas


2(b - 1) 2
BFS: No DFS: Sí IDA: No

" bd+2 + bd+1 Solución a profundidad fija: DFS


2(b - 1) 2 (d grande)

exponencial en d
Ampliación Iterativa Ampliación Iterativa

. . .

. . .
Ampliación Iterativa Ampliación Iterativa

Iterative Broadening Search [Ginsberg 92]


Espacio: igual que DFS
1, 5, 6, 20 0
d (b - 1) + 1 lineal en d

2, 6, 21 13, 34 47
1 Tiempo: (nodos visitados) "

2 d+ 2d + 3d + . . . + bd
3, 7, 22 10, 26 30 14, 35 17, 39 43 48 52 56 b=1, b=2, b=3, . . . , b

3
4 9 25 11 12 29 31 32 33 15 16 38 18 19 42 44 45 46 49 50 51 53 54 55 57 58 59 bd+1
8 24 27 28 36 37 40 41 (b grande)
23 d

Algoritmo:
1. Cota anchura c ! 1.
2. Lista L ! nodo raíz.
3. Si L vacía, c ! c + 1, ir al paso 2.
Sino, n ! extrae-primero(L).
4. Si n es objetivo, éxito, stop.
5. Añadir al principio de L los primeros c sucesores
de n, etiquetando cada sucesor con su camino
desde la raíz. Ir al paso 3.

Potrebbero piacerti anche