Sunteți pe pagina 1din 9

ARBORI ROsU-NEGRI.

Arborii rosu-negri sunt una din multele scheme de arbori de cautare care sunt "echilibrati" cu scopul de a garanta ca operatiile dinamice sa aiba complexitatea O(lg n). 11.1.Proprietatle arborilor rosu-negri. Un arbore rosu-negru este un arbore binar care contine cate o informatie n plus pentru fiecare nod aceasta fiind culoarea care poate fi rosu sau negru. Arborii rosu-negrii ne asigura ca nu exista o cale cu lungimea de doua ori mai mare dect orice alta cale, deci acesti arbori sunt aproximativ echilibrati. Fiecare nod al arborelui rosu-negru contine urmatoarele cmpuri: culoarea (CuI) cheia (KEY) legatura din stnga (LS) legatura din dreapta (LD) parintele (P) este arbore rosu-negru daca

Un arbore binar de cautare ndeplineste urmatoarele proprietati: 1.Fiecare nod este rosu sau negru 2.Fiecare frunza Nil este neagra

3.Daca un nod este rosu, atunci ambii descendenti sunt negri 4.Pe orice cale ntre un nod si o frunza descendenta se afla acelasi numar de noduri negre. Un exemplu de arbore rosu-negru avem n figura 11.1 unde nodurile rosii sunt cele umbrite.

fig.11.1. Un arbore rosu-negru cu n noduri interne are naltimea cel mult 2*log(n+ 1). Consecinta Operatiile dinamice cautare, minimum, maximum, succesolr, predecesor pot fi implementate pentru arborii rosu-negri n O(lg n). 11.2.Rotatii.
Operatiile de cautare si stergere aplicate unui arbore rosu-negru cu n chei modifica arborele, ceea ce ar putea duce la distrugerea proprietatilor pe care trebuie sa le aiba un arbore rosunegru. Pentru a restaura aceste proprietati va trebui sa schimbam culoarea anumitor noduri si, deasemenea, sa schimbam structura pointer. Schimbam structura pointer printr-o rotatie, care este o operatie locala ntr-un arbore de cautare care conserva disciplina cheilor.

In figura 11.2 sunt expuse doua tipuri de rotatii: rotatie_stnga si rotatie_dreapta.

fig. 11.2.
Cnd facem o rotatie stnga presupunem ca LD(y)Nil. Rotatia_stnga

"pivoteaza" n jurul legaturii dintre x si y, facndu-l pe y noua radacina a subarborelui avnd pe x ca si copil stng, iar copilul stng al lui y va fi copilul drept al lui x. (,,, sunt subarbori arbitrari). Algoritmul pentru rotatie_stnga. Rotatie_stnga(T ,x) y=LD(x) LD(x)=LS(y) Daca LS(y) Nil atunci
P(LS(y))=x

sdaca P(y)=P(x) Daca P(x)=Nil atunci Rad(T)=y altfel Daca x = LS(P(x)) atunci LS(P(x))=y

altfel
LD(P(x))=y

sdaca LS(y)=x P(x)=y


Return Exercitiul 1.

Algoritmul Rotatie_dreapta este similar. Este momentul sa vedeti daca l-ati nteles pe cel dinainte si sa scrieti algoritmul pentru Rotatie_dreapta.

Ambii algoritmi au complexitatea O(1). n figura 11.3 se vede cum functioneaza Rotatie_stnga: Fig.11.3 .

fig.11.3.b 11.3.Inserarea. Vom folosi algoritmul INS_BIN din capitolul 9. Pentru a insera un nod x n arborele T ca si cum ar fi un arbore binar de cautare oarecare apoi l vom colora rosu. Pentru a garanta ca proprietatile rosu-negru sunt pastrate vom 'repara' modificarile aparute n arbore prin recolorarea nodurilor si folosirea rotatiilor. n mare parte algoritmul se ocupa de diferitele cazuri care pot aparea pentru a 'repara' modificarile aparute n arbore. RN_INSERT(T ,x) Cheama INS_BIN(T ,x) Cul(x)=rosu Atat timp cat xRad(T) si cul(P(x))=rosu daca P(x) = LS(P(P(x)) atunci y= LD(P(P(x)) daca Cul(y)=rosu atunci Cul(P(x))=negru Cul(y)=negru Cul(P(P(x))=rosu x=P(P(x)) altfel

daca x=LD(P(x)) atunci x=P(x) cheama Rotatie_stnga(T,x) sdaca


Cul(P(x))=negru

Cul(P(P(x)) = ro:u Cheama Rotatie_dreapta( T ,P(P(x))


Sdaca

(aceleasi instructiuni ca pe ramura de dreapta unde LD si LS au fost schimbate) Cul(Rad(T))=negru return

Care dintre proprietatile rosu-negru sunt ncalcate dupa primele doua linii ale algoritmului? Proprietatea 1 se pastreaza cu siguranta, la fel si cea de-a doua din moment ce noul nod introdus este rosu si copilul sau este Nil. Proprietatea 4 este satisfacuta pentru ca nodul x nlocuieste un nod negru - Nil si acest nod x este rosu cu copil Nil. Deci singura proprietate care poate fi 'stricata' este cea cu numarul 3 (n cazul n care parintele lui x este rosu). n figura 11.4.a. este dat un exemplu care arata cum este ncalcata aceasta proprietate dupa ce un nod x este inserat. La celelalte subpuncte ale figurii sunt prezentati pasii algoritmului care 'repara' aceasta ncalcare. (a)

(b)

(d) fig. 11.4.

11.4 stergerea.
stergerea unui nod dintr-un arbore rosu-negru este doar un pic mai complicata dect operatia de inserare. Algoritmul RN_Elimin este obtinut din algoritmul ELIMIN_BIN din cap.9 printr-o mica modificare. Vom utiliza o 'sentinela' pentru a reprezenta nodurile Nil. ntr-un arbore rounegru T, 'sentinela' NiI(T) e un nod cu aceeasi structura cu a oricarui nod n arbore. Culoarea sa este neagra, iar restul nregistrarilor (KEY, LS, LD, P) vor avea valori arbitrare. ntr-un arbore rosu-negru vom nlocui toate legaturile la Nil cu legaturi la Nil(T). Sensul folosirii 'sentinelei' este de a nlocui un descendent Nil al unui nod x printr-un nod care are ca parinte pe x. Pentru economie de memorie vom folosi o singura 'sentinela' pentru a reprezenta toate nodurile Nil (setnd la fiecare folosire a 'sentinelei' legatura de tip parinte catre nodul x la care ne referim). La fel ca la inserare trebuie sa avem grija sa pastram proprietatile rosu-negru ale arborelui. Acest lucru se face cu ajutorul unui algoritm care se apeleaza dupa ce stergerea a fost efectuata. Cazurile care apar la stergerea nodurilor dintr-un arbore rosu-negru sunt prezentate n figura urmatoare : (nodurile umbrite sunt rosii, cele albe sunt cele care pot fi rosii sau negre).

Cazul 1. Acest caz apare cnd fratele alaturat al nodului x este rosu.

Cazurile 2, 3, 4. Aceste cazuri apar cnd fratele alaturat al nodului x este negru diferentiindu-se ntre ele dupa culorile copiilor acestui frate.

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