Vous êtes sur la page 1sur 4

Scientia et Technica Ao XVI, No 49, Diciembre de 2011. Universidad Tecnolgica de Pereira.

ISSN 0122-1701

Bsqueda en amplitud en rboles


Search breadth in trees.
Autor 1: Karen Lopez Autor 2: Juan Suarez, Autor 3: Sebastin David Cano Uribe
Ingeniera de Sistemas y Computacin, Universidad Tecnolgica de Pereira, Pereira, Colombia
Correo-e: ejemplo@org.es

Resumen Bsqueda en anchura es un algoritmo para recorrer


o buscar elementos en un grafo (usado frecuentemente sobre
rboles). Intuitivamente, se comienza en la raz (eligiendo algn
nodo como elemento raz en el caso de un grafo) y se exploran
todos los vecinos de este nodo. A continuacin para cada uno de
los vecinos se exploran sus respectivos vecinos adyacentes, y as
hasta que se recorra todo el rbol. El reto al cual se le plantea
solucin en este documento es llevar este algoritmo a una
implementacin en la web.
Palabras clave php, html, css, bfs, grafos, rboles.
Abstract Breadth-first search algorithm is to traverse or search
for items in a graph (used frequently on trees). Intuitively, it
begins at the root (selecting some node as the root element in the
case of a graph) and all the neighbors of this node are explored.
Then for each of their respective neighbors adjacent neighbors
are explored, and so on until the whole tree run through. The
challenge that is posed solution in this document is to bring this
algorithm to an implementation on the web.
Key Word php, html, css, BFS, graphs, trees.

I.

INTRODUCCIN

II. METODOLOGA
Para este primer proyecto se implement el algoritmo de un
bfs (Breadth First Search-bsqueda de anchura) para buscar
datos en un grafo. Tambin se subi a la red dicho proyecto a
travs del servidor web 000webhost:
Algoritmo de bfs:
1. cola C; vertices v, w; ord = 0;
2. Mientras queden vertices sin visitar
3. v = elegir un vertice no visitado;
4. marcar v;
5. C.vaciar();
6. C.encolar(v);
7. Mientras C no sea vaca
8.
w = C.primero();
9.
ord++;
10.
orden(w)=ord;
11.
C.desencolar();
12.
Para cada vecino z de w
13.
Si z no esta visitado
14.
marcar z;
15.
C.encolar(z);

Este proyecto parte de una clase de Inteligencia Artificial, la


cual propone el reto de llevar el algoritmo de bfs a la web,
para que diferentes personas en la web pudiesen ver el
funcionamiento de un bfs.

El algoritmo bfs fue implementado en php.

Se parte de la hiptesis de que las bsquedas, sea cual sea el


mtodo, debe tener un fin encontrar un dato, informacin, etc.
En nuestro caso un tesoro, hay que tener en cuenta que se
debe saber lo que se est buscando.

<?php

En este documento se expone una solucin a la


implementacin de este algoritmo en la web usando php, se
crear un grafo con un punto de inicio y a partir de all
buscaremos un nodo que contiene un tesoro, el cual estamos
buscando.

Fecha de Recepcin: (Letra Times New Roman de 8 puntos)


Fecha de Aceptacin: Dejar en blanco

Cdigo php de un bfs:

//datos recibidos de formulario


$valor = $_REQUEST[Valor];
$clave = $_REQUEST[Clave];
$buscado = $_REQUEST[Buscar];
//Lista de Nodos con su llave y valor
$nodos = array( 1 => a,
2 => b,
3 => c,
45 => d,
5 => e,
6 => f,
7 => g);

Scientia et Technica Ao XVI, No 49, Diciembre de 2011. Universidad Tecnolgica de Pereira.

$nodosSinVisitar = array (1,2,3,45,5,6,7); //lista de nodos por


visitar
//Lista de Aristas del grafo
$aristas = array(array(1,2), array(1,3), array(1,45), array(2,5),
array(45,6), array(45,7));
//AGREGAR NODOS E IMPRIMIR TODOS LOS NODOS
$nodos[$clave] = $valor;
Array_push($nodosSinVisitar, $clave);
echo </br> nodos actuales ;
print_r($nodos);
//IMPLEMENTACION DE BFS
$cola = array();
$pasos= 0;
$v = 0;
$w = 0;
$max = 0;
$listaDeAdyacencia=array();
$count = count($aristas);
for ($i = 0; $i < $count; $i++) {
$V= $aristas[$i][0];
$A=$aristas[$i][1];
$listaDeAdyacencia[$V][]=$A;
}
while( sizeof($nodosSinVisitar) !== 0){ //mientras queden
vertices sin visitar
$v = Array_shift($nodosSinVisitar); //extrae el del primer
nodo de la lista de nodos no visitados (esto es un identificador
o llave)
//para dibujar aqu se debera marcar o pintar el nodo
Array_push($cola,$v); //agregar vertice (nodo actual) a la cola
while(sizeof($cola) !== 0){ //mientras la cola no este vacia
$pasos++;
$w = Array_shift($cola); //extraer elemento de la cola

$count = count($aux); //numero de hijos (vecinos) del nodo


actual
for($i = 0; $i < $count; $i++){ //para todos los hijos (vecinos)
del nodo actual
$z = $listaDeAdyacencia[$w][$i]; //vecino del nodo $w (nodo
actual)
echo </br> nodo hijo .$z.</br>;
if (in_array($z,$nodosSinVisitar)){ //si $z no ha cido visitado
echo </br> AGREGO A LA COLA .$z.</br>;
$count2 = count($nodosSinVisitar);
for($j = 0; $j < $count2-1; $j++){
if($z == $nodosSinVisitar[$j])
{
array_splice($nodosSinVisitar,$j,1); //marcar como visitado,
se elimina de lista de nodos sin visitar
}
}
Array_push($cola,$z); //se agrega nodo vecino a la cola
}
}
}
}
}
//NUMERO DE PASOS QUE DIO PARA ENCONTRAR EL
DATO
echo </br> numero de pasos .$pasos.</br>;
?>
III. RESULTADOS
Se obtuvo el software funcional en la web que muestra el
funcionamiento de un bfs funcionando correctamente, a
continuacin el link:
http://iaproyectos.comli.com/tema.HTML

echo </br> nodo visitado .$w.</br>;


if($nodos[$w] === $buscado){ //si encontro el nodo buscado
elimina los elementos de la lista nodos sin visitar.
foreach ($nodosSinVisitar as $i => $value) {
unset($nodosSinVisitar[$i]);
}
echo </br> DATO ENCONTRADO </br>;
break;
}
if(array_key_exists($w,$listaDeAdyacencia)){
$aux = $listaDeAdyacencia[$w];

La pgina web consta de una breve descripcin de lo que es


un bfs y tambin contiene un formulario para agregar un nodo
independiente que hace parte del rbol que se va a recorrer y
realizar una bsqueda.
El formulario consta de tres datos a recibir, el primero es el
cdigo o clave que identificar al nuevo nodo, el segundo dato
es el valor o informacin que se guardar en el nodo con la
clave asignada en el espacio anterior, por ltimo el formulario
recibe un dato a buscar en el rbol.
Una vez se da clic en buscar la pgina se actualiza
mostrando un array de todos los nodos con sus claves y valor,
esto seguido de la descripcin de cmo se recorri el rbol
hasta encontrar o no encontrar el dato que en el formulario se
indic buscar.

Scientia et Technica Ao XVI, No 49, Diciembre de 2011. Universidad Tecnolgica de Pereira.

IV. CONCLUSIONES
Este algoritmo tiene mltiples aplicaciones que van desde la
inteligencia artificial, la robtica y transporte urbano. Adems
debemos preocuparnos ms por la memoria que por el tiempo
de ejecucin, tambin los requisitos de tiempo son muy
importantes.
La bsqueda en anchura selecciona para su expansin el nodo
no expandido ms superficial en el rbol de bsquedas.

____________________________
1. Las notas de pie de pgina debern estar en la pgina donde se citan. Letra Times New Roman de 8 puntos

Scientia et Technica Ao XVI, No 49, Diciembre de 2011. Universidad Tecnolgica de Pereira.

Vous aimerez peut-être aussi