Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Docente:
Tema Principal:
Temas Particulares:
1.)
UTN Crdoba
ndice para m, entonces t contendr un nodo por cada registro de m. Si cada registro contiene
un atributo k mediante el cual se quiere hacer la bsqueda, entonces cada nodo de t, contendr
el valor del atributo k y mediante ese valor se ordenar el rbol. Adems, cada nodo en t
tendr la direccin en m del registro con el valor respectivo del atributo k (el nmero relativo
del registro que contiene a ese valor en k):
2
5
ndice1:
ordenado
por legajo
archivo
2
0
3
0
legajo
30
25
20
Ana
Juan
Pedro
nombre
2000
1200
1500
sueldo
ndice2:
Juan
ordenado
por nombre
Ana
Pedro
Como se ve, se puede tener varios ndices a la vez sobre el mismo archivo, organizando
a cada ndice por un atributo de bsqueda diferente, sin tocar la estructura del archivo
original, y sin que esos ndices dependan el uno del otro...
Si bien en la grfica mostramos a cada ndice como un rbol binario, est claro que en
la prctica un ndice para un archivo debe cumplir ciertos requisitos esenciales, pues de otro
modo el proceso de indexacin fallara o no tendra un tiempo de bsqueda aceptable. Por lo
pronto, el rbol de bsqueda no debera ser binario: si el archivo a indexar tiene una gran
cantidad de registros (lo cual en la prctica es lo comn...) entonces el rbol tendra
demasiados niveles y por lo tanto su altura sera tambin grande. An cuando se supone que el
rbol implementa algn mecanismo de equilibrado, una gran altura va en contra de un tiempo
aceptable de bsqueda.
Y por otra parte, parece obvio que el rbol no debera organizarse en memoria
principal: si el archivo es muy grande el ndice podra no entrar en memoria, y an si entra
podra no quedar lugar para otros ndices que se requieran para ese achivo.
Hasta 1972 no se haba ideado una estructura de ndice que realmente fuera eficiente en
el acceso rpido a archivos. Las diversas tcnicas de equilibrado de rboles clsicas (como los
UTN Crdoba
rboles AVL), eran claramente insuficientes para indexar grandes archivos. Pero entonces algo
cambi...
2.)
Arboles B.
Sea n un parmetro que designaremos como el orden del rbol. Entonces cada pgina del rbol
(salvo eventualmente la pgina raiz) debe tener un mnimo de n claves en todo momento.
El nmero mximo de claves que una pgina puede tener es 2*n.
UTN Crdoba
iii.)
Hay slo dos tipos de pginas: las hojas (que no tienen hijos) y las pginas que tienen
exactamente m + 1 pginas hijas, siendo m el nmero de claves que efectivamente hay en esa
pgina.
iv.)
Todas las pginas hoja deben aparecer juntas en el mismo nivel (que no puede ser otro que el
ltimo nivel... como es obvio...)
Estas cuatro reglas indican en forma taxativa lo que se puede y no se puede hacer al ir
formando un rbol B. Veremos a continuacin, que cada una de ellas cumple un papel
importante en cuanto al proceso de auto-balanceo del rbol: al igual que un rbol AVL, los
rboles B insertan una clave y luego verifican si esa insercin provoc algn tipo de
desbalance, procediendo a restaurar el equilibrio si fuera el caso.
Supongamos que se quiere mostrar la forma en que va creciendo un rbol B de orden 2
(n=2) a medida que se insertan claves. Supongamos que el rbol arranca vaco, y que se
quieren insertar las siguientes primeras cuatro claves: 10, 20, 40 y 30. Como el rbol est
vaco, no contiene ninguna pgina an. Debemos crear la pgina raiz entonces. La regla ii)
nos dice que debemos prever lugar mximo para 2*n claves = 4 claves. Lo comn es dibujar
cada pgina como si fuera un arreglo de tamao 2*n. Las claves que se insertan (al igual que
en un rbol de bsqueda comn) se insertan como parte de una hoja, y dentro de la hoja
husped se almacenan ordenadas de menor a mayor. La raiz quedara as luego de crearla e
insertar las primeras cuatro claves citadas (note que la regla i exige que una pgina siempre
tenga al menos n = 2 claves, pero la raiz est exenta de esa regla: de otro modo, nunca
podramos tener un rbol B vaco o con menos de n claves cuando recin se crea...)
10
20
30
40
Supongamos que ahora queremos insertar la clave x = 25. La nica pgina que tiene el
rbol ya no tiene lugar para una nueva clave, por lo tanto debemos crear al menos una pgina
nueva. Sin embargo, no podemos crear pginas de cualquier forma... Las reglas estructurales
del rbol sugieren que hay slo una forma de hacerlo: suponga que x = 25 realmente pudo
insertarse. En ese caso, la secuencia ordenada quedara as:
promover al nivel superior
10
20
25
30
40
Puede verse que ahora el nmero de claves es impar (2*n + 1 claves) y por lo tanto el
valor del medio de la secuencia es la mediana de la misma. Lo que se hace es tomar el valor
mediano, y promoverlo a la pgina que estuviera en el nivel superior de esta que fue
rebalsada. Si no hubiera ninguna pgina en el nivel superior (pues la pgina rabalsada es la
raiz) entonces se crea una nueva raiz que slo contendr al valor promovido (el 25 en nuestro
caso). Pero en la pgina original quedan exactamente 2*n claves, tales que la mitad son
menores que el promovido y la otra mitad son mayores... se arman dos pginas con esos
valores, que quedarn como hijas de la raiz:
25
4
10
20
menores que 25
30
40
mayores que 25
UTN Crdoba
Como se ve, en el rbol resultante se cumplen todas las reglas: las dos pginas hoja
estn juntas en el ltimo nivel. Ninguna pgina (salvo la raiz) tiene menos de n = 2 claves. Y
la nica pgina que tiene hijos, tiene exactamente 2 hijos, los cual es igual al nmero m de
claves que tiene esa pgina (la raiz, con m = 1 clave efectivamente contenida) ms uno.
Note que el rbol ha crecido un nivel: de altura h = 1 mientras slo tena cuatro claves,
pas a tener altura h = 2 con la quinta clave. Veremos que en el nico caso en que el rbol
gana altura es cuando se parte la raiz (lo que ocurri en este caso...)
Supongamos que ahora se quieren insertar las claves 5, 15 y 23. Las claves entran por
la raiz, y bajan por el rbol buscando una hoja con lugar libre para insertarse. Las claves 5 y
15 no tendrn problemas, pero la clave 23 provocar un desborde de la pgina izquierda del
25:
25
10
15
20
30
23
menores que 25
40
mayores que 25
15
10
menores que 15
25
20
23
mayores que 15 y
menores que 25
30
40
menores que 15
UTN Crdoba
Observe que se parti una pgina pero el rbol no gan altura: el impacto del quiebre
de la pgina fue absorbido "a lo ancho" en el rbol (lo cual no produce merma en el
rendimiento de una bsqueda: mientras no crezca la altura, el crecimiento horizontal no es
problema). Podemos decir entonces que los rboles B son muy estables en cuanto a su
crecimiento en altura: debe quebrarse la raiz para que la altura crezca, pero ese
acontecimiento depende que primero se quiebre una larga serie de pginas inferiores antes de
provocar el rebalsamiento en la raiz... De hecho, en este momento el rbol necesitara el
quiebre de tres pginas para que la raiz se quiebre a su vez... Para verlo, adelantmonos en el
proceso. Supongamos que ya se han insertado las claves 45, 50 y 60 (provocando un quiebre y
enviando el 45 a la raiz) y luego las claves 65, 70 y 80 (provocando otro quiebre y enviando el
65 a la raiz). El rbol quedara as:
15
10
20
25
45
23
30
65
40
50
60
70
80
15
10
20
25
23
45
65
30
40
85
50
60
70
80
85
90
La solucin: se crea una nueva raiz con el 45. El rbol crece un nivel, y las pginas se
reparten as:
45
15
10
20
25
23
65
30
40
50
60
85
70
80
90
95
95
UTN Crdoba
En nuestro modelo hemos supuesto que el orden n del rbol es 2, y eso sirve a los
efectos didcticos. Pero en la prctica, el orden del rbol se elige de forma tal que cada pgina
pueda tener un nmero alto de claves: De hecho, se suele hacer que el orden elegido garantice
que el tamao final en bytes de una pgina sea un mltiplo de 512, de forma que el tamao de
una pgina coincida o sea mltiplo del factor de paginacin usado por el sistema operativo
husped: de esta forma, se aprovecha al mximo la capacidad de lectura y grabacin del
sistema.
Note que si el orden del rbol es n = 500, entonces una pgina puede tener hasta 1000
claves. Si la raiz tiene 1000 claves, deber tener 1001 pginas hijas que pueden a su vez tener
hasta 1000 claves cada una... Eso implica que el rbol podr contener un milln de claves... en
slo dos niveles de rbol. En la prctica, la pgina raiz est siempre en memoria mientras el
ndice est abierto (slo se accede a disco para cargarla la primera vez, cuando el ndice se
abre). Por lo tanto, encontrar una clave requerir como mximo dos operaciones de acceso
directo a disco (que en la prctica es slo una... pues dijimos que la raiz slo se levanta de
disco una vez, al principio...)
Esa notable eficiencia se ve incrementada con otras caractersticas destacables: la regla
i estructural del rbol garantiza que al ir a disco a buscar una pgina, esa pgina tendr un
nmero razonable de claves (50% llena) que haga que valga la pena la prdida de tiempo de ir
al disco a buscarla. Y la regla ii nos protege de la posibilidad de levantar una pgina tan llena
de claves que no quepa en memoria. La regla iii garantiza que no iremos a disco nunca a
buscar una pgina vaca. Y la iv es la que finalmente fuerza a que el rbol se mantenga
siempre en equilibrio, y se expanda hacia lo ancho en lugar de hacerlo hacia arriba.
3.)
Desde 1972 a la fecha se han estudiado a fondo las propiedades de los rboles B, y
como no poda ser de otra forma, se plantearon muchas variantes estructurales. Una de ellas
fue planteada por Knuth en 1973, y se llam Arbol B* (B estrella o B star). Esencialmente se
trata de una variante que garantiza que cada pgina tendr al menos dos tercios de su
capacidad ocupada (y no slo la mitad)
Otra variante muy conocida es la designada como rbol B+ (B ms o B plus). La idea
es simple: un rbol B ofrece un posibilidad rpida de acceder a un registro del archivo, pero
no ofrece la propiedad de recorrer en forma secuencial ordenada ese mismo archivo. Los
rboles B+ constituyen una extensin natural al rbol B permitiendo esa caracterstica. En un
rbol B+, todas las claves se almacenan en la hojas del ltimo nivel. Las pginas intermedias
contienen valores duplicados de esas claves, slo para proporcionar rutas de recorrido de
bsqueda que lleguen hasta las hojas. Hasta aqu, el rbol sigue sirviendo para bsquedas
rpidas. Pero el detalle final es que las hojas del ltimo nivel se enlazan entre ellas formando
una lista, que puede recorrerse desde el principio (si entramos al archivo por la clave menor) o
desde cualquier otra parte (entrando al ndice por una clave cualquiera, llegamos hasta ella en
la hoja del ltimo nivel y recorremos desde alli en adelante en orden de lista):
un rbol B+
10
10
30
20
23
7
30
40
UTN Crdoba
UTN Crdoba