arbol

17
Universidad Nacional de Costa Rica Curso: EIF-203 Estructuras Discretas para Informática Sub Grupo :8 Profesor Enrique Vílchez Quesada

Upload: evans-campos

Post on 10-Jul-2015

51 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Arbol

Universidad Nacional de Costa Rica

Curso: EIF-203 Estructuras Discretas para Informática

Sub Grupo :8

Profesor Enrique Vílchez Quesada

Page 2: Arbol

un árbol es una estructura de datos ampliamente usada que imita la forma de un árbol (un conjunto de nodos conectados). Un nodo es la unidad sobre la que se construye el árbol y puede tener cero o más nodos hijos conectados a él. Se dice que un nodo es padre de un nodo si existe un enlace desde hasta (en ese caso, también decimos que es hijo de ). Sólo puede haber un único nodo sin padres, que llamaremos raíz. Un nodo que no tiene hijos se conoce como hoja. Los demás nodos (tienen padre y uno o varios hijos) se les conoce como rama.

Page 3: Arbol

hay muchas maneras de generar árboles k. El sistema es:

Conforme se desciende en el árbol, se emplean ciclos a través de los ejes para seleccionar los planos.

En cada paso, el punto seleccionado para crear el plano de corte será la mediada de los puntos puestos en el árbol k, lo que respeta sus coordenadas en el eje que está siendo usado.

Este método lleva a un árbol k balanceado, donde cada nodo hoja está a la misma distancia de la raíz. De todas formas, los árboles balanceados no son necesariamente óptimos para todas las aplicaciones.

Page 4: Arbol

Un Recorrido en un k- arbol son formas de desplazamiento sobre cada uno de sus vertices,un recorrido en un arbol,pasa una única vez por los nodos que lo constituyen

Page 5: Arbol

Un árbol T es un árbol generador de un grafo G si T es un subgrafo de G que contiene todos los vértices de G. A esta característica general es posible agregar ciertos teoremas de modo de detallar aún más el alcance de la definición. Es así como el Grafo que contiene a T debe ser conexo, pues de lo contrario no existiría un subgrafo que contuviera todos sus vértices. En general un grafo G tendrá varios árboles generadores ,como el del ejemplo 1 el cual tiene a lo menos dos arboles generadores T1 yT2.

Page 6: Arbol

Búsqueda en anchura (en inglés BFS - Breadth First Search) es un algoritmo para recorrer o buscar elementos en un grafo (usado frecuentemente sobre árboles). Intuitivamente, 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.

Formalmente, LPA es un algoritmo de búsqueda sin información, que expande y examina todos los nodos de un árbol sistemáticamente para buscar una solución. El algoritmo no usa ninguna estrategia heurística.

Si las aristas tienen pesos negativos aplicaremos el algoritmo de Bellman-Ford en alguna de sus dos versiones.

Page 7: Arbol

Dado un vértice fuente s, Breadth-first search sistemáticamente explora los vértices de G para “descubrir” todos los vértices alcanzables desde s.

Calcula la distancia (menor número de vértices) desde s a todos los vértices alcanzables.

Después produce un árbol BF con raíz en s y que contiene a todos los vértices alcanzables.

El camino desde s a cada vértice en este recorrido contiene el mínimo número de vértices. Es el camino más corto medido en número de vértices.

Su nombre se debe a que expande uniformemente la frontera entre lo descubierto y lo no descubierto. Llega a los nodos de distancia k, sólo tras haber llegado a todos los nodos a distancia k-1.

Page 8: Arbol

Una Búsqueda en profundidad (en inglés DFS o Depth First Search) es un algoritmo que permite recorrer todos los nodos de un grafo o árbol (teoría de grafos) de manera ordenada, pero no uniforme. Su funcionamiento consiste en ir expandiendo todos y cada uno de los nodos que va localizando, de forma recurrente, en un camino concreto. Cuando ya no quedan más nodos que visitar en dicho camino, regresa, de modo que repite el mismo proceso con cada uno de los hermanos del nodo ya procesado.

Page 9: Arbol

Trata de un algoritmo donde No conocen el dominio de problema solo saben una acción dada.Como podremos ver acontuniacion con la solucion de como realizar el algoritmo de busqueda a lo ancho y a lo largo en un k-arbol

Page 10: Arbol

La siguiente implementación fue realizada para Wólfram mathematica

Page 11: Arbol

<<Combinatorica`

h=0;

k=Input["Digite el orden del K-arbol:"];

n=Input["Digite la cantidad de vertices del K-arbol:"];

w=Input["Digite el dato de busqueda:"];

ShowGraph[G=CompleteKaryTree[n,k],VertexNumberTrue,PlotRange 0.1]

v=DepthFirstTraversal[G,1,Edge];

For[i=1,i£ Length[v],If[wŠv[[i]],h=1;Break[]];i++]

If[h=0,Print["Dato no encontrado"],

Print["Dato encontrado"]]

AnimateGraph[G,v,VertexColorRed,EdgeColor®Blue,VertexNumber True, PlotRange 0.1]

Page 12: Arbol

Donde para empezar se pide un orden

Cantidad de vértices del árbol k

Y el dato de búsqueda donde los datos se leen por teclado

Para construir un k- árbol t con n nodos y determina si una dato w esta en t mediante una comparación de vértices, hallados por el algoritmo de recorrido a profundidad (BPL)

Page 13: Arbol

Show graph: funciona para construir un grafo

CompleteKaryTree: forma un árbol binario completo con n niveles

DepthFirstTraversal: realiza un recorrido de buscar primero a lo largo

Animate graph: funciona para darle animación al grafico (opcional )

Page 14: Arbol

<<Combinatorica`

h=0;

k=Input["Digite el orden del K-arbol:"];

n=Input["Digite la cantidad de vertices del K-arbol:"];

w=Input["Digite el dato de busqueda:"];

ShowGraph[G=CompleteKaryTree[n,k],VertexNumberTrue,PlotRange 0.1]

v=BreadthFirstTraversal [G,1,Edge];

For[i=1,i£ Length[v],If[wŠv[[i]],h=1;Break[]];i++]

If[h=0,Print["Dato no encontrado"],

Print["Dato encontrado"]]

AnimateGraph[G,v,VertexColorRed,EdgeColor®Blue,VertexNumber True, PlotRange 0.1]

Page 15: Arbol

En al caso de busqueda a lo ancho es exactamente igual al recorrrido de profundidad el unico cambio es la utilizacion del comando

Breathfristtraversal: que realiza en recorrido primero a lo ancho

Page 16: Arbol

Si hay una solución la encuentra. Es mas si hay varias encuentra la optima.

No se “pierde”, explorando caminos infructuosos que consumen mucho tiempo sin llegar a una solución

Requiere mucho menos memoria

Puede encontrar el árbol sobre todo si hay varios caminos a la solución.

Page 17: Arbol

Un claro ejemplo de arboles son los conocidos “arboles genealógicos”

Otro ejemplo son los tipos de movimientos en el ajedrez