Documente Academic
Documente Profesional
Documente Cultură
(B-Trees)
Fie x un pointer ctre un obiect. Dac obiectul
se afl n memoria principal, ne vom referi la
cmpuri ca de obicei (ex.KEY(x)). Dac obiectul
se afl pe disc, vom face mai nti o operaie de
citire CIT_DISK(x) a obiectului x i apoi ne
putem referi la cmpurile lui. Dac s-au efectuat
modificri ale cmpurilor lui x ele vor fi
actualizate pe disc prin scriere SCR_DISK(x).
O s pornim n demonstraie de la un
arbore cu numr maxim de chei ca n
exemplul urmtor.
B_TREE_CRE(T)
x = ALOC_NOD( )
Frunza(x) = True
n(x) = 0
SCR_DISK(x)
Rad(T) = x
Return
B_TREE_RUP(x, k, y)
z = ALOC_NOD( )
Frunza(z) = Frunza(y)
n(z) = t-1
Pentru i = 1, t-1
KEYi(z) = KEYi + t(y)
spentru
Daca nu Frunza(y) atunci
Pentru i=1,t
Ci(z) = Ci+t(z)
spentru
sdaca
n(y) = t-1
Pentru i = n(x)+1,k+l,-1
Ci+l(X) = Ci(x)
spentru
Ci+l(X)= z
Pentru i = n(x), k, -1
KEYi+l(X) = KEYi(x)
spentru
KEYk(x)=KEY t(y)
n(x) = n(x) +1
SCR_D ISK( x)
SCR_DISK(y)
SCR_DISK(z)
return
B-TREE_INSERT(T, k)
r=Rad(T)
daca n(r) = 2t-1 atunci
s = ALOC_NOD( )
Rad(T) = s
Frunza(T) = False
n(s) = 0
cl(S) = r
cheama B_TREE_RUP(s, 1, r)
cheama B_TREE_INS_NEPLIN(s,k)
altfel
cheama B- TREE_INS_NEPLIN (r,k)
Sdaca
Return
Procedura B_TREE_INS_NEPLIN
parcurge arborele n jos pn la locul
unde trebuie fcut inserarea.
B- TREE_INS_NEPLIN(x, k)
i = n(x)
Daca Frunza(x) atunci
atata timp cat i 1 i k<KEYi(x)
KEYi+1(x) = KEYi(x)
i=i-1
Sciclu
KEYi+1(X) = k
n(x) = n(x) + 1
SCR_DISK(x)
atata timp cat i 1 i k<KEYi(x)
i=i-1
sciclu
i=i+l
CIT_DISK(ci(x))
Exemple de inserri