Vous êtes sur la page 1sur 16

UNIVERSIDAD SEOR DE SIPAN

FACULTAD DE INGENIERIA Y ARQUITECTURA


ESCUELA PROFESIONAL DE INGENIERIA DE SISTEMAS

EJERCICIOS DE INDEXACION
BASES DE DATOS AVANZADAS

DOCENTE
ING. ANTONIO P. SANDOVAL LARRAIN

2015

PROBLEMA 1
Qu es un rbol B+? Definicin y caractersticas. Para qu se usa. Qu parmetros maneja y qu
condiciones cumplen. Explicar la propiedad de equilibrio y qu ventajas tiene. Explicando
detalladamente el proceso, construir un rbol B+ si se van insertando, en el orden que se indican, los
siguientes conjuntos de valores clave:
8, 6, 20, 4, 30, 15, 9, 5
si consideramos que n=3
si consideramos que n=5
.
Explicar detalladamente cmo se modifica el rbol del apartado anterior (para n=3) si se elimina el
valor de clave 15 .
SOLUCIN
Es una estructura de indexacin alternativa al archivo secuencial indexado, que permite remediar la
bajada de rendimiento que conlleva el crecimiento del archivo sin necesidad de continuas
reorganizaciones.
Un rbol B+ es un rbol equilibrado, esto es, un rbol en el que todas las ramas tiene la misma
longitud. Adems debe cumplir que todos los nodos excepto el raz tienen entre [n/2] y n nodos
hijo.
Los nodos son del tipo:
P

n-1

n-1

Donde K son valores de la clave de bsqueda ordenados y P son punteros. Se diferencian los nodos
hoja de los nodos que no lo son de la siguiente manera:
Caso nodos hoja:
P con 1 i < n, apunta a cualquier registro con clave de bsqueda Ki o a una
cajn (o cubeta) con punteros que apunten a los registros con clave de
bsqueda Ki
P apunta al siguiente al siguiente nodo hoja de su mismo nivel para conseguir
un orden.
Caso nodos no hoja:
P con 1 < i < m, apunta al nodo que contiene valores menores que K
P apunta al nodo que contiene valores menores que K
P apunta a la parte del subrbol que contiene aquellos valores de la clave
mayores o iguales que K
Como ya dije antes, un rbol equilibrado es aquel en el que todas las ramas tiene la misma longitud.
Su ventaja principal es que asegura un buen rendimiento en las bsquedas, inserciones y
eliminaciones.
1

m-1

Veamos como se construye el rbol pedido con n=3:


Insercin de 8:
8

Insercin de 6:
6

Insercin de 20: Tenemos que crear un nodo hoja nuevo y aumentar por tanto el nivel del rbol
para conservar su balanceo.
20

20

v
Insercin de 4: Tenemos que crear un nodo hoja nuevo
8

20
20

Insercin de 30:
8

20

20

30

20

30

Insercin de 15:

20

15

Insercin de 9: Se necesita crear un nuevo nodo hoja, que obliga a dividir el nodo raz, y todo esto
conlleva una redistribucin de los punteros
15

20

20

15

30

Insercin de 5: Se necesita crear un nuevo nodo hoja, que obliga a dividir el nodo raz, y todo esto
conlleva una redistribucin de los punteros para conseguir que el rbol siga balanceado.
15

20

Veamos como se construye el rbol pedido con n=5:


Insercin de 8:
8

Insercin de 6:
6

Insercin de 20:

Insercin de 4:
4

20

20

15

20

30

Insercin de 30: Tenemos que crear un nodo hoja nuevo y aumentar por tanto el nivel del rbol
para conservar su balanceo.
20

20

30

20

30

Insercin de 15:
20

15

Insercin de 9: Hay que crear un nuevo nodo hoja y por tanto redistribuir los punteros

20

15

20

15

20

30

20

30

Insercin de 5:

Veamos como se elimina 15 con el rbol de n=3:


Al eliminar 15 tendremos cuatro nodos hojas, con lo cual para estar balanceado necesitamos que
dos surjan de cada nodo padre.
Habr que pasar el nodo 8 9 a depender de 20
y por tanto la raz del rbol ser 8

20

20

30

PROBLEMA 2
Sea el siguiente rbol B+ con claves numricas
Tomando como ejemplo el nodo raz del rbol, explicar qu representa el valor (o valores) que se

10

50

10

20

50

almacena en el nodo, con relacin al resto de valores almacenados en el rbol


Teniendo en cuenta las restricciones que impone la estructura de rboles B+, decir cul es el
resultado de realizar las siguientes operaciones de forma secuencial y en el orden que se indican,
utilizando en cada paso el rbol resultante del paso anterior. Para cada paso dibujar poner el
rbol correspondiente, justificando cada accin que se realiza sobre el rbol.
1. AADIR 15
2. AADIR 12
3. AADIR 8
4. BORRAR 10
5. BORRAR 50
Cada elemento del nodo indica un rango de valores, a la izquierda del mismo estn nodos de valor
menor que el elemento, y la derecha valores mayores o iguales que el elemento. Sobre el nodo raz
de la figura:

5
Apunta a un subrbol
cuyos nodos tienen
valores mayores o
iguales que 5

Apunta a un subrbol
cuyos nodos tienen
valores menores que 5

Apartado 2
Aadir 15: Movindonos por el rbol B+, vemos que le toda insertar en el nodo hoja que ahora
tiene 10-20. Como no cabe, partimos el nodo en dos, el primero para albergar a 10-15 y el segundo
para albergar slo al 20. Al aadir el nuevo nodo, en el nodo raz no tenemos sitio para referenciar
al nuevo, por lo tanto lo partimos en dos, y como ste era el nodo raiz, generamos un nodo raiz
nuevo que pasa a ser el nodo padre de stos. El siguiente paso es actualizar los valores de los
nuevos nodos, que se hace teniendo en cuenta el rango de valores que tiene que referenciar cada
nodo (segn ya se vi en el apartado 1) y las restricciones propias de los rboles B+, que en este
ejemplo no nos permiten tener un nodo con menos de 2 enlaces. El rbol resultante es el siguiente:

20
50

10
3

10

15

20

50

Aadir 12: Recorriendo el rbol anterior, vemos que el nodo 12 debera ir en el nodo hoja que
tiene el 10-15. Como no cabe, procedemos a partirlo. Como en el nodo antecesor se dispone de
espacio para un nuevo enlace, lo actualizamos considerando lo explicado en el apartado 1. El
rbol resultante es el siguiente:

20
15

10
3

10

12

50
15

20

50

Aadir 8: Recorriendo el rbol, vemos que el 8 debe ir en el nodo hoja 3-5, pero no cabe.
Procedemos a aadir un nodo para el 8. Como se ha insertado un nuevo nodo, hay que actualizar
en su antecesor los enlaces a los nodos hoja. Como arriba tengo 2 nodos, que son seis punteros,
reorganizo los valores para acceder a todos los nodos hoja. El rbol resultante es el siguiente:

15
8
3

10

20
10

12

50
20

15

50

Borrar 10: Recorremos el rbol y llegamos al nodo hoja en el que est el valor 10. Se borra, y
se reorganiza quedando el siguiente rbol resultante.

15
8
3

20
12

15

50
20

50

Si no se reorganiza el arbol (no se unen el 8 y el 12, si los valores del nodo superior estn
actualizados, la solucin es igualmente buena)

Borrar 50: Recorremos el rbol y llegamos al nodo. Lo borramos, y actualizamos los valores en
los nodos antecesores, lo cual supone eliminar tambin el nodo que tiene el 50 ya que no es
necesario. Basta con referenciar el nodo hoja del 20 desde el nodo de 15, como tambin se
elimin un nodo, se actualizan los enlaces en el nodo antecesor (que es el nodo raz). El rbol
resultante es el siguiente:

15
8
3

20
12

15

20

PROBLEMA 3
Dado un archivo que contiene registros con los siguientes valores de clave de bsqueda
4, 20, 6, 3, 1, 9, 8, 40, 21, 15
la funcin de asociacin h(x) 0 x mod 8, y cajn (o cubeta) s de tres registros, mostrar la
estructura de asociacin extensible para este archivo.

Puesto que la funcin de asociacin es h(x) = x mod 8, slo necesitamos tres bits para cada registro.
El resto de la divisin se obtiene considerando los trees bits menos significativos resultantes de
codificar en binario cada nmero de clave.. Los valores de h(x) correspondientes a cada valor de la
clave de bsqueda son los siguientes, donde cogemos los valores de derecha a izquierda:
x
4
20
6
3
1
9
8
40
21
15

h(x)
100
100
110
011
001
001
000
000
101
111

h*(x) dada la vuelta


001
001
011
110
100
100
000
000
101
111

Veamos el proceso de insercin de registros. Suponemos que inicialmente el archivo est


vaco. Por lo tanto, no necesitamos todava ningn bit para el prefijo de asociacin (i) ni para el
prefijo comn de la cajn (o cubeta) (i0).
Prefijo de asociacin
0 (i)

Prefijo comn de asociacin


0 (i0)

Tabla de direcciones de cajn (o cubeta) s

Cajn (o cubeta) 1

Insertamos consecutivamente los tres primeros registros con valores de clave 4, 20 y 6 en la


nica cajn (o cubeta) de que disponemos.
0
0

(i)

0 (i0)
4
20
6

Los bits se cogen de derecha a izquierda, y para seguir el mtodo del libro que los coge de izquierda
a derecha, lo que hacemos es darle la vuelta a los bits y trabajar con la columna de h*(x)

Al intentar insertar el siguiente registro (valor de clave 3), encontramos que el cajn
cubeta) est llena. Puesto que i=(i0), necesitamos aumentar el nmero de bits del prefijo
asociacin a 1, lo que nos permitir utilizar 21=2 cajones (o cubeta). La tabla de direcciones
duplicar a 2 entradas. Partimos el cajn (o cubeta) dejando aquellos registros cuya clave
bsqueda tiene asociada una direccin que empieza por 0 en la primera cajn (o cubeta)
moviendo el resto a la segunda.

(i)

0
1

(o
de
se
de
y

1 (i0)
4
6
20
1
3

A continuacin insertamos el 1. Como el primer bit de h(1) es 0, lo colocamos en la cajn


(o cubeta) a la que apunta la entrada 0 de la tabla de direcciones. Lo mismo ocurre con el siguiente
valor, el 9.

1
0
1

(i)

1 (i0)
4
6
20
1
3
1
9

(i1)

Al intentar insertar el siguiente registro (valor de clave 8) encontramos que el primer bit de
h(8)=0, y que la cajn (o cubeta) correspondiente est completa. Como adems el nmero de bits
utilizado por el prefijo comn (1) es igual al nmero de bits del prefijo de asociacin, tendremos
que aumentar ste a 2 bits, duplicando nuevamente el n de entradas de la tabla de direcciones.
Como tenemos 4 valores cuya funcin h(x) empieza por 0, tendremos que utilizar los 2 bits como
prefijo comn para distribuir en una cajn (o cubeta) aquellos cuyo valor de la funcin h(x)
empieza por 00 y en otra aquellos cuyo valor de h(x) empieza por 01. El resto de los valores cuya
funcin h(x) empieza por 1 pueden mantenerse en la misma cajn (o cubeta) , por lo que tendrn un
prefijo comn de 1 bit y habr, por tanto, dos entradas de la tabla de direcciones (10 y 11) que
apunten a esta cajn (o cubeta) .

(i)

00
01
10
11

2 (i0)
4
8
20
2
6

(i1)

1
3
1
9

(i2)

Al insertar el siguiente valor (40), encontramos nuevamente que la cajn (o cubeta)


correspondiente a la direccin 00 est completa, y que i=i 0, por lo que procedemos a duplicar el n
de entradas de la tabla de direcciones aumentando el prefijo de asociacin a 3 bits y redistribuimos
los valores de la primera cajn (o cubeta) .
3
000
001
010
011
100
101
110
111

(i)

3 (i0)
8
40

3 (i1)
4
20

2
6

(i2)

1
3
1
9

(i3)

Al intentar insertar el valor 21 vemos nuevamente que el cajn (o cubeta) correspondiente est
completa. En este caso, i>i 3, por lo que no necesitamos aumentar las entradas en la tabla de
direcciones. Partimos la cajn (o cubeta) con prefijo i3 poniendo el valor del prefijo comn a 2 bits

en los 2 cajones (o cubetas) resultantes, moviendo el valor 6 a la nueva cajn (o cubeta) e


insertando el 21 en la ya existente.
3
000
001
010
011
100
101
110
111

(i)

3 (i0)
8
40

3 (i1)
4
20

2
6

(i2)

2 (i3)
1
9
21
2
3

(i4)

Finalmente, comprobamos que al valor 15 le corresponde el cajn (o cubeta) direccionada por le


puntero 111, en la cual hay espacio libre, por lo que lo insertamos sin ms.
La estructura de asociacin resultante es la que sigue:

3
000
001
010
011
100
101
110
111

(i)

3 (i0)
8
40

3 (i1)
4
20

2
6

(i2)

2 (i3)
1
9
21
2 (i4)
3
15

16

Vous aimerez peut-être aussi