Sunteți pe pagina 1din 56

mbogirea structurilor de

date.
De ce este nevoie de mbogirea unei
structuri
Cum arat un arbore pentru statistic de
ordine
Care sunt paii care trebuie parcuri
pentru mbogirea unei structuri
Cum arat un arbore de intervale
In practica programrii apar cte o dat
situaii care necesit numai o structur de
date clasic, ca de exemplu lista dublu
nlnuit, tabela de dispersie sau arborele
binar de cutare, ns majoritatea
problemelor care trebuie rezolvate au
nevoie de o structur nou.
Totui, foarte rar, este nevoie s se creeze
un tip complet nou de structur de date.
Mai des se potrivete s fie suficient s
adaugm informaii suplimentare la o
structur de date clasic n aa fel nct
ea s rspund nevoilor impuse de
aplicaia pe care o realizm.
Desigur, mbogirea structurilor de date
nu este ntotdeauna simpl, deoarece
informaia adugat trebuie sa fie
actualizat, i ntretinut prin operaiile
obinuite ale structurii de date respective.
Arbori pentru statistici de ordine
Definim a i-a statistic de ordine a unei
mulimi de n elemente ca al i-lea cel mai
mic element. De exemplu, minimul unei
multimi de n elemente este prima statistic
de ordine (i = 1), iar maximul este a n-a
statistic de ordine (i = n).
Arbori pentru statistici de ordine
Intuitiv, o median este punctul de la
jumtatea drumului. Cnd n este impar,
mediana este unic, i apare pe pozitia i =
(n+ 1)/2. Cnd n este par, exist dou
mediane, care apar pe poziiile i = n/2, i =
n/2+ 1.
Arbori pentru statistici de ordine
Se poate arta c orice statistic de ordine
poate fi determinat ntr-un timp de O(n) n cazul
unei mulimi neordonate.
n acest capitol vom vedea cum se pot modifica
arborii rou-negri sau AVL pentru ca orice
statistic de ordine s se determine ntr-un timp
O(lg n) i vom afla cum se determin rangul unui
element - poziia acestuia n ordonarea liniar a
mulimii - tot ntr-un timp O(lg n).
Arbori pentru statistici de ordine
In figura urmtoare vom prezenta o
structur de date care posed operaii
rapide de statistici de ordine. Un arbore cu
statistic de ordine T este un arbore de
cutare care conine o informaie
suplimentar n fiecare nod.
Arbori pentru statistici de ordine
La cmpurile uzuale pentru un nod x dintr-
un arbore de exemplu rou-negru: KEY(x),
CUL(x), P(x), LS(x), i LD(x), se adaug
un cmp nu DIM(x). Acest cmp conine
numrul de noduri (interne) din
subarborele cu rdcina x (incluzndu-l i
pe x), adic dimensiunea subarborelui.
Arbori pentru statistici de ordine
Dac facem convenia DIM(NIL)=0, atunci are
loc identitatea:
DIM(x)=DIM(LS(x))+DIM(LD(x))+1
Un arbore de statistic de ordine care este de
fapt un arbore rou-negru mbogit. Nodurile gri
sunt roii, iar nodurile negre sunt negre. n
partea de jos a fiecarui nod este cmpul DIM(x)
care reprezint numrul de noduri ale
subarborelui cu rdcina x.
Arbori pentru statistici de ordine
Arbori pentru statistici de ordine
Regsirea unui element cu
rangul cunoscut.
ncepem cu operaia care regsete un
element cu rangul cunoscut. Procedura
RN-SELECT(x,i,y) retumeaza un pointer -
y la nodul care conine a i-a cheie din
subarborele avnd rdcina x. Pentru a
determina a i-a cea mai mic cheie din
arborele de statistic de ordine T vom face
apelul RN -SELECT( RAD(T),i,y).
Arbori pentru statistici de ordine
RN-SELECT(X,i,y)
r=DIM(LS(x))+1
daca i=r atunci
y=x
altfel
daca i < r atunci
cheama RN-SELECT(LS(x),i,y)
altfel
cheama RN-SELECT(LD(x),i-r,y)
sdaca
sdaca
Return
Arbori pentru statistici de ordine
Pentru a vedea cum funcioneaza RN-
SELECT, s considerm cutarea pentru
al 17 -lea cel mai mic element din arborele
de statistica de ordine T din figura
anterioar:
Arbori pentru statistici de ordine
Deoarece fiecare apel recursiv coboar un
nivel n arborele de statistic de ordine T,
timpul total pentru acest algoritm este, n
cel mai defavorabil caz, proporional cu
nlimea arborelui. Deoarece arborele
este rou-negru nlimea sa este O(lg n),
unde n este numrul de noduri. Prin
urmare, timpul de execuie al algoritmului
prezentat este O(lg n) pentru o mulime
dinamic avand n elemente.
Arbori pentru statistici de ordine
Determinarea rangului unui
element
Fiind dat un pointer la un nod x dintr-un
arbore de statistic de ordine T, procedura
RN-RANG returneaz r = poziia lui x n
ordinea liniar dat de parcurgerea n
inordine a lui T.
Arbori pentru statistici de ordine
RN-RANG(T,x,r)
R=DIM(LS(x))+1
y=x
cat timp yRAD(T)
daca y=LD(P(x)) atunci
r=r+DIM(LS(P(y)))+1
sdaca
y=P(y)
sciclu
return
Arbori pentru statistici de ordine
Execuia algoritmului RN-RANG, pe
arborele de statistic de ordine din figura
anterioar, pentru determinarea rangului
nodului avnd cheie 38.
Arbori pentru statistici de ordine
Fiecare iteraie a ciclului cat timp consum
un timp de O(1), iar y urc un nivel n
arbore la fiecare iteraie, timpul de
execuie al algoritmului RN- RANG este,
n cel mai ru caz, proporional cu
nlimea arborelui: O(lg n) pentru un
arbore de statistic de ordine avnd n
noduri.
Arbori pentru statistici de ordine
ntreinerea dimensiunilor
subarborilor
Vom arta acum c dimensiunile
subarborilor se pot ntreine att pentru
inserare ct i pentru tergere, fara
afectarea timpilor asimptotici de execuie
ai acestor operaii.
Arbori pentru statistici de ordine
Inserarea unui nod ntr-un arbore rou-
negru se face n dou etape:
- se insereaza nodul x n arborele dat ca i
cum ar fi un arbore binar de cutare
obinuit i se coloreaz inserat cu rou
-se aplic asupra arborelui rezultat un
algoritm care va recolora nodurile pentru
conservarea proprietilor specifice
arborelui rou-negru.
Arbori pentru statistici de ordine
n prima faz se coboar n arbore
ncepnd de la rdcin i se insereaz
nodul nou ca fiu al unui nod existent. A
doua faz nseamn urcarea n arbore,
modificnd culorile i efectund la sfrit
rotaii pentru a conserva proprietile rou-
negru.
Arbori pentru statistici de ordine
Pentru a ntreine dimensiunile
subarborilor n prima faz, se va
incrementa cmpul dimensiune[x] pentru
fiecare nod x de pe drumul traversat de la
rdcin n jos spre frunze. Noul nod care
se aduga va primi valoarea 1 pentru
cmpul su dimensiune.
Arbori pentru statistici de ordine
Deoarece pe drumul parcurs sunt O(lg n)
noduri, costul suplimentar pentru
ntreinerea cmpurilor dimensiune va fi i
el O(lg n ). n faza a doua, singurele
modificri structurale ale arborelui rou-
negru sunt produse de rotaii, care sunt
cel mult dou.
Arbori pentru statistici de ordine
Mai mult, rotaia este o operaie local; ea
invalidez numai cmpurile dimensiune
din nodurile incidente (de la capetele)
legturii n jurul creia se efectueaz
rotaia.
Arbori pentru statistici de ordine
La codul procedurii ROTETE-STANGA(T
,x) se adaug urmtoarele dou linii:
dim(y)= dim(x)
dim(x)= dim(LS(x))+ dim(LD(x))+1
Arbori pentru statistici de ordine
Deoarece la inserarea unui nod ntr-un
arbore rou-negru sunt necesare cel mult
dou rotaii, se consum un timp
suplimentar de O(1) pentru actualizarea
cmpurilor dimensiune, n faza a doua a
inserrii. n concluzie, timpul total necesar
pentru inserarea unui nod ntr-un arbore
de statistic de ordine cu n noduri este de
O(lg n)
Arbori pentru statistici de ordine
tergerea unui nod dintr-un arbore rou-
negru are de asemenea dou faze: prima
opereaz pe arborele binar de cutare, iar
a doua face cel mult trei rotaii i n rest nu
efectueaz alte modificri structurale ale
arborelui.
Cum se mbogete o structur
de date.
Procesul de mbogire a unei structuri de date
se poate mprii n patru pai:
1. Alegerea unei structuri de date suport.
2. Determinarea informaiei suplimentare care
trebuie inclus i ntreinut n structura de date
luat ca suport.
3. Verificarea posibilitii ntreinerii informaiei
suplimentare n cazul operaiilor de baz care
modific structura suport.
4. Proiectarea noilor operaii.
Cum se mbogete o structur
de date.
Paii de mai sus au fast exemplificai la
nceputul capitolului pentru proiectarea
arborilor de statistic de ordine. La pasul 1
am ales ca structur suport arborii rou-
negri. O indicaie asupra utilitii acestor
arbori la obinerea statisticilor de ordine
este dat de eficiena operaiilor specifice
mulimilor dinamice pe o ordine total,
precum MINIM, MAXIM, SUCCESOR i
PREDECESOR.
Cum se mbogete o structur
de date.
La pasul 2 am adugat cmpurile dimensiune,
care conin, pentru fiecare nod x, dimensiunea
subarborelui avnd rdcina x. n general,
informaia suplimentar are ca scop sa fac
operaiile (proprii structurii mbogite) mai
eficiente. De exemplu, am fi putut implementa
operaiile RN-SELECT i RN-RANG folosind
numai cheile memorate n arbore, ns n acest
caz timpul lor de execuie nu ar mai fi fost O(lg
n). Uneori aceast informaie suplimentar
conine referine i nu date.
Cum se mbogete o structur
de date.
La pasul 3, ne-am asigurat c operaiile
de inserare i tergere pot ntreine
cmpurile dimensiune fr a-i altera
eficiena asimptotic, ele executndu-se
tot ntr-un timp O(lg n). n cazul ideal, un
numar mic de modificri ale structurii de
date, trebuie s fie suficient pentru a
ntreine informaia suplimentar.
Cum se mbogete o structur
de date.
De exemplu, dac am memora n fiecare nod
rangul su din arbore, atunci operaiile RN-
SELECT i RN-RANG s-ar executa mai rapid,
dar inserarea unui nou element minim n arbore,
ar provoca modificarea acestei informaii
(rangul) n fiecare dintre nodurile arborelui. n
schimb dac memorm dimensiunea
subarborilor n locul rangului, inserarea unui nou
element va necesita modificri ale informaiilor
doar in O(lg n) noduri.
Cum se mbogete o structur
de date.
La pasul 4, am proiectat operaiile RN-
SELECT i RN-RANG. De fapt,
mbogirea structurii de date este impus
tocmai de nevoia de a implementa noi
operaii. Uneori informaia suplimentar se
va putea folosi nu numai la proiectarea
operaiilor noi, ci i la reproiectarea celor
proprii structurii de date suport pentru a le
mbuntii performanele.
Arbori de intervale.
Ne propunem s mbogim arborii rou-
negri pentru a realiza operaii pe mulimi
dinamice de intervale. Un interval nchis
este o mulime notat [t1;t2] ={tR|
t1,t2R, t1<t<t2}. n aceast seciune vom
presupune c intervalele cu care lucrm
sunt nchise; extinderea rezultatelor la
intervale deschise sau semideschise este
imediat.
Arbori de intervale.
Intervalele reprezint un instrument
convenabil de reprezentare a
evenimentelor care ocupa fiecare un
interval continuu de timp. Am putea dori,
de exemplu, s interogm o baz de date
de intervale de timp pentru a descoperi ce
evenimente au aprut ntr-un anumit
interval.
Arbori de intervale.
Bazele de date temporale, de altfel, sunt
la mod acum. Structura de date
prezentat n aceasta seciune ofer un
mijloc eficient de ntreinere a unei astfel
de baze de date de intervale.
Arbori de intervale.
Intervalul [t1;t2] se poate reprezenta sub
forma unui obiect i, care are cmpurile
jos[i] = t1 (captul inferior) i sus[i] = t2
(captul superior).
Arbori de intervale.
Spunem ca intervalele i i i se suprapun
daca i i adic dac jos[i] sus[i] i
jos[i] sus[i].
Arbori de intervale.
]. Pentru orice dou intervale i i i are loc
trihotomia intervalelor, adic ele verific
doar una din urmatoarele trei proprieti:
a. i i i se suprapun,
b. sus[i] < jos[i],
c. jos[i] > sus[i ].
Arbori de intervale.
n figura urmtoare sunt prezentate cele
trei cazuri:

(a)

b c
Arbori de intervale.
Numim arbore de intervale un arbore
rou-negru care ntreine o mulime
dinamic de elemente, n care fiecare
element x conine un interval int[x].
Arbori de intervale.
Arborii de intervale au urmatoarele operaii.
INSEREAZ(T, x) adaug la arborele de
intervale T elementul x care are n cmpul int un
interval.
TERGE(T,x) terge elementul x din arborele de
intervale T.
CAUTA(T,x,y) retumeaz un pointer la un
element din arborele de intervale pentru care
int[y] se suprapune cu intervalul int[x], sau NIL
dac n mulime nu exist un astfel de element.
Arbori de intervale.
n figura urmtoare vom ilustra modul de
reprezentare al unei mulimi de intervale
cu ajutorul unui arbore de intervale. Vom
aplica metoda n patru pai descris mai
nainte pentru a proiecta arborele de
intervale i operaiile proprii acestuia.
Arbori de intervale.
Figura (a) reprezinta 0 multime de 10 intervale, sortate de
jos n sus dup captul din stnga (inferior)
Arbori de intervale.
reprezint arborele de intervale corespunztor.
Arbori de intervale.
Pasul 1: Structura de date suport
Am ales ca structur suport un arbore
rou-negru n care fiecare nod x conine
un cmp interval int[x] i pentru care cheia
nodului x este captul inferior, jos[int[x]], al
intervalului. Prin urmare, o traversare n
inordine a structurii de date va produce o
list a intervalelor, ordonat dup captul
inferior al acestora.
Arbori de intervale.
Pasul 2: Informaia suplimentar.
Pe lng cmpul int[x], fiecare nod x va conine
o valoare max[x] care reprezint valoarea
maxim a capetelor intervalelor memorate n
subarborele avnd rdcina x. Deoarece captul
superior al fiecrui interval este cel puin la fel de
mare ca i captul inferior al acestuia, max[x] va
fi de fapt valoarea maxim a capetelor
superioare ale intervalelor memorate n
subarborele avnd rdcina x.
Arbori de intervale.
Pasul 3: ntreinerea informaiei suplimentare.
Inserarea i tergerea se pot executa ntr-un
timp O(lg n) pe un arbore de intervale cu n
noduri. Valoarea cmpului max[x] se determin
uor dac se cunosc int[x] i valorile max ale
fiilor nodului x cu :
max[x] = max(sus[int[x]], max[LS[x]],
max[LD[x]]).
De fapt, actualizarea cmpurilor max dup o
rotaie se poate realiza ntr-un timp O(1).
Arbori de intervale.
Pasul 4: Proiectarea noilor operaii.
Singura operaie care trebuie proiectat
este CAUTA(T ,i,x), care gsete un
interval din arborele T suprapus pe
intervalul i. Dac T nu conine astfel de
intervale se returneaz NIL altfel
retumeaz x - pointer la intervalul cutat.
Arbori de intervale.
CAUTA(T,i,x)
X=rdcin[T]
cat timp X NIL i i nu se suprapune cu int[x]
daca LS[x] NIL i max[LS[x]] jos[i] atunci
x=LS[x]
alfel
x=LD[x]
return
n acest capitol am vom vzut cum se pot
modifica arborii rou-negri pentru ca orice
statistic de ordine s se determine ntr-un
timp O(lg n) i cum se determin rangul
unui element - poziia acestuia n
ordonarea liniar a mulimii - tot ntr-un
timp O(lg n).
Procesul de mbogire a unei structuri de date
se poate mprii n patru pai:
1. Alegerea unei structuri de date suport.
2. Determinarea informaiei suplimentare care
trebuie inclus i ntreinut n structura de date
luat ca suport.
3. Verificarea posibilitii ntreinerii informaiei
suplimentare n cazul operaiilor de baz care
modific structura suport.
4. Proiectarea noilor operaii.
Am mbogit arborii rou-negri pentru a
realiza operaii pe mulimi dinamice de
intervale.
Arbori de intervale.
Arborii de intervale au urmatoarele operaii:
INSEREAZ(T, x) adaug la arborele de
intervale T elementul x care are n cmpul int un
interval.
TERGE(T,x) terge elementul x din arborele de
intervale T.
CAUTA(T,x,r) retumeaz un pointer la un
element din arborele de intervale pentru care
int[y] se suprapune cu intervalul int[x], sau NIL
dac n mulime nu exist un astfel de element.

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