Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Objetivo: .............................................................................................................................................. 2
Introducción: ....................................................................................................................................... 2
Desarrollo: ........................................................................................................................................... 3
Actividad 1. ...................................................................................................................................... 3
Actividad 2 (Actividad extra). ........................................................................................................ 16
Conclusión: ........................................................................................................................................ 25
Referencias Bibliográficas: ................................................................................................................ 25
Objetivo:
El estudiante conocerá e identificará las características de los árboles B.
Introducción:
Los B-árboles surgieron en 1972 creados por R.Bayer y E.McCreight.El problema
original comienza con la necesidad de mantener índices en almacenamiento
externo para acceso a bases de datos, es decir, con el grave problema de la lentitud
de estos dispositivos se pretende aprovechar la gran capacidad de almacenamiento
para mantener una cantidad de información muy alta organizada de forma que el
acceso a una clave sea lo más rápido posible.
de forma que los elementos que cuelgan del primer hijo tienen una clave con valor
menor que K1,los que cuelgan del segundo tienen una clave con valor mayor que
K1 y menor que K2,etc...Obviamente, los que cuelgan del último hijo tienen una
clave con valor mayor que la última clave(hay que tener en cuenta que el nodo
puede tener menos de m hijos y por consiguiente menos de m-1 claves).
Desarrollo:
Actividad 1.
Código:
class Nodo:
def __init__(self, t):
self.hijos = list()
self.llaves = list()
self.hoja = 1
self.n = 0
for k in range(2*t):
self.llaves.append([None])
for k in range(2*t+1):
self.hijos.append([None])
class ArbolB:
def __init__(self, gradoMinimo):
self.t = gradoMinimo
self.raiz = None
def bTreeCreate(self):
if(self.raiz == None):
self.raiz = Nodo(self.t)
return self.raiz
obj = Controladora()
obj.main()
En las siguientes imágenes podemos ver el código en la consola.
En las siguientes tres capturas de pantalla podemos observar la ejecución de
nuestro código. Ahora se muestran los métodos que hay que ir agregando a la
clase Árbol B de acuerdo con el diagrama de clases.
Actividad 2 (Actividad extra).
Árbol puma Bus
Código:
class Nodo:
self.hijos = list()
self.llaves = list()
self.hoja = 1
self.n = 0
for k in range(2*t):
self.llaves.append([None])
for k in range(2*t+1):
self.hijos.append([None])
class ArbolB:
self.t = gradoMinimo
self.raiz = None
def bTreeCreate(self):
if(self.raiz == None):
self.raiz = Nodo(self.t)
return self.raiz
z = Nodo(self.t)
y = x.hijos[i]
z.hoja = y.hoja
z.n = self.t-1
z.llaves[j] = y.llaves[j+self.t]
y.llaves[j+self.t] = None
if y.hoja ==0:
z.hijos[j] = y.hijos[j+self.t]
y.hijos[j+self.t] = None
y.n = self.t-1
x.hijos[j+1]=x.hijos[j]
x.hijos[i+1]=z
x.llaves[j+1] = x.llaves[j]
x.llaves[i] = y.llaves[self.t]
y.llaves[self.t] = None
x.n = x.n+1
i = x.n
if x.hoja ==1:
x.llaves[i+1] = x.llaves[i]
i = i-1
x.llaves[i+1]=k
x.n = x.n+1
else:
i=i-1
i=i+1
if x.hijos[i].n ==2*self.t-1:
self.bTreeSplitShild(x, i)
if k>x.llaves[i]:
i=i+1
self.bTreeInsertNonFull(x.hijos[i], k)
r=self.raiz
if r.n == 2*self.t-1:
s = Nodo(self.t)
self.raiz = s
s.hoja = 0
s.n = 0
s.hijos[1] = r
self.bTreeSplitShild(s, 1)
self.bTreeInsertNonFull(s, k)
else:
self.bTreeInsertNonFull(r, k)
if (nodo.llaves[i] != None):
print(nodo.llaves[i])
i=1
i = i+1
if (i <= x.n) and (k >= x.llaves[i]):
return i
else:
if x.hoja == True:
return None
else:
return self.bTreeSearch(x.hijos[i], k)
class Controladora:
def main(self):
BT = ArbolB(2)
actual = BT.bTreeCreate()
for i in range(1,70):
BT.bTreeInsert(actual, i)
print(BT.raiz.llaves)
print(BT.raiz.hijos[1].llaves)
print(BT.raiz.hijos[1].hijos[1].llaves)
print(BT.raiz.hijos[1].hijos[1].hijos[1].llaves)
print(BT.raiz.hijos[1].hijos[1].hijos[1].hijos[1].llaves)
print(BT.raiz.hijos[1].hijos[1].hijos[1].hijos[1].hijos[1].llaves)
print(BT.raiz.hijos[1].hijos[1].hijos[1].hijos[1].hijos[2].llaves)
print(BT.raiz.hijos[1].hijos[1].hijos[1].hijos[2].llaves)
print(BT.raiz.hijos[1].hijos[1].hijos[1].hijos[2].hijos[1].llaves)
print(BT.raiz.hijos[1].hijos[1].hijos[1].hijos[2].hijos[2].llaves)
print(BT.raiz.hijos[1].hijos[1].hijos[2].llaves)
print(BT.raiz.hijos[1].hijos[1].hijos[2].hijos[1].llaves)
print(BT.raiz.hijos[1].hijos[1].hijos[2].hijos[1].hijos[1].llaves)
print(BT.raiz.hijos[1].hijos[1].hijos[2].hijos[1].hijos[2].llaves)
print(BT.raiz.hijos[1].hijos[1].hijos[2].hijos[2].llaves)
print(BT.raiz.hijos[1].hijos[1].hijos[2].hijos[2].hijos[1].llaves)
print(BT.raiz.hijos[1].hijos[1].hijos[2].hijos[2].hijos[2].llaves)
print(BT.raiz.hijos[1].hijos[2].llaves)
print(BT.raiz.hijos[1].hijos[2].hijos[1].llaves)
print(BT.raiz.hijos[1].hijos[2].hijos[1].hijos[1].llaves)
print(BT.raiz.hijos[1].hijos[2].hijos[1].hijos[1].hijos[1].llaves)
print(BT.raiz.hijos[1].hijos[2].hijos[1].hijos[1].hijos[2].llaves)
print(BT.raiz.hijos[1].hijos[2].hijos[1].hijos[2].llaves)
print(BT.raiz.hijos[1].hijos[2].hijos[1].hijos[2].hijos[1].llaves)
print(BT.raiz.hijos[1].hijos[2].hijos[1].hijos[2].hijos[2].llaves)
print(BT.raiz.hijos[1].hijos[2].hijos[2].llaves)
print(BT.raiz.hijos[1].hijos[2].hijos[2].hijos[1].llaves)
print(BT.raiz.hijos[1].hijos[2].hijos[2].hijos[1].hijos[1].llaves)
print(BT.raiz.hijos[1].hijos[2].hijos[2].hijos[1].hijos[2].llaves)
print(BT.raiz.hijos[1].hijos[2].hijos[2].hijos[2].llaves)
print(BT.raiz.hijos[1].hijos[2].hijos[2].hijos[2].hijos[1].llaves)
print(BT.raiz.hijos[1].hijos[2].hijos[2].hijos[2].hijos[2].llaves)
print(BT.raiz.hijos[2].llaves)
print(BT.raiz.hijos[2].hijos[1].llaves)
print(BT.raiz.hijos[2].hijos[1].hijos[1].llaves)
print(BT.raiz.hijos[2].hijos[1].hijos[1].hijos[1].llaves)
print(BT.raiz.hijos[2].hijos[1].hijos[1].hijos[1].hijos[1].llaves)
print(BT.raiz.hijos[2].hijos[1].hijos[1].hijos[1].hijos[2].llaves)
print(BT.raiz.hijos[2].hijos[1].hijos[1].hijos[2].llaves)
print(BT.raiz.hijos[2].hijos[1].hijos[1].hijos[2].hijos[1].llaves)
print(BT.raiz.hijos[2].hijos[1].hijos[1].hijos[2].hijos[2].llaves)
print(BT.raiz.hijos[2].hijos[1].hijos[2].llaves)
print(BT.raiz.hijos[2].hijos[1].hijos[2].hijos[1].llaves)
print(BT.raiz.hijos[2].hijos[1].hijos[2].hijos[1].hijos[1].llaves)
print(BT.raiz.hijos[2].hijos[1].hijos[2].hijos[1].hijos[2].llaves)
print(BT.raiz.hijos[2].hijos[1].hijos[2].hijos[2].llaves)
print(BT.raiz.hijos[2].hijos[1].hijos[2].hijos[2].hijos[1].llaves)
print(BT.raiz.hijos[2].hijos[1].hijos[2].hijos[2].hijos[2].llaves)
print(BT.raiz.hijos[2].hijos[2].llaves)
print(BT.raiz.hijos[2].hijos[2].hijos[1].llaves)
print(BT.raiz.hijos[2].hijos[2].hijos[1].hijos[1].llaves)
print(BT.raiz.hijos[2].hijos[2].hijos[1].hijos[1].hijos[1].llaves)
print(BT.raiz.hijos[2].hijos[2].hijos[1].hijos[1].hijos[2].llaves)
print(BT.raiz.hijos[2].hijos[2].hijos[1].hijos[2].llaves)
print(BT.raiz.hijos[2].hijos[2].hijos[1].hijos[2].hijos[1].llaves)
print(BT.raiz.hijos[2].hijos[2].hijos[1].hijos[2].hijos[2].llaves)
print(BT.raiz.hijos[2].hijos[2].hijos[2].llaves)
print(BT.raiz.hijos[2].hijos[2].hijos[2].hijos[1].llaves)
print(BT.raiz.hijos[2].hijos[2].hijos[2].hijos[1].hijos[1].llaves)
print(BT.raiz.hijos[2].hijos[2].hijos[2].hijos[1].hijos[2].llaves)
print(BT.raiz.hijos[2].hijos[2].hijos[2].hijos[2].llaves)
print(BT.raiz.hijos[2].hijos[2].hijos[2].hijos[2].hijos[1].llaves)
print(BT.raiz.hijos[2].hijos[2].hijos[2].hijos[2].hijos[2].llaves)
print(BT.raiz.hijos[2].hijos[2].hijos[2].hijos[3].llaves)
print(BT.raiz.hijos[2].hijos[2].hijos[2].hijos[3].hijos[1].llaves)
print(BT.raiz.hijos[2].hijos[2].hijos[2].hijos[3].hijos[2].llaves)
obj = Controladora()
obj.main()
En estas capturas de pantalla podemos ver nuestro codigo ya antes escrito, pero
ahora en Sublime Tex.
En las siguientes capturas de pantalla podemos ver como se implementa la
ejecución del código anterior con árboles, pero ahora con el Puma bus de ciudad
universitaria.
Conclusión:
La práctica me pareció un tanto interesante. Aunque también algo difícil de entender
el concepto de árboles ya que se utilizan cuando la cantidad de datos que se está
trabajando es demasiado grande que no cabe toda en memoria principal. Así que,
son árboles de búsqueda balanceados diseñados para trabajar sobre discos
magnéticos u otros accesos o dispositivos de almacenamiento secundario.
Finalmente podemos decir que el objetivo se cumplió.
Referencias Bibliográficas:
Cuadernillo de prácticas del laboratorio de practicas de Estructura de Datos y Algoritmos II.