Sunteți pe pagina 1din 32

Curs 11. Arbori de cautare echilibrati.

Ianuarie, 2014

Continut

Arbori bicolori

Arbori splay

Treaps

Alte exemple de arbori echilibrati

Structuri de date

Curs 11

Ianuarie, 2014

2 / 32

Arbori bicolori (red-black trees)

Symmetric binary B-tree, Bayer 1972

Echilibrarea este mentinuta cu ajutorul unei colorari a nodurilor

Arborii rosu-negru sunt arbori binari de cautare care satisfac


urmatoarele proprietati:
1.
2.
3.
4.

un nod are culoarea rosu sau negru


radacina si nodurile frunza (nil) sunt colorate cu negru
daca un nod este rosu, atunci fiii sai sunt negri
drumurile de la un nod la nodurile de pe frontiera au acelasi numar de
noduri negre

Structuri de date

Curs 11

Ianuarie, 2014

3 / 32

Arbori bicolori - exemplu

Structuri de date

Curs 11

Ianuarie, 2014

4 / 32

Arbori bicolori

Teorem
a: Un arbore bicolor cu n noduri interne are naltimea
h 2log2 (n + 1)

Demonstratie:
I

Orice subarbore al unui arbore bicolor are cel putin 2bh(v ) 1 noduri
interne, unde:
I
I

v r
ad
acina subarborelui,
bh(v ) num
arul de noduri negre aflate pe un drum de la v la un nod de
pe frontier
a

Conform proprietatii 4,
n 2h/2 1 h/2 log2 (n + 1) h 2log2 (n + 1)

Structuri de date

Curs 11

Ianuarie, 2014

5 / 32

Operatii

Corolar: Operatiile de cautare, min, max, succesor, predecesor au


complexitatea timp O(lgn), ntr-un arbore bicolor cu n noduri.

Operatiile de inserare si stergere modifica arborele rosu-negru.

Structuri de date

Curs 11

Ianuarie, 2014

6 / 32

Operatia de inserare

se cauta pozitia si se insereaza valoarea similar operatiei de inserare


de la arbori binari de cautare

se coloreaza nodul cu rosu

se restaureaza proprietatile (prin recolorare de noduri si aplicare de


rotatii simple)

Structuri de date

Curs 11

Ianuarie, 2014

7 / 32

Operatia de inserare

Proprietatea 1: satisfacuta

Proprietatea 2 satisfacuta (ambii fii ai nodului inserat sunt nil)


daca nodul este radacina recolorare

Proprietatea 4 satisfacuta (noul nod rosu nlocuieste o frunza)

Poate fi violata proprietatea 3 - daca parintele nodului este rosu


I

muta mai sus aceasta situatie prin recolorarea nodurilor pana cand
poate fi fixata prin operatii de rotatie si recolorare

Structuri de date

Curs 11

Ianuarie, 2014

8 / 32

Operatia de inserare: algoritm


Procedure inserare(t, x)
begin
insArbBinCautare(t, x)
culoare[x] rosu
while (x! = t and culoare[pred[x]] = rosu) do
if (pred[x] = pred[pred[x]] stg ) then
y pred[pred[x]] drp
if (culoare[y ] = rosu) then
Caz 1
else
if (x = pred[x] drp) then
Caz 2
Caz 3
else
similar cu ramura then, doar ca interschimbam stg cu drp
culoare[t] negru
end
Structuri de date

Curs 11

Ianuarie, 2014

9 / 32

Operatia de inserare - Caz 1

Structuri de date

Curs 11

Ianuarie, 2014

10 / 32

Operatia de inserare - Caz 2 si 3

Structuri de date

Curs 11

Ianuarie, 2014

11 / 32

Operatia de inserare - exemplul 1

Structuri de date

Curs 11

Ianuarie, 2014

12 / 32

Operatia de inserare - exemplul 2

Structuri de date

Curs 11

Ianuarie, 2014

13 / 32

Operatia de inserare - exemplul 2

Structuri de date

Curs 11

Ianuarie, 2014

14 / 32

Arbori bicolori

Algoritmul de stergere: similar algoritmului de stergere de la arbori


binari de cautare; se realizeaza n plus recolorari si rotatii pentru
restabilirea proprietatilor

Complexitatea algoritmului de inserare/stergere: O(logn)

Utilizari: system symbol tables


I

Java: TreeMap, TreeSet; C++ STL: map, multimap, multiset

kernel Linux

Structuri de date

Curs 11

Ianuarie, 2014

15 / 32

Continut

Arbori bicolori

Arbori splay

Treaps

Alte exemple de arbori echilibrati

Structuri de date

Curs 11

Ianuarie, 2014

16 / 32

Arbori Splay (Sleator and Tarjan, 1985)

Nu utilizeaza spatiu de memorie suplimentar

Muta valorile accesate frecvent sus (n radacina)

Cost amortizat pentru operatii: O(logn)

Costul pentru o singura operatie, n cazul cel mai nefavorabil: (n)

Structuri de date

Curs 11

Ianuarie, 2014

17 / 32

Arbori Splay

Operatia splay (t, k): muta k n radacina, utilizand rotatii


I

daca k nu se gaseste n arbore, atunci muta succesorul sau predecesorul


lui k

pasi: cauta k, apoi urca-l catre radacina

utilizeaza rotatii stanga/dreapta simple/duble pentru a muta nodul


catre radacina

Structuri de date

Curs 11

Ianuarie, 2014

18 / 32

Operatia splay - Caz 1

Nodul curent nu are bunici

Structuri de date

Curs 11

Ianuarie, 2014

19 / 32

Operatia splay - Caz 2: zigzag(dreapta, stanga)


Nodul curent este fiu stang, iar parintele este fiu drept.

Structuri de date

Curs 11

Ianuarie, 2014

20 / 32

Operatia splay - Caz 3: zigzig(stanga, stanga)


Nodul curent este fiu stang, iar parintele este fiu stang.

Structuri de date

Curs 11

Ianuarie, 2014

21 / 32

Arbori splay
I

Operatiile de cautare/inserare/stergere utilizeaza operatia splay

cauta(t, k): apeleaza splay (t, k); daca k este radacina, atunci
ntoarce k, altfel false

insereaza(t, k): insereaza noua valoare ca n cazul arborilor binari de


cautare, apoi apeleaza splay (t, k);

sterge(t, k): utilizeaza metoda de stergere de la arbori binari de


cautare, apoi apleleaza operatia splay pentru parintele nodului sters

Complexitatea medie a unei operatii: O(logn), considerand o secventa


de operatii (presupunem ca pornim cu un arbore vid, n este
dimensiunea maxima a arborelui)
Structuri de date

Curs 11

Ianuarie, 2014

22 / 32

Arbori Splay

Implementarile mai rapide utilizeaza versiunea top-down splay trees

Utilizari: Windows NT (memorie virtuala, retea), compilatorul gcc,


libraria GNU C++, implementarea functiei Unix malloc, etc.

Structuri de date

Curs 11

Ianuarie, 2014

23 / 32

Continut

Arbori bicolori

Arbori splay

Treaps

Alte exemple de arbori echilibrati

Structuri de date

Curs 11

Ianuarie, 2014

24 / 32

Treaps

Seidel and Aragon, 1996

Arborii binari de cautare se comporta bine pe valori aleatoare, si nu la


fel de bine pe cele particulare

Treaps: structuri de date aleatoare


I

n loc sa permutam valorile aleator (nu putem!), permutam structura


de date

Treaps: implementarea implicita a unui dictionar n LEDA


http://www.algorithmic-solutions.com/leda/

Structuri de date

Curs 11

Ianuarie, 2014

25 / 32

Treaps

Are structura unui arbore


binar de cautare
Proprietatea de ordine de
la heap-uri
I

prioritatile sunt
asignate aleator

Structuri de date

Curs 11

Ianuarie, 2014

26 / 32

Treaps

Prin parcurgerea n inordine a arborelui vom obtine cheile sortate

Prioritatea fiecarui nod este mai mare decat a fiilor

Cheile si prioritatile asociate determina n mod unic forma unui treap


I

treap-ul este arborele binar obtinut prin inserarea cheilor n ordine


descrescatoare a prioritatilor

Adancimea medie a oricarui nod este O(logn)

Rotatiile stanga/dreapta simple pastreaza invariantul arborilor de


cautare si invariantul heap

Structuri de date

Curs 11

Ianuarie, 2014

27 / 32

Operatia de inserare
I

Alege pentru prioritate o valoare aleatoare

Insereaza ca ntr-un arbore binar de cautare

Aplica rotatii pana se restabileste ordinea heap

Complexitate: in cazul mediu O(log n); in cazul cel mai nefavorabil,


complexitate amortizata O(log n)
Structuri de date

Curs 11

Ianuarie, 2014

28 / 32

Operatia de stergere

Inversul operatiei de inserare

Se aduce nodul n pozitia unei frunze pentru a fi sters, utilizand


rotatii
I

se alege fiul cu prioritatea mai mica si se roteste

Complexitate: in cazul mediu O(log n); in cazul cel mai nefavorabil,


complexitate amortizata O(log n)

Structuri de date

Curs 11

Ianuarie, 2014

29 / 32

Alte operatii
I

split: se mparte arborele n doi arbori treap, unul care sa contina


cheile mai mici decat o cheie data key , si celalalt care sa contina
cheile mai mari
I
I

I
I

se insereaza un nod ajutator x cu cheia key si prioritatea -infinit


dupa inserare, x va fi radacina arborelui (subarborii stang si drept vor fi
arborii cautati)
sterge x
complexitatea in cazul mediu: O(log n)

join: se unesc doi arbori treap, unul care contine chei mai mici decat
o cheie data key , si celalalt care contine chei mai mari
I

I
I

se creeaza un arbore cu radacina key si prioritate aleatoare, care


contine cei doi subarbori
se sterge radacina
complexitatea in cazul mediu: O(log n)

Structuri de date

Curs 11

Ianuarie, 2014

30 / 32

Continut

Arbori bicolori

Arbori splay

Treaps

Alte exemple de arbori echilibrati

Structuri de date

Curs 11

Ianuarie, 2014

31 / 32

Alte exemple de arbori echilibrati


I

arbori B (B-trees, Bayer and McCreight, 1972))


I
I

permit mai multe chei


utilizati n sisteme de fisiere si baze de date (ex: indexarea unei colectii
de date)
I

2-3 arbori (Hopcroft, 1970)


I
I

o specializare a arborilor B
fiecare nod intern este de aritate 2 sau 3; un nod de aritate 2
memoreaza o singura valoare, iar un nod de aritate 3 memoreaza doua
valori

2-3-4 arbori
I

Windows: HPFS, Mac: HFS, Linux: XFS, JFS; baze de date:


ORACLE, DB2, SQL, PostgresSQL;

fiecare nod intern este de aritate 2, 3 sau 4

liste cu acces direct (skip lists, Pugh 1989)


I

permit cautari rapide pentru o lista ordonata de elemente

Structuri de date

Curs 11

Ianuarie, 2014

32 / 32

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