SlideShare una empresa de Scribd logo
1 de 17
 Universidad Nacional de Costa Rica
 Curso: EIF-203 Estructuras Discretas
para Informática
 Sub Grupo :8
 Profesor Enrique Vílchez Quesada
 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.
 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.
 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
 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.
 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.
 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.
 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.
 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
 La siguiente implementación fue realizada para
Wólfram mathematica
 <<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],VertexNumber
True,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,VertexColor
Red,EdgeColor®Blue,VertexNumber True, PlotRange 0.1]
 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)
 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 )
 <<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],VertexNumber
True,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,VertexColor
Red,EdgeColor®Blue,VertexNumber True, PlotRange 0.1]
 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
 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.
 Un claro ejemplo de arboles son los conocidos “arboles
genealógicos”
 Otro ejemplo son los tipos de movimientos en el
ajedrez

Más contenido relacionado

Similar a Arbol (20)

Arboles
ArbolesArboles
Arboles
 
Aplicaciones de los árboles y grafos
Aplicaciones de los árboles y grafosAplicaciones de los árboles y grafos
Aplicaciones de los árboles y grafos
 
Unidad IV
Unidad IVUnidad IV
Unidad IV
 
Ascii
AsciiAscii
Ascii
 
Para leer estructuras
Para leer estructurasPara leer estructuras
Para leer estructuras
 
Para leer estructuras
Para leer estructurasPara leer estructuras
Para leer estructuras
 
Exposicion de estructuras discretas
Exposicion de estructuras discretasExposicion de estructuras discretas
Exposicion de estructuras discretas
 
Bfs en grafos
Bfs en grafosBfs en grafos
Bfs en grafos
 
Flujo en redes
Flujo en redesFlujo en redes
Flujo en redes
 
Grafos
GrafosGrafos
Grafos
 
Busquedas en arboles
Busquedas en arbolesBusquedas en arboles
Busquedas en arboles
 
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datos
 
Unidad 6
Unidad 6Unidad 6
Unidad 6
 
El problema de las jarras de agua tema 6 prolog
El problema de las jarras de agua  tema 6 prologEl problema de las jarras de agua  tema 6 prolog
El problema de las jarras de agua tema 6 prolog
 
Matematicas discretas
Matematicas discretasMatematicas discretas
Matematicas discretas
 
Bfs en grafos
Bfs en grafosBfs en grafos
Bfs en grafos
 
Bfs en grafos
Bfs en grafosBfs en grafos
Bfs en grafos
 
Bfs en grafos
Bfs en grafosBfs en grafos
Bfs en grafos
 
Bfs en grafos
Bfs en grafosBfs en grafos
Bfs en grafos
 
Bfs en grafos
Bfs en grafosBfs en grafos
Bfs en grafos
 

Arbol

  • 1.  Universidad Nacional de Costa Rica  Curso: EIF-203 Estructuras Discretas para Informática  Sub Grupo :8  Profesor Enrique Vílchez Quesada
  • 2.  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.
  • 3.  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.
  • 4.  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
  • 5.  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.
  • 6.  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.
  • 7.  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.
  • 8.  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.
  • 9.  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
  • 10.  La siguiente implementación fue realizada para Wólfram mathematica
  • 11.  <<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],VertexNumber True,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,VertexColor Red,EdgeColor®Blue,VertexNumber True, PlotRange 0.1]
  • 12.  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)
  • 13.  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 )
  • 14.  <<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],VertexNumber True,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,VertexColor Red,EdgeColor®Blue,VertexNumber True, PlotRange 0.1]
  • 15.  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
  • 16.  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.
  • 17.  Un claro ejemplo de arboles son los conocidos “arboles genealógicos”  Otro ejemplo son los tipos de movimientos en el ajedrez