Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




























ARBORI ROSU-NEGRI

Informatica


ARBORI ROsU-NEGRI.

Īn capitolul 10 am aratat ca operatiile de cautare, predecesor, succesor, minimum, maximum, inserarea, si stergerea pentru un arbore binar de cautare cu īnaltimea h se fac īn O(h). Deci aceste operatii se executa rapid daca īnaltimea este mica; dar, daca īnaltimea este mare, performantele lor nu pot fi mai bune decāt ale unei lisle īnlantuite.



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 as 757g69h igura ca nu exista o cale cu lungimea de doua ori mai mare decāt orice alta cale, deci acesti arbori sunt aproximativ echilibrati.

Fiecare nod al arborelui rosu-negru contine urmatoarele cāmpuri:

culoarea (CuI)

cheia (KEY)

legatura din stānga (LS)

legatura din dreapta (LD)

parintele (P)

Un arbore binar de cautare este arbore rosu-negru daca ī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.

Lema

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 rosu-negru. 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_stānga si rotatie_dreapta.


fig. 11.2.

Cānd facem o rotatie stānga presupunem ca LD(y) Nil. Rotatia_stānga

"pivoteaza" īn jurul legaturii dintre x si y, facāndu-l pe y noua radacina a subarborelui avānd pe x ca si copil stāng, iar copilul stng al lui y va fi copilul drept al lui x. (a b g, sunt subarbori arbitrari).

Algoritmul pentru rotatie_stānga.

Rotatie_stānga(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_stānga:

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 x Rad(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_stānga(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 decāt 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 rou-negru 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 (setānd 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 cānd fratele alaturat al nodului x este rosu.

Cazurile 2, 3, 4.

Aceste cazuri apar cānd fratele alaturat al nodului x este negru diferentiindu-se īntre ele dupa culorile copiilor acestui frate.

Īntrebari si exercitii la capitolul 11.

Exercitiul 1 este īn text la rotatii.

Exercitiul 2.

Pe arborele de la īnceputul capitolului ilustrati stergerea cheii 30.

Exercitiul 3.

Pe arborele de la īnceputul capitolului ilustrati adaugarea cheii 13.





Document Info


Accesari: 10130
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )