Sunteți pe pagina 1din 12

8.5.

Arbori multici
8.5.1. Generaliti

Pn n prezent au fost studiate cu predilecie structuri de arbori n care fiecare nod avea
cel mult doi descendeni.

Desigur, acest lucru este pe deplin justificat dac spre exemplu, se dorete s se
reprezinte descendena unei persoane din punctul de vedere al strmoilor,

n acest caz, fiecrei persoane i se asociaz cei doi prini ai si.


Dac se abordeaz ns punctul de vedere al urmailor, atunci o familie poate s aib
mai mult de doi copii, rezultnd astfel noduri cu mai multe ramuri (gradul arborelui este
mai mare ca 2).

Structurile care conin astfel de noduri se numesc arbori multici.


Astfel de structuri ridic ns unele probleme n prelucrare.
Este evident faptul c modalitile de reprezentare a arborilor sugerate pn n
prezent nu corespund ntr-o manier eficient arborilor multici.

n practic ns, exist un mare interes referitor la arborii multici.

Este vorba despre construcia i exploatarea arborilor de foarte mari


dimensiuni.

Arbori n care se fac frecvent inserii i suprimri


Arbori pentru care dimensiunile memoriei centrale sunt insuficiente sau a
cror memorare vreme ndelungat n memoria sistemului de calcul este prea
costisitoare.

Aceast aplicabilitate se bazeaz pe o tehnic special de implementare a acestei


categorii de arbori.

S presupune c nodurile unui arbore trebuiesc memorate ntr-o memorie


secundar, spre exemplu pe un disc magnetic.

Structurile de date dinamice definite n acest curs se preteaz foarte bine i


acestui scop:

Astfel, pointerii care de regul indic adrese de memorie pot indica n


acest caz adrese de disc.

Utiliznd spre exemplu un arbore binar echilibrat cu 106 noduri,


cutarea unei chei necesit aproximativ log2106 20 pai.

Deoarece n acest caz, fiecare pas necesit un acces la disc (care este

lent) se impune cu necesitate o alt organizare pentru reducerea


numrului de accese.

Arborii multici reprezint o soluie perfect a acestei probleme.


Este cunoscut faptul c dup realizarea accesului (de regul mecanic) la un anumit
element de pe disc (pist) sunt uor accesibile (electronic) un ntreg grup de elemente
(sectoarele corespunztoare).

Aceasta sugereaz faptul c:


Un arbore poate fi divizat n subarbori
Subarborii pot fi memorai pe disc ca uniti n zone la care accesul se realizeaz
foarte rapid.

Aceti subarbori se numesc pagini.


Considernd c accesul la fiecare pagin presupune un acces disc, dac spre

exemplu se plaseaz 100 noduri pe o pagin, atunci cutarea n arborele cu 106


noduri presupune log100 106 = 3 accese disc n loc de 20.

n situaia n care arborele crete aleator, n cel mai defavorabil caz ( cnd
degenereaz n lista liniar) numrul de accese poate ajunge ns la 104.

Este evident faptul c n cazul arborilor multici, trebuie avut n vedere un


mecanism de control al creterii acestora.

Exist mai multe variante de implementare a arborilor multici.


Una dintre cele mai cunoscute modaliti de implementare a arborilor multici o
reprezint arborii B.
8.5.2. Arbori-B
8.5.2.1. Definire

Din discuia asupra mecanismului de control al creterii arborilor multici, arborii


perfect echilibrai se exclud de la nceput din cauza costului ridicat al echilibrrii.

Un criteriu foarte potrivit n acest scop a fost postulat de R.Bayer n 1970 i anume:
Fiecare pagin cu excepia uneia, conine ntre n i 2n noduri, unde n este o
constant dat.

Astfel ntr-un arbore cu N noduri, a crui dimensiune maxim a unei pagini este
2n noduri, n cel mai ru caz, se fac lognN accese la pagini pentru a cuta o
cheie precizat.

Factorul de utilizare al memoriei este de cel puin 50%, deoarece orice pagin
este cel puin pe jumtare plin.

n plus schema preconizat necesit algoritmi simpli pentru cutare, inserie i


suprimare n comparaie cu alte metode.

Structurile de date propuse de Bayer se numesc arbori-B iar n se numete ordinul


arborelui B.

Arborii-B se bucur de urmtoarele proprieti:


1. Fiecare pagin a arborelui-B conine cel mult 2n noduri (chei);
2. Fiecare pagin, cu excepia paginii rdcin conine cel puin n noduri;
3. Fiecare pagin este fie:

O pagin terminal - caz n care nu are descendeni


O pagina interioar - caz n care are m+1 descendeni unde m este
numrul de chei din pagin (nm2n);
4. Toate paginile terminale sunt la acelai nivel.

n figura 8.9.2.1.a apare reprezentat un arbore-B de ordinul 2 cu 3 niveluri.


Toate paginile conin 2, 3 sau 4 noduri cu excepia paginii rdcin care conine
unul singur.

Toate paginile terminale apar pe nivelul 3.

25

10 20

02 05 07 08

30 40

13 14 15 18

22 24

26 27 28

32 35 38

41 42 45 46

Fig.8.9.2.1.a. Arbore-B de ordinul 2

Dac aceast structur se liniarizeaz prin inserarea cheilor descendenilor


printre cheile strmoilor lor, cheile nodurilor apar n ordine cresctoare de la
stnga la dreapta.

Acest structurare reprezint o extensie natural a structurii de arbore binar


ordonat i ea st la baza metodei de cutare ce va fi prezentat n continuare.

8.5.2.2. Cutarea cheilor n arbori-B

Se consider o pagin a unui arbore-B de forma prezentat n fig.8.9.2.2.a i o cheie


dat x.

Presupunnd c pagina a fost transferat n memoria central a unui sistem de calcul,


pentru cutarea cheii x printre cheile k1,...,km aparinnd paginii, se poate utiliza o
metod de cutare convenional.

k1

p0

k2

p1

k3

p2

p3 ...

km-1

pm-2

km

pm-1

pm

Fig. 8.9.2.2.a. Pagin cu m chei a unui arbore-B

Spre exemplu, dac m este mare se poate utiliza cutarea binar, n caz contrar,
cutarea liniar.

Trebuie subliniat faptul c timpul de cutare n memoria central este probabil

neglijabil n comparaie cu timpul de transfer al unei pagini din memoria


secundar n cea primar.

Dac cheia x nu se gsete n pagina curent este valabil una din urmtoarele situaii:
1. ki<x<ki+1, pentru li<m. Cutarea continu n pagina pi.
2. km<x. Cutarea continu n pagina pm.
3. x<k1. Cutarea continu n pagina po.

Dac pointerul la pagina desemnat de algoritmul de mai sus este vid, atunci nu exist
nici un nod cu cheia x i cutarea este terminat, adic s-a ajuns la baza arborelui ntro pagin terminal.
8.5.2.3. Inseria nodurilor n arbori B

n ceea ce privete inseria nodurilor n arborii-B de ordinul n, exist mai multe


cazuri.

(1) Nodul trebuie inserat ntr-o pagin coninnd m<2n noduri,

n acest caz inseria se realizeaz simplu n pagina respectiv insernd cheia


corespunztoare la locul potivit n secvena ordonat a cheilor,

Spre exemplu inseria cheii cu numrul 15 n arborele-B din fig.8.9.2.3.a (a).


(2) Nodul trebuie inserat ntr-o pagina care este plin, adic conine deja 2n chei,
n acest caz structura arborelui se modific conform exemplului prezentat n
fig.8.9.2.3.a (b).

+15
20

20

7 10 18

26 30 35 40

7 10 15 18

26 30 35 40

(a)
+22
20

7 10 15 18
B

20 30

26 30 35 40
C

7 10 15 18

(b)

22 26
C

35 40
D

Fig.8.9.2.3.a Inseria nodurilor n arbori-B. Exemple

Astfel, spre exemplu inseria cheii cu numrul 22 n arborele-B se realizeaz


n urmtorii pai:
1. Se caut cheia 22 i se descoper c ea lipsete, iar inseria n pagina C
este imposibil deoarece aceasta este plin (conine 2n chei);
2. Pagina C se scindeaz n dou prin alocarea unei noi pagini D;
3. Cele 2n+1 chei ale paginii C sunt distribuite dup cum urmeaz:
primele n (cele mai mici) n pagina C, ultimele n (cele mai mari) n
pagina D iar cheia median este translatat pe nivelul inferior n pagina
strmo A.

Aceast schem pstreaz toate proprietile caracteristice ale aborilor-B.


Se observ c paginile rezultate din scindare au exact n noduri.
Desigur este posibil ca scindarea s se propage spre nivelurile inferioare ale
structurii, n cazul extrem pn la rdcin.

Aceasta este de fapt singura posibilitate ca un arbore-B s creasc n


nlime.

Maniera de cretere a unui astfel de arbore este inedit: el crete de la


nodurile terminale spre rdcin.

n continuare se va dezvolta un program care materializeaz conceptele prezentate.


Pornind de la proprietatea de propagare a scindrii paginii, se consider c formularea
recursiv a algoritmului este cea mai convenabil.

Structura general a programului este similar programului de inserie n arbori


echilibrai (vezi &8.5.3).

Pentru nceput se precizeaz structurile de date utilizate n implementarea arborilor-B


[8.9.2.3.a].
------------------------------------------------------------{Structur de date pentru arbori-B}
CONST nn=2*n;
TYPE

RefPagina=^pagina;
indice=0..nn;
nod=RECORD
cheie:integer;
p:RefPagina;
contor:integer
END;

[8.9.2.3.a]

pagina=RECORD
m:indice; {nr curent de elemente n pagin}
p0:RefPagina;
elemente:ARRAY[1..nn] OF nod
END;
-------------------------------------------------------------

Referitor la structura nod:


Cmpul cheie precizez cheia nodului respectiv
Cmpul p indic pagina urma care conine chei mai mari dect cheia
nodului n cauz

Cmpul contor este utilizat ca numrtor de accese.


Referitor la structura pagina:
Fiecare pagin ofer spaiu pentru 2n noduri.
Variabila m indic numrul curent de noduri memorate n pagina
respectiv

Tabloul elemente memoreaz nodurile din pagina curent n ordinea


cresctoare a cheilor

p0 indic pagina urma cu chei mai mici dect cea mai mic cheie din
pagin

Deoarece mn, (cu excepia rdcinii), se garanteaz o utilizare a memoriei de


cel puin 50 %.

n programul [8.9.2.3.d] apare algoritmul de cutare i inserie materializat de


procedura Cauta.

Structura sa de principiu este asemntoare cu cea a algoritmului de cutare


binar, cu excepia faptului c decizia de ramificaie n arbore nu e binar ci
este cea specific arborilor-B (&8.9.2.2).

n schimb cutarea n interiorul unei pagini este o cutare binar efectuat n


tabloul elemente al paginii curente.

Forma pseudocod a procedurii Cauta apare n secvena [8.9.2.3.b].


------------------------------------------------------------(Schia de principiu a procedurii de cutare n arbori-B}
PROCEDURE Cauta(x:integer; a:RefPagina; VAR h:boolean;
VAR v:nod);
VAR u:nod;
BEGIN
IF a=NIL THEN
BEGIN {x nu este in arbore}
{*se creaz nodul v, i se atribuie cheia x i se
pune h pe adevarat indicnd pasarea nodului v spre
rdcin}
END
ELSE
BEGIN {se caut x n pagina curent a^}
{*cutare binar ntr-un tablou liniar }
IF gsit THEN
{*incrementeaz contorul de accese}
ELSE
[8.9.2.3.b]
BEGIN
Cauta(x,urmas,h,u);
IF h THEN Insereaza {nodul u a fost pasat}
END
END
END; {Cauta}
-------------------------------------------------------------

Algoritmul de inserie este formulat ca i o procedur aparte (procedura


Insereaza) care este activat dup ce procesul de cutare indic faptul c unul din
noduri trebuie pasat spre printe.

Acest lucru este precizat de ctre valoarea "adevrat" a parametrului h returnat de


procedura Cauta.

Dac h este adevrat, parametrul u indic nodul care trebuie pasat n direcia
rdcinii.

Se precizeaz faptul c procesul de inserie ncepe ntr-o pagin ipotetic, de tip nod
special situat virtual sub nivelul terminal.

Noul nod, este transmis imediat, via parametrul u paginii terminale pentru
adevrat inserie.

Pornind de la aceste precizri, structura de principiu a procedurii Insereaz apare


n secvena [8.9.2.3.c].
------------------------------------------------------------{Schia de principiu a inseriei nodurilor n arbori-B}
PROCEDURE Insereaza
BEGIN
IF (numrul de noduri a^.m al paginii a^)<2n THEN
{*se insereaza nodul u n pagina a^ la locul potrivit
i se face h=fals}
ELSE
BEGIN
[8.9.2.3.c]
{* se creaz o nou pagin b^}
{* se redistribuie cheile paginii a^, primele n
pe a^, ultimele n pe b^ si se paseaz nodul v=u
coninnd cheia median spre nivelul inferior
iar h rmne poziionat pe valoarea true}
END
END; {Insereaza}
-----------------------------------------------------------

Dac parametrul h devine adevrat dup apelul procedurii Cauta din programul
principal, acesta indic necesitatea scindrii paginii rdcin.

Deoarece pagina rdcin are un rol special, acest proces trebuie programat separat.
El const de fapt din alocarea unei noi pagini rdcin i inserarea unui singur nod
transmis prin parametrul u.

n figura 8.9.2.3.b apare urma execuiei programului la inserarea urmtoarei


succesiuni de chei: 20; 40, 10, 30, 15; 35, 7, 26, 18, 22; 5; 42, 13, 46, 27, 8,
32; 38, 24, 45, 25;

Punctul i virgula precizeaz momentele la care au avut loc alocri de pagini.


Inseria ultimei chei (25) cauzeaz dou scindri i alocarea a 3 noi pagini.

+40, 10, 30, 15


20

10 15 (20) 30 40
+35, 7, 26,18, 22
20
10 15

30 40

20
7 10 15 18

22 26 (30) 35 40
+5

20 30
7 10 15 18

22 26

35 40
+42, 13, 46,27, 8, 32

10 20 30
5 7

15 18

22 26

35 40
+38, 24, 45, 25

10 20 30 40
5 7 8

13 15 18

22 26 27

32 35

42 46

10 20 30 40
5 7 8

13 15 18

22 24 (25) 26 27

32 35 38

42 45 46

10 20 (25) 30 40
5 7 8

13 15 18

22 24

26 27

32 35 38

42 45 46

25
10 20
5 7 8

13 15 18

30 40
22 24

26 27

32 35 38

42 45 46

Fig.8.9.3.2.b. Construcia unui arbore-B de ordinul 2

n legtur cu inseria nodurilor n arbori-B se fac urmtoarele observaii:


(1) Deoarece paginile arborelui sunt alocate n memoria secundar, este

necesar un mecanism pentru realizarea transferului paginii curente n


memoria primar.

(2) ntruct fiecare activare a procedurii Cauta implic o alocare de pagin n


memoria principal, vor fi necesare cel mult k=lognN apeluri recursive, unde
n este ordinul arborelui-B iar N numrul total de noduri.

(3) Prin urmare dac arborele conine N noduri, n memoria principal trebuie
s ncap cel puin k pagini.

(4) Acesta este unul din factorii care limiteaz dimensiunea 2n a paginii.
De fapt n memorie trebuie s existe mai mult de k pagini din cauza scindrilor care
apar.

O consecin a acestei maniere de lucru este faptul c pagina rdcin trebuie


s fie tot timpul n memoria principal, ea fiind punctul de pornire al tuturor
activitilor.

Un alt avantaj al structurii de date de tip arbore-B se refer la actualizarea simpl i


eficient, n mod secvenial a ntregii structuri.

n acest caz, fiecare pagin este adus n memorie exact odat.


Se observ de asemenea faptul c arborii-B cresc relativ greu n nlime,
inseria unei noi pagini respectiv adugarea unui nou nivel se realizeaz dup
inseria unui numr semnificativ de chei.

8.5.2.4. Suprimarea nodurilor n arbori-B

Principial, suprimarea nodurilor n arborii-B, este o operaie simpl, la nivel de detaliu


ns ea devine complicat.

Se disting dou situaii:


1. Nodul se gsete ntr-o pagin terminal, caz n care suprimarea este imediat.
2. Nodul se gsete ntr-o pagin intern.

n acest caz nodul n cauz trebuie nlocuit cu unul dintre cele dou noduri
adiacente, care sunt n pagini terminale i prin urmare pot fi uor suprimate.

De regul nlocuirea se realizeaz cu predecesorul nodului respectiv.


Cutarea cheii adiacente este similar celei utilizate la suprimarea nodurilor ntr-un
arbore binar ordonat (vezi &8.3.5).

(1) Se nainteaz spre pagina terminal P de-a lungul celor mai din dreapta
pointeri ai subarborelui stng al cheii de suprimat;

(2) Se nlocuiete nodul de suprimat cu cel mai din dreapta nod al lui P ;
(3) Se reduce dimensiunea lui P cu 1.

Reducerea dimensiunii paginii trebuie s fie urmat de verificarea numrului m de


noduri din pagin

Dac m<n apare fenomenul numit "subdepire" care este indicat de valoarea
adevrat a lui h.

n acest caz soluia de rezolvare este aceea de a "mprumuta" un nod de la


pagina vecin.

ntruct aceast operaie presupune aducerea paginii vecine (Q) n


memoria principal - o operaie relativ costisitoare - se prefer
exploatarea la maxim a acestei situaii prin mprumutarea mai multor
noduri.

Astfel, n mod uzual, nodurile se distribuie n mod egal n paginile P


i Q, proces numit echilibrare.

n situaia n care nu poate fi mprumutat nici un nod din pagina Q - aceasta


avnd dimensiunea minim n, paginile P i Q care mpreun au 2n-1 noduri se
contopesc ntr-una singur.

Acest lucru presupune extragerea nodului median din pagina printe a


lui P i Q, gruparea tuturor nodurilor ntr-una din pagini, adugarea
nodului median i , funcie de situaie, tergerea celeilalte pagini

Acesta este procesul invers scindrii paginii, proces care poate fi urmrit
n figura 8.9.2.3.a, dac se imagineaz suprimarea cheii cu numrul 22.

Din nou, extragerea cheii din mijloc din pagina strmo, poate determina
subdepirea, situaie care poate fi rezolvat fie prin echilibrare fie prin
contopire.

n caz extrem, procesul de contopire se poate propaga pn la rdcin.


Dac rdcina este redus la dimensiunea 0, ea dispare cauznd
reducerea nlimii arborelui-B.

Aceasta este de fapt singura cale de reducere a dimensiunii unui arboreB.

n figura 8.9.2.4.a se prezint evoluia unui arbore-B, rezultat din suprimarea


urmtoarei secvene de chei: 45, 25, 24; 38, 32; 8, 27, 46, 13, 42; 5, 22, 18, 26; 7,
35, 15.
i n acest caz punctul i virgula precizeaz momentele la care sunt eliberate
pagini.

-45, -25
25

10 20

578

30 40

13 15 18

22 24

26 27

32 35 38

echilibrare prin imprumut

24

10 20

5 7 8

42 45 46

30 40

13 15 18

22

26 27

32 35 38

42 45 46

-24
24

10 18

5 7 8

30 40

13 15

20 22

26 27

32 35 38

42 45 46

contopire
22

10 18

5 7 8

30 40

13 15

20

26 27

32 35 38

42 45 46

-38, -32
10 22 30 40

5 7 8

13 15 18 20

26 27

32 35 38

-8, -27 -46, -13, -42


10 22 30

5 7 8

13 15 18 20

26 27

35 40 42 46

-5, -22, -18, -26


10 22

15 18 20

5 7

26 30 35 40

-7, -35, -15


15

7 10

20 30 35 40

10 20 30 40

Fig.8.9.4.2.a. Suprimarea nodurilor n arbori-B

42 46

S-ar putea să vă placă și