1. Actividad #7 Teoría de Arboles
Universidad Nacional de Costa Rica
Curso: Estructuras Discretas para Informática
Estudiantes: Joshua Castro Alvarado
Oscar Salas Miranda
Alexander Sánchez
Josué Núñez
Profesor: Enrique Vílchez Quesada
Año: 2013
2. Es un algoritmo para recorrer o buscar elementos en un
grafo (usado frecuentemente sobre árboles).
Se comienza en la raíz (eligiendo algún nodo como
elemento raíz en el caso de un grafo) y se exploran todos
los vecinos de este nodo a continuación para cada uno
de los vecinos se exploran sus respectivos vecinos
adyacentes, y así hasta que se recorra todo el árbol.
Recorrido a lo largo:
3. Por ende el recorrido a lo ancho en este árbol seria:
20-14-44-8-31-9-7-15-9-4
Ejemplo:
4. Para observar mejor el recorrido
se va realizar paso a paso.
20
Primer Paso
Segundo Paso
Se inicia del nodo raíz
11. << Combinatorica`
BuscarAncho[E_Graph, w_] :=
Module[{L = {}}, v = BreadthFirstTraversal[E, 1];
For[i = 1, i <= Length[v], h = 0;
L = Append[L, v[[i]]]; If[w == v[[i]], h = 1; Break[]]; i++];
If[h == 0, Print["El dato ", w, " no fue encontrado"],
Print["El dato " , w, " fue encontrado"]]
Print["El recorrido es: ", L]]
aux = RandomInteger[{4, 20}];
dato = Input["Digite el numero de busqueda"];
ShowGraph[G = CompleteBinaryTree[aux],
VertexNumberColor-> Red,
VertexNumber -> True, VertexPlotRange -> 0.1]
BuscarAncho[G, dato];
12. Explicación del método a lo ancho:
Explicación del método búsqueda a lo ancho:
Iniciamos utilizando Combinatorica, el cual es un paquete con el que cuenta Wolfram Mathematica
9.0 el cual levanta los distintos comandos que implementaremos en el siguiente código.
El método recibe un grafo “e” y un dato “w”, donde “w” es el dato que buscaremos en el
árbol...Utilizamos una lista L para guardar todo el recorrido a lo ancho del árbol.
En el método búsqueda a lo ancho, el comando BreadFirstTraversal realiza un recorrido a lo ancho
sobre un grafo G a partir de un vértice a.
Inicializando una lista L como vacía, empleamos un For para ir recorriendo toda la lista L...
Además, utilizamos el comando Append para ir guardando en la lista L el dato v[[i]] donde i es la
posición
Continuamos implementando un If , el cual sirve para determina que si el dato w es igual al dato
que se tiene en la lista en la posición “i”, le asigne un 1 al valor de h y realiza un quiebre en el
ciclo...
Si h llega a ser igual a 0, este imprimirá que el dato no fue encontrado, sino imprimirá el dato
como encontrado.
13. Explicación del método a lo ancho:
Continuamos formando el recorrido que se tomó para encontrar el
dato:
Inicializamos una variable “aux” con una cantidad de números
aleatorio del 4 al 20 utilizando el comando RandomInteger,
después pediremos al usuario el dato que se va a explorar y lo
guardaremos en un variable dato.
Utilizamos el comando ShowGraph para generar el árbol y el
comando CompleteBinaryTree el cual construye el árbol binario con
“n” vértices…
Al final se imprimirá el recorrido que se realizó para encontrar el
dato.
15. El recorrido a lo largo o en profundidad toma
como punto de partida un nodo del grafo y
continúa con el nodo sucesor por lo que el
desplazamiento se hace hacia delante mientras
sea posible y se trata de encontrar el nodo más
profundo esto se hace aplicando el recorrido a
profundidad en forma recursiva.
25. << Combinatorica`
BuscarLargo[E_Graph, w_] :=
Module[{L = {}}, v = DepthFirstTraversal[E, 1];
For[i = 1, i <= Length[v],
h = 0;
L = Append[L, v[[i]]]; If[w == v[[i]], h = 1; Break[]]; i++];
Print["Algoritmo de búsqueda a lo largo:"]
If[h == 0, Print["El dato ", w, " no fue encontrado"],
Print["El dato " , w, " fue encontrado"]]
Print["El recorrido es: ", L]]
aux = RandomInteger[{4, 20}];
dato = Input["Digite el numero de busqueda"];
ShowGraph[G = CompleteBinaryTree[aux], VertexNumberColor ->
Red,
VertexNumber -> True, VertexPlotRange -> 0.1]
BuscarLargo[G, dato];
26. Explicación del método búsqueda a lo largo:
Iniciamos utilizando Combinatorica, el cual es un paquete con el que cuenta Wolfram
Mathematica 9.0 el cual levanta los distintos comandos que implementaremos en el
siguiente código.
El método recibe un grafo “e” y un dato “w”, donde “w” es el dato que buscaremos en el
árbol...Utilizamos una lista L para guardar todo el recorrido a lo largo del árbol.
En el método búsqueda a lo largo, el comando DephtFirstTraversal realiza un recorrido a lo
largo sobre un grafo G a partir de un vértice a.
Inicializando una lista L como vacía, empleamos un For para ir recorriendo toda la lista L...
Además, utilizamos el comando Append para ir guardando en la lista L el dato v[[i]] donde i
es la posición
Continuamos implementando un If , el cual sirve para determina que si el dato w es igual al
dato que se tiene en la lista en la posición “i”, le asigne un 1 al valor de h y realiza un
quiebre en el ciclo...
Si h llega a ser igual a 0, este imprimirá que el dato no fue encontrado, sino imprimirá el
dato como encontrado.
Explicación del método a lo largo:
27. Continuamos formando el recorrido que se tomó para encontrar el
dato:
Inicializamos una variable “aux” con una cantidad de números
aleatorio del 4 al 20 utilizando el comando
RandomInteger, después pediremos al usuario el dato que se va a
explorar y lo guardaremos en un variable dato.
Utilizamos el comando ShowGraph para generar el árbol y el
comando CompleteBinaryTree el cual construye el árbol binario con
“n” vértices…
Al final se imprimirá el recorrido que se realizó para encontrar el
dato.
Explicación del método a lo largo:
28. Conclusión
De esta manera podemos demostrar como los algoritmos búsqueda
primero a lo ancho y busca primero a lo largo sirven como
algoritmos de búsqueda.