Sunteți pe pagina 1din 54

ARBORI ROU-NEGRI.

n capitolul anterior am artat c operaiile


de cutare, predecesor, succesor,
minimum, maximum, inserarea, i
tergerea pentru un arbore binar de
cutare cu nlimea h se fac n O(h). Deci
aceste operaii se execut rapid dac
nlimea este mic; dar, dac nlimea
este mare, performanele lor nu pot fi mai
bune dect ale unei lisle nlnuite.
Arborii rou-negri sunt una din multele
scheme de arbori de cutare care sunt
aproape echilibrai cu scopul de a
garanta ca operaiile dinamice s aib
complexitatea O(lg n).
Un arbore rou-negru este un arbore binar
care conine cte o informaie n plus
pentru fiecare nod aceasta fiind culoarea
care poate fi rou sau negru. Arborii rou-
negrii ne asigur c nu exist o cale cu
lungimea de dou ori mai mare dect orice
alt cale, deci aceti arbori sunt
aproximativ echilibrai.
Fiecare nod al arborelui rou-negru
conine urmtoarele cmpuri:
culoarea (CuI)
cheia (KEY)
legtura din stnga (LS)
legtura din dreapta (LD)
printele (P)
Un arbore binar de cutare este arbore rou-
negru dac ndeplinete urmtoarele proprieti:
1.Fiecare nod este rou sau negru
2.Fiecare frunz Nil este neagr
3.Dac un nod este rou, atunci ambii
descendeni sunt negri
4.Pe orice cale ntre un nod i o frunz
descendent se afl acelai numr de noduri
negre.
Lema
Un arbore rou-negru cu n noduri interne
are nlimea cel mult 2*log(n+ 1).
Consecin
Operaiile dinamice cutare, minimum,
maximum, succesor, predecesor pot fi
implementate pentru arborii rou-negri n
O(lg n).
Operaiile de inserare i tergere aplicate
unui arbore rou-negru cu n chei modific
arborele, ceea ce ar putea duce la
distrugerea proprietilor pe care trebuie
s le aib un arbore rou-negru. Pentru a
restaura aceste proprieti va trebui sa
schimbm culoarea anumitor noduri i,
deasemenea, s schimbm structura
pointer.
Schimbm structura pointer printr-o
rotaie, care este o operaie local ntr-un
arbore de cutare care conserv disciplina
cheilor.
Cnd facem o rotaie stnga presupunem
c LD(y)Nil. Rotatia_stnga pivoteaz
n jurul legturii dintre x i y, fcndu-l pe y
noua rdcina a subarborelui avnd pe x
ca i descendent stng, iar descendentul
stng al lui y va fi descendentul drept al lui
x. (,,, sunt subarbori arbitrari).
Rotaie_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
sdaca
Return

Ambii algoritmi au complexitatea O(1). n
figur se vede cum funcioneaz
Vom folosi algoritmul INS_BIN din cursul
anterior. Pentru a insera un nod x n
arborele T ca i cum ar fi un arbore binar
de cutare oarecare apoi l vom colora
rou.
Pentru a garanta c proprietile rou-
negru sunt pstrate vom repara
modificrile aprute n arbore prin
recolorarea nodurilor i folosirea rotaiilor
Cutarea

Datorit regulii care ordoneaz cheile nodurilor,
cutarea unei chei ncepe prin compararea cheii
date cu cea stocat n rdcina arborelui:
- dac ele sunt egale atunci s-a gsit valoarea
cutat,
- dac valoarea dat este mai mic dect cea a
rdcinii atunci continum cutarea n
subarborele stng, altfel n subarborele drept.
- dac se ajunge la o frunz i valoarea cutat nu
a fost gsit nseamn c ea nu se afl printre
valorile cheilor arborelui.
Minim i maxim
Pentru a determina minimul sau maximul cheilor
din nodurile unui arbore binar de cutare vom
folosi tot proprietatea acestuia. Pentru
determinarea minimului vom porni de la ideea c
n rdcin se pstreaz minimul i atta timp
ct aceast are legtur stng voi reiniializa
minimul cu valoarea cheii din legtura stng,
altfel spus nodul din arborele stng aflat pe cea
mai la stnga poziie va conine cheia minim.
Maximul se va gsi n arborele drept pe cea mai
din dreapta poziie.

Succesor i predecesor
Pentru a determina succesorul unui nod este suficient s
determinm minimul din subarborele su drept, iar
pentru predecesor s determinm maximul din
subarborele su stng.

Inserarea
Datorit regulii care ordoneaz valorile din noduri
inserarea unei valori noi printre valorile stocate deja n
nodurile unui ABC ncepe prin compararea valorii date
cu cea stocat n rdcina arborelui:
dac valoarea dat este mai mic dect cea a rdcinii
atunci continum compararea n subarborele stng pn
cnd ajungem la frunz care permite valorii date s-i
devin fiu, n cel mai ru caz se poate ajunge la o frunz
de pe ultimul nivel
altfel se continu compararea n subarborele drept.
Comparaiile pe care trebui s le executai pentru a
insera nodul cu valoarea 15 n arborele de mai jos

tegerea

tergerea se face n funcie de numrul de fii ai
nodului care urmeaz a fi ters:
- Dac nodul de ters nu are copii el se terge
pur i simplu
Exemplu tergei nodul 16 n arborele construit
anterior
Dac nodul are un fiu se terge nodul i se nlocuiete
cu fiul. Exemplu tergei nodul 45
Dac nodul are doi fii atunci se terge nodul i se nlocuiete cu
succesorul nodul cu cea mai mic valoare din subarborele drept
(sau cu predecesorul nodul cu cea mai mare valoare din
subarborele stng ). Exemplu tergei rdcina arborelui
Exemplu Un arbore rou-negru
Inserare
Aceast operaie stric proprietile iniiale
ale arborelui. Algoritmul are la baz
algoritmul de la ABC cu convenia ca nodul
inserat s aib culoarea roie.
Exist dou situaii de baz n care ne vom
afla cnd inserm un nod ntr-un ARN
1) printele nodului de inserat este negru
situaie pe care o vom numi NR i care se
rezolv la fel ca la ABC

Inserai nodul 14 n ARN-ul iniial
printele nodului de inserat este rou situaie pe care o vom numi RR
i care se rezolv mai complicat pentru c ncalc proprietatea 4.
Dac am ncerca rezolvarea problemei prin recolorarea nodului
inserat n negru am nclca proprietatea 6.
Rezolvarea nclcrilor de proprieti se face dup locul nodului
inserat fa de viitorul su printe. Astfel:
dac nodul inserat este pe partea stng a printelui su ne va
interesa culoarea unchiului su adic fratele printelui
dac unchiul este rou atunci nodul inserat nu va nclca proprietatea
6 pentru c nodurile roii nu conteaz la nlimea neagr a ARN, n
aceast situaie, pe care o vom numi S-RRr, vom recolora printele i
unchiul i bunicul nodului de inserat procedur care va mri cu o
unitate nlimea neagr dar poate produce alte nclcri ale
proprietilor ARN

Exemplu. La inserarea nodului 21 n arborele
dat iniial suntem exact n situaia descris
mai sus 21 =LS(P(21)), cul(P(21))=cul(22)=R,
cul(U(21))=cul(27)=R ceea ce nseamn c va
trebui s recolorm pe 22, 27 i 25. Observai
c problema nu s-a rezolvat definitiv ci a
urcat mai sus fcnd ca nodul 25 s ncalce
proprietatea 3. Rezolvarea se va face cu
cazul potrivit pentru nodul bunic..
Cazul S-RRr impune recolorarea printelui unchiului i bunicului n
cazul nostru se vor recolora 22, 27 i 25
Am ajuns ntr-o situaie nediscutat nc i
anume D-RRr (nodul care ncalc proprietile
ARN este fiu rou pe dreapta a unui printe
rou i are unchiul rou)
b) dac unchiul este negru, situaie pe care o vom
numi S-RRn atunci se vor face dou rotaii: la
dreapta dup printe respectiv la stnga dup
bunicul nodului inserat (sau nodul care a
generat nclcarea proprietilor) urmat de o
recolorare.

Inserarea lui 5 n arborele iniial
genereaz situaia S-RRn pentru c
unchiul lui 5 este o frunz nil care este
ntotdeauna neagr
Recapitulare:

http://www.cse.ohio-
state.edu/~gurari/course/cis680/cis680Ch1
1.html
tergerea

a) Cazul n care nodul de ters este rou i are copii frunze nil
Exemplu tergerea nodului 27 din arborele iniial se face natural
b) Cazul n care nodul are un singur copil el va fi sigur negru
Exemplu tergerea lui 1 n arborele iniial
c) Cazul n care nodul care trebuie ters are doi copii iar
predecesorul sau succesorul su este un nod rou
n arborele de mai jos rdcina are succesorul rou. (14)
Dup tegere arborele va fi









n aceste cazuri tergerea nu ncalc niciuna din proprietile ARN i se
execut la fel ca la ABC.
Nodul de ters este negru i are copii doar
frunze nil
a) Dac este legtur stnga pentru
printele su executm:
- recolorarea printelui i a subarobrelui
drept avnd ca rdcin fratele nodului
ters,
- o rotaie spre stnga dup printele
nodului ters
Exemplu tergei nodul 15 din arborele iniial
Recolorarea subarborelui

Rotaia stnga dup 17
b) Dac este legtur dreapta pentru printele
su executm:
- tergerea nodului,
- recolorarea printelui i a subarobrelui drept
avnd ca rdcin fratele nodului ters,
- o rotaie spre stnga dup frate
- o rotaie dreapta dup parinte
Exemplu tergei nodul 11 din arborele iniial
Nodul de ters este negru, are doi copii iar
predecesorul sau succesorul sunt i ei negri.
Se nlocuiete nodul de ters cu
succesorul sau predecesorul su care se
va terge conform unuia din cazurile n
care nodul are un copil sau nu are copii.
Exemplu tergerea rdcinii 13 folosind
succesorul n arborele iniial
RN_INSERT(T ,x)
Cheama INS_BIN(T ,k,x)
Cul(x)=rou
Atat timp cat xRad(T) i cul(P(x))=rou
daca P(x) = LS(P(P(x)) atunci
y= LD(P(P(x))
daca Cul(y)=rou atunci
Cul(P(x))=negru
Cul(y)=negru
Cul(P(P(x))=rou
x=P(P(x))
altfel
daca x=LD(P(x)) atunci
x=P(x)
cheama Rotaie_stnga(T,x)
sdaca
Cul(P(x))=negru
Cul(P(P(x)) = ro:u
Cheama Rotaie_dreapta(T ,P(P(x))
Sdaca
(aceleai instruciuni ca pe ramura dreapt unde LD i LS au fost schimbate)
Cul(Rad(T))=negru
return
Care dintre proprietile rou-negru sunt
nclcate dup primele dou linii ale
algoritmului? Proprietatea 1 se pstreaz cu
siguran, la fel i cea de-a doua din moment ce
noul nod introdus este rou i descendentul sau
este Nil. Proprietatea 4 este satisfacut pentru
c nodul x nlocuiete un nod negru - Nil i acest
nod x este rou cu descendent Nil. Deci singura
proprietate care poate fi stricat este cea cu
numarul 3 (n cazul n care printele lui x este
rou).
n figur este dat un exemplu care arat
cum este ncalcat aceast proprietate
dup ce un nod x este inserat. La celelalte
subpuncte ale figurii sunt prezentai paii
algoritmului care repar aceast
nclcare.