Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Btrees
Btrees
Indices BTree
Es un arbol con raz donde:
Cada nodo x tiene:
1. N[x] n umero de claves
2. Las claves estan ordenadas de menor a mayor k
1
[x] < . . . < k
n
[x]
3. Una variable Boolean hoja[x] que es verdadera cuando el nodo x es una hoja.
Si el nodo es interno, tiene n[x] + 1 punteros a hijos
k
i
[x] separa los rangos que se almacenan
las hojas estan a la misma altura
dado un t 2, nodos excepto la raz tiene t 1 claves como mnimo y 2t 1 claves como
maximo.
Ejemplo:
Dibujo B-TREE del alfabeto con t = 3
P
C G M
T X
A B D E F J K L N O Q R S U V Y Z
Dado n 1, entonces cualquier n-key B-Tree de altura h y mnimo grado t2 satisface que
h log
t
n + 1
2
n 1 + (t 1)
h
i=1
2t
i1
1 + (t 1)
t
h
1
t 1
2t
h
1
68
1
t - 1
t - 1
t - 1 t - 1 t - 1 t - 1
t - 1
t - 1 t - 1
......
..... .....
#nodos
1
2
2t
/ k clave de b usqueda
/ x nodo en el B-tree (inicialmente la raz
/ leaf[x] indica si x es hoja
/ n[x] indica numero de claves en el nodo
/ c
i
[x] entrega puntero a hijo i en el nodo x
Procedure BTREE SEARCH(k, x)
i:= 1
while i n[x] and k > key
i
[x] do i := i + 1
if i n[x] and k = key
i
[x] then return (x, i)
if leaf[x] the return nil
else [ DISK READ(c
i
[x])
return BTREE SEARCH(k, c
i
[x])]
end BTREE SEARCH
Procedure BTREE SPLIT CHILD(x, i, y)
/ y es el i-esimo hijo de x que es dividido
z := Allocate Node()
leaf[z] := leaf[y]
n[z] := t 1
for j = 1 to t 1 do key
j
[z] := key
j+t
[y]
if not leaf[y] then
for j = 1 to t do c
j
[z] := c
j+t
[y]
n[y] := t 1
for j = n[x] + 1 downto i + 1 do c
j+1
[x] := c
j
[x]
c
i+1
[x] := z
for j = n[x] downto i do key
j+1
[x] := key
j
[x]
key
i
[x] := key
t
[y]
n[x] := n[x] + 1
DISK WRITE(y)
DISK WRITE(z)
DISK WRITE(x)
end BTREE SPLIT CHILD
69
Procedure BTREE INSERT(T, k)
r := root(T)
if n[r] = 2t 1 then [
s := Allocate Node()
root[T] := s
leaf[s] := false
n[s] := 0
c
1
[s] := r
BTREE SPLIT CHILD(s, 1, r)
BTREE INSERT NONFULL(s, k)]
else
BTREE INSERT NONFULL(r, k)
end BTREE INSERT
Procedure BTREE INSERT NONFULL(x, k)
i:= n[x]
if leaf[x] then [
while i 1 and k < key
i
[x] do [
key
i+1
[x] := key
i
[x]
i := i 1]
key
i+1
[x] := k
n[x] := n[x] + 1
DISK WRITE(x)
else [
while i 1 and k < key
i
[x] do i := i 1
i:= i+1
DISK READ(c
i
[x])
if n[c
i
[x]] = 2t 1 then [
BTREE SPLIT CHILD(x, i, c
i
[x])
if k > key
i
[x] then i:= i+1]
BTREE INSERT NONFULL(c
i
[x], k)
end BTREE INSERT NONFULL
70
11. Heaps
Una estructura heap puede ser vista como un arbol completo donde:
A[PARENT(i)] A[i]
Usando una representacion de arreglos de un arbol completo:
PARENT(i) return i/2
LCHILD(i) return 2i
RCHILD(i) return 2i + 1
Procedure BUILD HEAP(A)
heap size := length(A)
for i = (length(A)/2 dowto 1 do
HEAPIFY (A, i)
end BUILD HEAP
Procedure HEAPIFY (A, i)
l:= Left(i)
r:= Right(i)
if l heap size(A) and A[l] > A[i] then
largest := l
else
largest : = i
if r heap size(A) and A[r] > A[largest] then
largest := r
if largest = i then [
exchange(A[i], A[largest])
HEAPIFY (A, largest) ]
end HEAPIFY
El costo computacional del algoritmo HEAPIFY de un subarbol de tama no n y con raz i es de
(1) para encontrar la relaci on entre los elementos i, hijo izquierdo de i e hijo derecho de i, mas
el tiempo de ejecutar el HEAPIFY con un subarbol con la raz siendo uno de los hijos de i. Cada
subarbol hijo tiene como maximo un tama no 2n/3, con el peor caso cuando el ultimo nivel esta lleno
a la mitad. Entonces el sistema recurrente del algoritmo HEAPIFY es:
T(n) T(2n/3) +(1)
Con solucion T(n) = O(logn)
Para la funci on BUILD HEAP , se puede determinar un peor caso en forma simple. Hay un n umero
de O(n) de llamadas a HEAPIFY con cada una de ellas de O(logn). Entonces, el BUILD HEAP
tiene de orden O(nlogn).
Un lmite mas ajustado es por:
71
T(n)
0
k=logn
n
2
k+1
O(k) = O(n
0
k=logn
k
2
k
)
O(n
1/2
(1 1/2)
2
) = O(n)
72
12. Otros ndices
12.1. Tries
Este es un arbol donde los nodos son caracteres de un alfabeto y un camino desde la raz representa
una palabra dentro del vocabulario. Las hojas contienen punteros a la ocurrencias de esas palabras
en el base de datos.
Este es un texto. Un texto tiene muchas palabras. Palabras estn compuestas de caracteres
caracteres:79
compuestas:65
texto:12,22
palabras:41,50
12 22 41 50 65 79
c
a
o
p
t
Figura 21: Trie de vocabulario
Si se tienen n caracteres, entonces el arbol tiene como m aximo un camino de orden O(n), es decir,
insertar o buscar tendr a complejida de O(n). De acuerdo a la ley de Heaps, el vocabulario en un
texto de tama no n crece en e orden O(n