Sunteți pe pagina 1din 43

STRUCTURI DE DATE

Arbori echilibrati
ARBORI BINARI ECHILIBRATI
Abordari ale operatiei de echilibrare:
1. Echilibrare perfecta:
• Diferenta dintre nr. noduri SS si SD este 0, pentru fiecare
nod din arbore;
• Toate nodurile frunza sunt pe acelasi nivel;
• Orice nod de pe nivelurile intermediare are doi
descendenti (h – inaltime arbore);
23

10 27

3 18 25 29

http://www.acs.ase.ro 2
https://github.com/mpopaeu/structuri
ARBORI BINARI ECHILIBRATI

Implementare operatie:
• Metoda divide et impera;
• Parcurgere sir de chei ordonate crescator si
inserarea valorii din mijloc in arbore;
• Volum mare de calcule: operatii de inserare
si stergere, parcurgere inordine arbore,
reconstructie structura arborescenta.

http://www.acs.ase.ro 3
https://github.com/mpopaeu/structuri
ARBORI BINARI ECHILIBRATI
void echlibrareArbore(int *chei, int dim, int stanga, int dreapta, NodArbore
*&radacina){
if (dreapta>=stanga){
int mijloc=(dreapta+stanga)/2;
if (dreapta-stanga==1){
radacina =inserareArbore(radacina, chei[stanga]);
radacina = inserareArbore (radacina, chei[dreapta]);
}
else{
if (dreapta==stanga)
radacina = inserareArbore (radacina, chei[stanga]);
else{
radacina = inserareArbore (radacina, chei[mijloc]);
echlibrareArbore (chei,dim,stanga, mijloc-1, radacina);
echlibrareArbore (chei,dim, mijloc+1,dreapta, radacina);
}
}
}

• chei – vector: şirul sortat crescător al valorilor;


• dim – dimensiunea vectorului;
• stanga, dreapta – limitele intervalului curent;
• rădăcina arborelui ce va fi creat.

http://www.acs.ase.ro 4
https://github.com/mpopaeu/structuri
ARBORI BINARI ECHILIBRATI

Mentenanta unei astfel de structuri:


• Grad de complexitate foarte ridicat;
• Recrearea arborelui perfect echilibrat după
fiecare operaţie de inserare sau ştergere cu
metoda echilibrareArb;

http://www.acs.ase.ro 5
https://github.com/mpopaeu/structuri
ARBORI BINARI ECHILIBRATI
Abordari ale operatiei de echilibrare
(continuare):
2. Echilibrare imperfecta:
• Diferenta dintre nr. noduri SS si SD este
maxim 1, pentru fiecare nod din arbore;
• Crearea structurii: utilizarea metodei
prezentate anterior, pornind de la un set de
valori sortate crescător sau descrescător;

http://www.acs.ase.ro 6
https://github.com/mpopaeu/structuri
ARBORI BINARI ECHILIBRATI
Mentenanta unei astfel de structuri:
• Grad de complexitate acceptabil;
• Metode specifice unor structuri
arborescente echilibrate particulare: AVL,
arbori B, arbori Rosu & Negru;
• Efort de prelucrare mai mic decât volumul
operaţiilor asociat reconstrucţiei arborelui
prin metoda echilibrareArb.

http://www.acs.ase.ro 7
https://github.com/mpopaeu/structuri
ARBORI BINARI ECHILIBRATI
Minimizarea efortului de cautare:
• Aranjare echilibrata a valorilor pe ambii
subarbori ai fiecărui nod.
23
10

10 27

3 23
3 18

2 18 27
2

23 – 10 – 3 – 2, 4 comparatii 10 – 3 – 2, 3 comparatii
http://www.acs.ase.ro 8
https://github.com/mpopaeu/structuri
ARBORI AVL
Caracteristici:
• Definit de G.M. Adelson-Velskii şi E.M.
Landis;
• Arbore binar de căutare echilibrat pe
înălţime;
• Arbore binar de căutare este AVL: gradul de
echilibru al fiecărui nod ia valori în mulţimea
{-1,0,1}.

http://www.acs.ase.ro 9
https://github.com/mpopaeu/structuri
ARBORI AVL
Gradul de echilibru al unui nod (GE):
GE = H(SD) – H(SS)

H() – funcţia de calcul a înălţimii unei structuri


arborescente;
H(rad) = 1 + max (H(subarbore drept), H(subarbore stâng))

http://www.acs.ase.ro 10
https://github.com/mpopaeu/structuri
ARBORI AVL
• Pentru GE = 0, nodul este echilibrat,
• Pentru GE=1 si GE=-1, nodul descrie un
dezechilibru la dreapta, respectiv la stânga;
situatii acceptate: pentru un număr par de valori
este imposibil sa se definească un arbore binar de
căutare în care toate nodurile sunt perfect
echilibrate.
10 GE = 0

GE = -1 GE = 0

3 23

GE = 0 GE = 0 GE = 0

2 18 27
http://www.acs.ase.ro 11
https://github.com/mpopaeu/structuri
ARBORI AVL
Mentenanta structura arbore AVL:
• Verificarea gradului de echilibru, pentru fiecare
nod în parte;
• Inserare/ştergere afectează structura arborelui şi
conduc la situaţii de dezechilibru;
• Situaţiile de dezechilibru puternic: identificate prin
indicatorul GE care ia valori în mulţimea
{-2,2}.

http://www.acs.ase.ro 12
https://github.com/mpopaeu/structuri
ARBORI AVL
Reechilibrarea arborelui binar de căutare şi
păstrarea caracteristicilor aferente arborilor
AVL:
• rotire simpla la stânga;
• rotire simpla la dreapta;
• dubla rotire la stânga;
• dubla rotire la dreapta.

http://www.acs.ase.ro 13
https://github.com/mpopaeu/structuri
ARBORI AVL
Operatia de echilibrare:
• Inserare: un arbore AVL dezechilibrat va fi
reechilibrat printr-o singură rotaţie;
• Stergere: mult mai complexă, necesitând
minim o rotaţie.

Metoda adecvata de reechilibrare: analiza


gradului de echilibru a nodurilor aflate pe
drumul de la rădăcina arborelui la locaţia
unde a fost inserat/şters un nod.
http://www.acs.ase.ro 14
https://github.com/mpopaeu/structuri
ARBORI AVL
Arbore binar AVL dezechilibrat dupa inserare nod cu
valoare cheie = 1
10 GE = -1

GE = -2 GE = 0

3 23

GE = -1 GE = 0 GE = 0

2 18 27

GE =0

http://www.acs.ase.ro 15
https://github.com/mpopaeu/structuri
ARBORI AVL
Aplicare metoda de reechilibrare:
• Se identifica un nod (pivot) în care se
realizează rotirea subarborelui – abordare
bottom-up pornind de la locatia nodului
inserat/sters;
• Reechilibrarea: cat mai aproape de locatia
care a generat dezechilibrul;
• Identificare operatie de rotatie: gradul de
echilibru al nodului pivot si fiu al pivotului
pe directia dezechilibrului.
http://www.acs.ase.ro 16
https://github.com/mpopaeu/structuri
ARBORI AVL
Nodul pivot (cheia 3), are GE = -2: dezechilibru la stânga.
Nodul fiu stânga (cheia 2), are dezechilibru la stânga.
Reechilibrarea se realizează prin operaţia de rotire simplă la
dreapta.
? ?

GE = -2
GE = 0
NOD PIVOT 3 2

GE = -1 GE = 0

NOD FIU PE 2 X X - Subarbore drept Z 3


DIRECTIA pivot
DEZECHILIBRULUI

Z Y Y X

Y - Subarbore stang
fiu dreapta pivot

http://www.acs.ase.ro 17
https://github.com/mpopaeu/structuri
ARBORI AVL

? ?

NOD PIVOT

GE = 0
3 2
GE = H1 – (H1 + 2) = -2
GE = 0

2 3
X Z
H1 H1+1 H1+1
GE = H1 – (H1 + 1) = -1

H1+2
Z Y Y X
H1+1 H1 H1
H1

Procesul de rotire simplă la dreapta

http://www.acs.ase.ro 18
https://github.com/mpopaeu/structuri
ARBORI AVL

10 GE = 0

GE = 0 GE = 0

2 23

GE = 0 GE = 0

1 3 18 27

GE =0 GE = 0
Arbore AVL reechilibrat

http://www.acs.ase.ro 19
https://github.com/mpopaeu/structuri
ARBORI AVL
Nodul pivot (cheia 23), are GE = 2: dezechilibru la dreapta.
Nodul fiu stânga (cheia 27), are dezechilibru la dreapta.
Reechilibrarea se realizează prin operaţia de rotire simplă la
stanga.
10 GE = 1

GE = -1
GE = 2
2 23

GE =0 GE = 1

1 27

GE = 0

30

http://www.acs.ase.ro 20
https://github.com/mpopaeu/structuri
ARBORI AVL
? ?

GE = 2
NOD PIVOT GE = 0
23 27

GE = 1 GE = 0
X - Subarbore stâng
pivot NOD FIU PE
X 27 DIRECTIA 23 Z
DEZECHILIBRULUI

Y Z X Y

Y - Subarbore stang
fiu stânga pivot

Procesul de rotire simplă la stânga

http://www.acs.ase.ro 21
https://github.com/mpopaeu/structuri
ARBORI AVL

10 GE = 0

GE = -1
GE = 0
2 27

GE =0 GE = 0 GE = 0

1 23 30

Arbore AVL reechilibrat

http://www.acs.ase.ro 22
https://github.com/mpopaeu/structuri
ARBORI AVL
Se inserează în arborele AVL anterior
elementele cu valorile 16, 24, 26. Structura
arborescentă obţinută este:
10 GE = 2

GE = -1
GE = -2
2 27

GE =0 GE = 1 GE = 0

1 23 30
GE = 0 Arbore AVL dezechilibrat
GE = 1
16 24
GE = 0

26
http://www.acs.ase.ro 23
https://github.com/mpopaeu/structuri
ARBORI AVL
• Ultima operatie: inserare nod 26;
• Analiza drumului de la nodul 26 rădăcină
conduce la identificarea pivotului, nodul 27;
• Nodul 27: puternic dezechilibrat la stânga,
nodul fiu, nodul 23, este dezechilibrat slab
pe direcţia opusă;

http://www.acs.ase.ro 24
https://github.com/mpopaeu/structuri
ARBORI AVL
Simulare rotire simplă la dreapta aplicată
pivotului
10 GE = 2

GE = -1
GE = 2
2 23 Arbore AVL dezechilibrat
GE =0 GE = 0 GE = -1

1 16 27
GE = 1

24 30

GE = 0
GE = 0 26

http://www.acs.ase.ro 25
https://github.com/mpopaeu/structuri
ARBORI AVL
Arborele AVL obtinut:
• Este dezechilibrat, dar în sens opus;
• Reechilibrarea: tot cu o rotire simplă, dar în
sens opus: va conduce la obţinerea ipotezei
iniţiale;
• Solutia este ineficienta.

http://www.acs.ase.ro 26
https://github.com/mpopaeu/structuri
ARBORI AVL
Soluţia eficientă:
• Aplicarea unei rotiri duble: constă în două
rotiri simple;
• Prima rotire: scop de a rearanja structura
arborescentă astfel încât direcţiile
dezechilibrului nodului pivot şi a fiului
acestuia să aibă acelaşi sens;
• A doua rotire are ca obiectiv reechilibrarea
arborelui;

http://www.acs.ase.ro 27
https://github.com/mpopaeu/structuri
ARBORI AVL
Soluţia eficientă (continuare):
• Cele două rotaţii sunt aplicate unor noduri
diferite;
• Prima rotaţie: nodului fiu al nodului pivot, pe
direcţia dezechilibrului;
• A două rotire: nodului pivot şi are sens opus
dezechilibrului.

http://www.acs.ase.ro 28
https://github.com/mpopaeu/structuri
ARBORI AVL
Pivotul este nodul 27, puternic dezechilibrat la
stânga.
Etape pentru a reechilibra arborele:
• Se analizează nodul fiu al nodului pivot pe
direcţia dezechilibrului, nodul 23 şi este slab
dezechilibrat la dreapta;
• Reechilibrare printr-o dublă rotaţie (pivotul
şi nodul fiu sunt dezechilibrate pe direcţii
diferite);

http://www.acs.ase.ro 29
https://github.com/mpopaeu/structuri
ARBORI AVL

Etape pentru a reechilibra arborele (cont.):


• Prima rotaţie se aplică nodului fiu; are sens identic
cu dezechilibrul nodului pivot; redefineşte situaţia
pentru aplicarea unei rotaţii simple
• A doua rotaţie se aplică nodului pivot şi are sens
opus dezechilibrului

http://www.acs.ase.ro 30
https://github.com/mpopaeu/structuri
ARBORI AVL
10 GE = 2 10 GE = 2

GE = -1 GE = -1
GE = -2 GE = -2
2 27 NOD PIVOT 2 27 NOD PIVOT

GE =0 GE = 1 GE =0 GE = -1 GE = 0
NOD FIU
1 23 30 1 24 30
GE = 0 GE = 1 GE = 0 GE = -1 GE = 0

16 24 23 26
GE = 0

26 GE = 0
A) ROTATIE SIMPLA LA STANGA 16 B) ROTATIE SIMPLA LA DREAPTA

10 GE = 1

GE = -1
GE = 0
2 24

GE =0 GE = -1 GE = 0

1 23 27
GE = 0 GE = 0 GE = 0
16 26 30

C) ARBORE REECHILIBRAT

http://www.acs.ase.ro 31
https://github.com/mpopaeu/structuri
ARBORI AVL
Reechilibrare arbore AVL prin stergerea unei
chei 16 si inserarea cheii 25.
10 GE = 2

GE = -1
GE = 2
2 24
Arbore AVL dezechilibrat
GE =0 GE = -1 GE = -1

1 23 27
GE = -1 GE = 0
26 30

GE = 0
25

http://www.acs.ase.ro 32
https://github.com/mpopaeu/structuri
ARBORI AVL
Există două noduri, 24 şi 10, ce descriu
dezechilibre puternice, GE = 2, la dreapta.

Analiza drumului de la noul nod inserat la


rădăcină arborelui, stabileşte ca fiind pivot
nodul cu valoarea 24.

http://www.acs.ase.ro 33
https://github.com/mpopaeu/structuri
ARBORI AVL
Reechilibrarea presupune:
• Rotaţie simpla la dreapta în nodul fiu al
pivotului 27; dacă pivotul are ambii fii atunci
rotaţia se face in direcţia dezechilibrului;
• Rotaţie simpla la stânga, în sens opus
dezechilibrului, în nodul pivot;

http://www.acs.ase.ro 34
https://github.com/mpopaeu/structuri
ARBORI AVL
10 GE = 2 10 GE = 2

GE = -1 GE = -1
NOD PIVOT GE = 2 NOD PIVOT GE = 2
2 24 2 24

GE =0 GE = -1 GE = -1 GE =0 GE = -1 GE = 1
NOD FIU NOD FIU
1 23 27 1 23 26
GE = -1 GE = 0 GE = 0 GE = 1
26 30 25 27

GE = 0
25 B) ROTATIE SIMPLA LA STANGA GE = 0 30

A) ROTATIE SIMPLA LA DREAPTA

10 GE = 1

GE = -1
GE = 0
2 26
GE =0 GE = 0 GE = 1

1 24 27
GE = 0 GE = 0
23 25
GE = 0 30

C) ARBORE REECHILIBRAT

http://www.acs.ase.ro 35
https://github.com/mpopaeu/structuri
ARBORI AVL
Situaţii dezechilibru arbori AVL (operatia de inserare)
Grad Nod fiu Grad echilibru nod Rotire
fiu (pe directia
echilibru analizat dezechilibrului dat
nod pivot de pivot)
+2 dreapta +1 / 0 Simplă la stânga
+2 dreapta -1 Dublă la stânga: rotire simplă
la dreapta în fiul din dreapta
al pivotului; rotire simplă la
stânga în pivot.

-2 stânga -1 / 0 Simplă la dreapta


-2 stânga +1 Dublă la dreapta: rotire
simplă la stânga în fiul din
stânga al pivotului; rotire
simplă la dreapta în pivot.

http://www.acs.ase.ro 36
https://github.com/mpopaeu/structuri
ARBORI AVL
Din arborele AVL de mai jos, se şterge nodul
50.
47 35
stiva GE = -1
35

22 47 GE = -1
GE = 1

16 31 37 50
GE = -1 GE = -1 GE = 1
GE =0

9 27 32 42
GE =0 GE =0 GE =0
GE = -1
29
GE =0

http://www.acs.ase.ro 37
https://github.com/mpopaeu/structuri
ARBORI AVL
35
35 stiva GE = -1 35
GE = -2

22 47 GE = -2
GE = 1 22 42 GE =0
GE = 1
16 31 37
GE = -1 GE = -1 GE = 1 16 31
GE = -1 GE = -1 37 47
9 27 32 42 GE = 0 GE =0
GE =0 GE =0 GE =0
9 27 32
GE = -1 GE =0
29 GE =0 GE = -1
GE =0 29
GE =0

Structură arborescenta de tip AVL dezechilibrată prin


aplicarea unei rotaţii duble (1. stanga in 37, 2. dreapta
in 42)

http://www.acs.ase.ro 38
https://github.com/mpopaeu/structuri
ARBORI AVL
Printr-o rotaţie la dreapta în nodul cu valoarea
35 considerat pivot, arborele AVL este
reechilibrat.
Deoarece stiva a fost golită, operaţie de
ştergere se consideră încheiată
35 GE =0
31
GE = -2

GE =0
22 35 GE = -1
(2)
22 42 GE =0 GE =0
GE = 1
16 27 32 42 GE =0
16 (1) 31 37 47
GE = -1 GE = -1 GE = -1 GE = 1

GE = 0 GE =0
9 27 32 9 29 37 47
GE =0
GE =0 GE = -1 GE =0 GE =0 GE =0 GE = 0
29
GE =0

Structură arborescenta de tip AVL


http://www.acs.ase.ro 39
https://github.com/mpopaeu/structuri
ARBORI AVL
Situaţii de dezechilibru diferite de ipotezele analizate
la operaţia de inserare
17 17 GE = 2
20
GE = 1 GE = -1

16 20 20 17 23
GE = 0 GE = 0 GE = -1 GE = 0
GE =0

19 23 19 23 19
GE =0 GE =0 GE =0 GE =0 GE =0

Ştergere din structură arborescenta de tip AVL

Pivotul are un grad de echilibru +2, iar nodul fiu de pe direcţia


dezechilibrului are un echilibru 0.
Soluţia este data de o rotaţie simplă în pivot la stânga.

http://www.acs.ase.ro 40
https://github.com/mpopaeu/structuri
ARBORI ROSU&NEGRU
Caracteristici:
• Tipologie de arbori binari de căutare
echilibraţi;
• Definiţi de Rudolf Bayer în 1972 sub forma
de arbori simetrici;
• Nodurile sunt plasate în mod simetric în
subarborii stânga sau dreapta.

http://www.acs.ase.ro 41
https://github.com/mpopaeu/structuri
ARBORI ROSU&NEGRU
Factorul cel mai important este dat de culoarea
fiecărui nod:
• Fiecare nod are una dintre cele două culori, roşu
sau negru;
• Nodul rădăcină este întotdeauna negru;
• Ambele noduri fiu ale unui nod părinte roşu sunt
negre; un nod roşu nu poate avea ca părinte decât
un nod negru;
• toate drumurile de la rădăcină la oricare din
nodurile frunză conţin acelaşi număr de noduri
negre.

http://www.acs.ase.ro 42
https://github.com/mpopaeu/structuri
ARBORI ROSU&NEGRU

15

3 23

2 18 27

Structură arborescenta de tip Roşu & Negru

http://www.acs.ase.ro 43
https://github.com/mpopaeu/structuri

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