You are on page 1of 50

INTELIGENCIA ARTIFICIAL

1
Bsquedas Bsicas

LNMV
2

Temas:

1. Bsqueda de rbol

2. Bsqueda en profundidad

3. Bsqueda en amplitud

4. Bsqueda no determinstica

LNMV
3 1. Bsqueda de rbol

rbol: Estructura no lineal acclica usada para organizar


informacin eficientemente.

Colecciona valores tanto en la raz como en los subrboles de la


raz.

Se utilizan para representar datos que tengan relacin jerrquica


entre ellos.

LNMV
4 Algunos trminos de rbol

rbol Binario:
Es aquel que consta de dos subrboles.
Los rboles binarios se pueden recorrer de tres formas: Inorden,
preorden y en posorden.

Inorden: Subrbol Izquierdo, Visitar Raz, recorrer subrbol


Derecho

Preorden: Visitar raz, Recorrer subrbol Izquierdo y recorrer


subrbol Derecho.

Posorden: Recorrer subrbol izquierdo, recorrer subrbol


derecho y Visitar Raz.

LNMV
5 Algunos trminos de rbol

rboles de Bsqueda - ABB.

Este tipo de rboles tienen las siguientes caractersticas:

a) Puede ser vaca

b) Cuando no es vaco se cumple que los elementos del subrbol


Izquierdo son menores que la raz

c) Los elementos del subrbol Derecho son mayores que los


elementos del subrbol izquierdo.

LNMV
6 Algunos trminos de rbol

Conceptos sobre rboles.

Nodos: Elementos del rbol

Ramas: Componente de la estructura de un rbol

Elemento: dato que se almacena o se quiere organizar.

Nodo Padre Es aquel que tiene por lo menos una rama que lo
una con otro nodo.

Raz del rbol: todos los rboles que no estn vacos tienen un
nico nodo raz. Todos los dems elementos o nodos se derivan o
descienden de l.

LNMV
7 Algunos trminos de rbol

Nodo Hijo : Es aquel que tiene por lo menos una rama que una a
otro nodo con ste.

Hoja: Nodo que no tiene hijos o subrboles.

Tamao de un rbol: es su nmero de nodos.

Descendientes o hijos: A cada nodo que no es hoja se le


asocia uno o varios subrboles.

Nivel: Cada nodo tiene asociado un nmero de nivel que se


determina por la longitud del camino desde el raz al nodo
especco.
Altura o profundidad de un rbol: es el nivel ms profundo
ms uno.
LNMV
8 Algunos trminos de rbol

Hernano: Son los hijos de un mismo padre.

Hoja: Nodo que no tiene hijos, subrboles o ramificaciones

Nodo no Terminal: Es aquel que posee por lo menos una


ramificacin.

Camino: Es el conjunto de nodos que se tienen que visitar con el


propsito de llegar a un nodo especfico.

Longitud: Es el nmero de nodos que se deben recorrer para


pasar de un nodo a otro.

Ancestro: Un nodo es ancestro de otro, si existe un camino entre


el primero y el segundo.
LNMV
9 Algunos trminos de rbol
Grado de un nodo: Es el nmero de hijos.

Altura: De un rbol binario es el nivel de la hoja o de las hojas que


estn ms distantes de la raz.

rbol binario completo: Es aquel en el que todo nodo no terminal


tiene sus dos hijos.

rbol binario igual: Dos rboles binarios son iguales si los dos son
vacos o si cada una de las subramas son iguales en contenido,
relacin y parentesco.

rbol binario semejante: Son semejantes si tienen el mismo nmero


de nodos y los valores de los nodos del primer rbol son los mismos
que los valores de los nodos del segundo, sin importar su estructura o
parentesco.
LNMV
10 Algunos trminos de rbol

rbol binario isomorfo: Dos rboles binarios son isomorfos si tienen


la misma estructura aunque el contenido de cada uno de sus nodos sea
diferente.

Peso: El peso de un rbol en un nodo dado es el nmero de nodos en


el rbol sin contarse l mismo.

LNMV
11 Operaciones bsicas de las Estructuras de Datos

1. Insertar elementos nuevos

2. Eliminar elementos que existan en la estructura

3. Buscar elementos en la estructura.

LNMV
12

2. Recorrido en profundidad - Depth First Search

LNMV
13 A. Recorrido en profundidad - Depth First Search

El recorrido en profundidad busca caminos que parten desde


el nodo inicial hasta que ya no es posible avanzar mas, ah
vuelve atrs en busca de caminos alternativos no estudiados
anteriormente.

Puede compararse con el recorrido del pre orden del rbol.

A Continuacin, un ejemplo.

LNMV
14 A. Recorrido en profundidad - Depth First Search

1(2,3,4,5)
1,2,3(2,6,8)
7 1,2,3,6 (7)
2
3 6 1,2,3,6,7 (2)
1,2,3,6,7,8(6)
1
1,2,3,6,7,8,4(3,8)
4 1,2,3,6,7,8,4(3, 8)
5 8
9 1,2,3,6,7,8,4, 5
1,2,3,6,7,8,4, 5,9

LNMV
15 Formas de Recorrerlo en Cdigo

Se implementa en forma recursiva o


Puede realizarse con una pila
Se utiliza un arreglo val para almacenar el orden en que
fueron explorados los vrtices. Para ello se incrementa una
variable global id (inicializada a 0) cada vez que se visita un
nuevo vrtice y se almacena id en la entrada del arreglo val
correspondiente al vrtice que se est explorando.
La siguiente funcin realiza un mximo de V (el nmero total
de vrtices) llamadas a la funcin visitar, que implementamos
aqu en sus dos variantes: representacin por matriz de
adyacencia y por listas de adyacencia.

LNMV
int id=0;
int val[V];
16 void buscar() Algoritmo Recorrido en profundidad
{ int k;
for (k=1; k<=V; k++)
val[k]=0;

for (k=1; k<=V; k++)


if (val[k]==0)
visitar(k);
}
void visitar(int k) // matriz de adyacencia
{ int t;
val[k]=++id;
for (t=1; t<=V; t++)
if (a[k][t] && val[t]==0) visitar(t);
}
void visitar(int k) // listas de adyacencia
{ struct nodo *t;
val[k]=++id;
for (t=a[k]; t!=z; t=t->sig)
if (val[t->v]==0) visitar(t->v);
}
LNMV
17 Algoritmo Recorrido en profundidad

El resultado es que el arreglo val contendr en su i-sima entrada


el orden en el que el vrtice i-simo fue explorado. Es decir, si
tenemos un grafo con cuatro nodos y fueron explorados en el
orden 3-1-2-4, el array val quedar como sigue:

val[1]=2; // el primer nodo fue visto en segundo lugar


val[2]=3; // el segundo nodo fue visto en tercer lugar
val[3]=1; // etc. val[4]=4

LNMV
18

3. Bsqueda en amplitud - Breadth-First Search

LNMV
19 Recorrido en anchura - Breadth-First Search

El recorrido en anchura busca recorrer el grafo a partir de un


nodo dado, los primeros en ser recorridos sern los que
estn mas cerca al nodo inicial, despus a los que estn a 2
arcos de distancia y as sucesivamente hasta alcanzar todos
los nodos
Puede asemejarse con el recorrido de un rbol por niveles.

A continuacin, un ejemplo

LNMV
20 Recorrido en anchura - Breadth-First Search

A B C

D E

Anchura: A, B, D, C, E Por Izquierda


Anchura: A, D, B, E C por derecha.

LNMV
21 Recorrido en anchura - Breadth-First Search

A
Utilizando una cola:

C ABCDEMFGNH
B
Salida anchura: A B C D E M F
M GNH
D E

F G N

H
LNMV
22 Formas de Recorrer un grafo en anchura

Se implementa en forma recursiva o


Puede realizarse con una cola para llevar los vrtices
visitados
En esta implementacin, la funcin del arreglo val y la
variable id es la misma que en el mtodo anterior

LNMV
struct cola *cola;

23 void visitar(int k) // listas de


adyacencia
Algoritmo Recorrido en Anchura
{ struct nodo *t;
encolar(&cola,k);
while (!vacia(cola))
{
desencolar(&cola,&k);
val[k]=++id;
for (t=a[k]; t!=z; t=t->sig)
{
if (val[t->v]==0)
{
encolar(&cola,t->v);
val[t->v]=-1;
}
}
}
}

LNMV
24 Bsqueda no determinstica

QU ES UN ALGORITMO NO DETERMINISTA?

Los algoritmos No Deterministas son aquellos cuya entrada ofrece


muchos posibles resultados y no puede entenderse de antemano
cul ser el resultado al ejecutar el algoritmo No Determinista.

La bsqueda no determinstica consiste en buscar un termino medio


entre la bsqueda en profundidad y la bsqueda en amplitud.

LNMV
25 4. Bsqueda no determinstica

Los Algoritmos no determinsticos

Son un tipo especial de algoritmos que resuelven problemas


complejos y cuya respuesta no siempre se conoce o vara con el
tiempo. Estos algoritmos reciben una entrada y bajo diferentes
mtodos de tratamiento de informacin pueden tener salidas
diferentes cada vez, asegurando la mayora de los casos que las
salidas sean correctas o tiles para el resto del proceso o el
programa.

Estos algoritmos se apoyan en los rboles de Decisiones.

LNMV
26 Bsqueda no determinstica

1. COLA <-- camino que solo contiene la raiz;

2. WHILE COLA no vaca


AND objetivo no alcanzado

DO remover el primer camino de la COLA;


crear nuevos caminos (a todos los hijos);
rechazar los nuevos caminos con ciclos;
agregar los nuevos cam. en lug. al azar en COLA;

3. IF objetivo alcanzado
THEN exito;
ELSE falla;

LNMV
27

RECORRIDOS EN GRAFOS

LNMV
Recorrer un grafo consiste en visitar cada uno de los nodos a
travs de las aristas del mismo. Se trata de realizar recorridos de
manera eficiente. Para ello, se pondr una marca en un nodo en
el momento en que es visitado, de tal manera que, inicialmente,
no est marcado ningn nodo del grafo.

Existen dos tcnicas para recorrer un grafo:

a. Recorrido en profundidad
28 b. Recorrido en anchura

LNMV
RECORRIDO o BUSQUEDA EN PROFUNDIDAD

Fue desarrollado por John Hopcroft y Robert Tarjan quien es


el descubridor de numerosos e importantes algoritmos de
grafos, incluyendo el Algoritmo de Tarjan del mnimo nmero
de ancestros, junto con Daniel Sleator.

Tarjan recibi el Premio Turing de la ACM junto con John


Hopcroft en 1986: "Por logros fundamentales en el diseo y
29 anlisis de algoritmos y estructuras de datos." Tarjan fue
tambin elegido miembro de la ACM en 1994: "Por avances
originales en el diseo y anlisis de estructuras de datos y
algoritmos."

LNMV
RECORRIDO o BUSQUEDA EN PROFUNDIDAD

El recorrido o bsqueda en profundidad es un algoritmo que


permite recorrer todos los nodos de un grafo de manera
ordenada, pero no uniforme. Su funcionamiento consiste en
tratar de buscar los caminos que parten desde el nodo de salida
hasta que ya no es posible avanzar ms. Cuando ya no puede
avanzarse ms sobre el camino elegido, se devuelve en busca
de caminos alternativos que no estudiaron previamente.
30

LNMV
RECORRIDO o BUSQUEDA EN PROFUNDIDAD

El recorrido en profundidad resuelve directamente algunos


problemas elementales de grafos, tales como:

Determinar el nmero de componentes conexas: igual al


nmero de veces que se llama visitar en el procedimiento
recorrer.

31

Comprobar si el grafo tiene ciclos: un grafo tiene un ciclo si


trata de visitar un nodo ya visitado.
LNMV
RECORRIDO o BUSQUEDA EN PROFUNDIDAD

La eleccin de un nodo se podra interpretar como


una eleccin

La visita a los nodos adyacentes se podra


interpretar como la exploracin
32

LNMV
1. Se selecciona
PASOS cualquier nodo v
V como punto
de partida del
recorrido

5. El algoritmo
2. Se marca el
termina cuando
nodo para
estn marcados
indicar que ha
todos los nodos
sido visitado
de G

33
4. Cuando no haya 3. Se busca un
nodos adyacentes a nodo adyacente a v
v sin marcar, se que no haya sido
buscaun nodo no visitado, se marca
visitado y se contina y se contina a
a partir de l. partir de l.
LNMV
34 EJEMPLO: Como es un grafo no dirigido,
podemos utilizar el principio de
Pre-Orden para abarcar el mximo
1
de nodos
2 11

6
3
5 7 10

4 8 9
Pre-Orden

Se visita la raz; se recorre el subrbol Izquierdo; se recorre el


subrbol Derecho
Solucin: A-B-E-I-F-C-G-J-K-H-D
LNMV
35

BOSQUE DE EXTENSIN EN PROFUNDIDAD

El recorrido de un dgrafo basado en la bsqueda en


profundidad, define un bosque (conjunto de rboles ordenados)
que se denomina bosque de extensin en profundidad.
El recorrido en profundidad de un grafo conexo le asocia un
rbol de recubrimiento T

35

El nodo inicial es la raz del rbol T


Las aristas que no estn en T unen nodos con sus antecesores
LNMV
BOSQUE DE EXTENSIN EN PROFUNDIDAD
Se eliminan los ciclos

Si el grafo no es conexo, se produce un bosque de rboles T


Proporciona una manera de numerar los nodos del grafo

Hay que tener en cuenta que el concepto de adyacencia ya no


es simtrico

36

El algoritmo es el mismo que para grafos no dirigidos

Puede producir un bosque de rboles aunque el grafo sea


conexo LNMV
37 EJEMPLO
Grafo Dirigido, por lo tanto necesitamos buscar la ruta que incluya ms
nodos.
En este tipo de grafos se asume en algunos casos que el recorrido esta
sujeto a los supuestos de:
Peso y Orden alfabtico.

Recorrido por profundidad desde Vrtice


D= {D, C, R, H, T, A, B}
LNMV
COMPLEJIDAD

Si el grafo se representa mediante listas de adyacencias se


recorreran todas las listas una vez en el peor de los casos,
O(|V|+|A|).

Si el grafo se representa mediante la matriz de adyacencias,


deben buscarse los adyacentes para cada vrtice, O(|V|2).

38

LNMV
METODO

public void recorrido_profundidad(int matriz[][],LinkedList<String> n)


{
int tam=n.size();
int marc[]=new int [tam];
for(int i=0;i<tam;i++)
{
marc[i]=0;
}
//o no recorrido 1 recorrido
for(int i=0;i<tam;i++)
{
39 if(marc[i]==0)
{
recorrer_prof(matriz,n,marc,i);
}
}
}
LNMV
private void recorrer_prof(int[][] matriz, LinkedList<String> n, int[] marc,int i)
{
marc[i]=1;
JOptionPane.showMessageDialog(null, (String)n.get(i));
LinkedList<Integer>arista=new LinkedList<Integer>();

for(int j=0;j<n.size();j++) /*Verifica que conexiones tiene el vrtice i*/


{
if(matriz[i][j]==1)
{
arista.add(j);/*aade el vrtice con el que tiene conexin i*/
}
}
for(int j=0;j<arista.size();j++)
/*verifica que las conexiones no hayan sido visitadas*/
40 {
if(marc[arista.get(j)]==0)
{/*recorre recursivamente la conexin mandando el nuevo vertice */
recorrer_prof(matriz, n, marc, arista.get(j));
}
}
} LNMV
RECORRIDO o BSQUEDA EN AMPLITUD

Supone recorrer el grafo, a partir de un nodo dado, en


niveles, es decir, primero los que estn a una distancia de
un arco del nodo de salida, despus los que estn a dos
arcos de distancia, y as sucesivamente hasta alcanzar
todos los nodos a los que se puede llegar desde el nodo de
salida.

El recorrido genera un rbol


41 Si el grafo no es conexo el recorrido genera un bosque de
rboles (un rbol por componente conexa.
Se puede aplicar en grafos dirigidos

LNMV
42 EJEMPLO
1

A
2 4
3

B C D
5 6 7

E G H
8 9 10

I J K
11

Solucin F
A-B-C-D-E-G-H-I-J-K-F

LNMV
Bosque de extensin en anchura

El recorrido en anchura de un dgrafo, tambin establece una


clasificacin de los arcos del mismo en: arcos de rbol o
extensin, arcos de retroceso y arcos cruzados (no pueden
existir arcos de avance)

43

LNMV
44 EJEMPLO

1
Nivel 1

A B D
Nivel 2
D 3
2

H B C 5
4
Nivel 3
C

H R Nivel 4
T R 6 7
A T Nivel 5

Recorrido desde Vrtice por anchura desde vrtice


D ={D, B, C, H, R, A, T}
LNMV
COMPLEJIDAD

Si la solucin se encuentra en el nivel n, y la cantidad mxima


de hijos de un nodo es i, habr que expandir, en el peor de los
casos, la cantidad de nodos de un rbol de orden i y de altura
n:

45

Por lo tanto, tanto el tiempo de procesamiento como el


requerimiento de memoria tendrn un orden exponencial,
tanto si evita o no expansiones repetidas.
LNMV
METODO
public void recorrido_amplitud(int matriz[][],LinkedList<String> n)
{
int tam=n.size();
int marc[]=new int [tam];
for(int i=0;i<tam;i++)
{
marc[i]=0;
}
//o no recorrido 1 recorrido
for(int i=0;i<tam;i++)
{
if(marc[i]==0)
46 {
recorrer_ancho(matriz,n,marc,i);
}
}
}

LNMV
private void recorrer_ancho(int[][] matriz, LinkedList<String> n, int[] marc, int i)
{
marc[i]=1;
LinkedList<Integer>o=new LinkedList<Integer>();/*lista de aristas*/
LinkedList<Integer>cola=new LinkedList<Integer>();/*guardar aristas*/
cola.add(i);
while (!cola.isEmpty())
{
o.clear();
int vert=(int)cola.getFirst();
JOptionPane.showMessageDialog(null, (String)n.get(vert));
cola.removeFirst();
for(int j=0;j<n.size();j++)
{
if(matriz[vert][j]==1)/*verifica conexiones y las guarda en o*/
47 {
o.add(j);
}
}

LNMV
for(int j=0;j<o.size();j++)
{
if(marc[(int)o.get(j)]==0)
/*verifica si no se visito lo marca y lo guarda en la
cola*/
{
marc[(int)o.get(j)]=1;
cola.add((int)o.get(j));
}
}
}
48
}

LNMV
BIBLIOGRAFIA

http://www.slideshare.net/evansbv/recorrido-de-grafos
http://www.cs.us.es/cursos/cc-2007/varios/dfs.pdf
http://es.wikipedia.org/wiki/B%C3%BAsqueda_en_profundidad
http://www.dcc.uchile.cl/~cc30a/apuntes/Grafos/#2
http://books.google.com.co/books?id=2Fwqu0XE77gC&pg=PA379
&lpg=PA379&dq=estructuras+de+datos+recorridos+grafos&source=
bl&ots=6V346r-CUD&sig=5rFZ4B2sfTMCKeRbw-
s4IZodAFg&hl=es&ei=lCbSSsi2Op2qtgfTkJHCBw&sa=X&oi=book_
result&ct=result&resnum=1&ved=0CAgQ6AEwAA#v=onepage&q=e
structuras%20de%20datos%20recorridos%20grafos&f=false
49 http://www.aic.uniovi.es/edatos/apuntes.php?estado=tema73&estil
o=chicle
http://www.escet.urjc.es/~rmartine/EDAA-grafos-1.pdf
http://di002.edv.uniovi.es/~paule/material/GrafosIV.pdf

LNMV
http://www.algoritmia.net/articles.php?id=18
http://es.wikipedia.org/wiki/B%C3%BAsqueda_en_anchura
http://es.wikibooks.org/wiki/Estructuras_de_datos_din%C3%A1
micas/Algoritmos_de_b%C3%BAsqueda
http://www.dma.fi.upm.es/java/matematicadiscreta/busqueda/
http://docencia.udea.edu.co/regionalizacion/teoriaderedes/infor
maci%F3n/C3_Profundidad.pdf
http://www.cs.us.es/cursos/cc-2007/varios/bfs.pdf
http://80.38.92.221/uned/Prog3/recorridoprofundidad.pdf
http://www.slideshare.net/evansbv/recorridos-de-grafos/
http://www.algoritmia.net/articles.php?id=18
50

LNMV

You might also like