Sunteți pe pagina 1din 50

E.Kalisz - Structuri de date -- 10.

1 --
Arbori binari de cautare
Constructie arbore binar de cautare: 1, 2, 3, 4, 5, 6, 7

1
2
4
3
2 6
4

5 1 3 5 7

6 Arbore echilibrat

7
E.Kalisz - Structuri de date -- 10.2 --
Arbori binari de cautare AVL
- Pentru orice nod diferenta intre inaltimile celor 2 subarbori este < 2
- Inserarea si eliminarea pot necesita reechilibrarea arborelui; in
acest scop se utilizeaza factorul de echilibru = H(dr) H(st)

0 1
6 6
0 -1 0 -2
4 9 Inserare 7 4 9
0 0 0 0 0 -1
1 5 8 1 5 8
0
7
E.Kalisz - Structuri de date -- 10.3 --
Arbori binari de cautare echilibrati - AVL
- Pentru orice nod diferenta intre inaltimile celor 2 subarbori este < 2
- Inserarea si eliminarea pot necesita reechilibrarea arborelui; in
acest scop se utilizeaza factorul de echilibru = H(dr) H(st)

1
0
6
0 -2 Reechilibrare 0
6
0
4 9
0 0 -1 4 8
0 0 0 0
1 5 8
1 5 7 9
0
7
E.Kalisz - Structuri de date -- 10.4 --
Arbori binari de cautare echilibrati - AVL
Inserare: 14, 17, 11, 7, 53, 4

14 14

11 17 7 17

7 53 4 11 53

4
E.Kalisz - Structuri de date -- 10.5 --
Arbori binari de cautare echilibrati - AVL
Inserare 13, 12

14
14

Inserare 12 7 17
7 17

4 11 53
4 11 53

13
13

12
E.Kalisz - Structuri de date -- 10.6 --
Arbori binari de cautare echilibrati - AVL

14
14

7 17
7 17

4 11 53
4 12 53

13
11 13

12
E.Kalisz - Structuri de date -- 10.7 --
Arbori binari de cautare echilibrati - AVL

14
14

7 17
7 17 Inserare 8

4 12 53
4 12 53

11 13
11 13

8
E.Kalisz - Structuri de date -- 10.8 --
Arbori binari de cautare echilibrati - AVL

14
14

7 17
7 17

4 12 53
4 11 53

11 13
8 12

8 Rotatie dreapta
13
E.Kalisz - Structuri de date -- 10.9 --
Arbori binari de cautare echilibrati - AVL

14
14
7 17
11 17
4 11 53
7 12 53
8 12
4 8 13
13

Rotatie stanga
E.Kalisz - Structuri de date -- 10.10 --
Arbori binari de cautare echilibrati - AVL

a Inserare c > b a Reechilibrare b


1 2

b b a c
1

Inserare
a a<c<b a Reechilibrare c
1 2

b b a b
-1

c
E.Kalisz - Structuri de date -- 10.11 --
Arbori binari de cautare echilibrati - AVL

Inserare in X

k h

h h Z
X Y
E.Kalisz - Structuri de date -- 10.12 --
Arbori binari de cautare echilibrati - AVL

Inserare in X
j
k h

h+1 h
Z
Y
X
E.Kalisz - Structuri de date -- 10.13 --
Arbori binari de cautare echilibrati - AVL

Rotatie dreapta

j
k h

h+1 h Z
Y
X
E.Kalisz - Structuri de date -- 10.14 --
Arbori binari de cautare echilibrati - AVL

rotatie dreapta
j
k h
Z j
h+1 h
Y
X
k h

h+1 h Z
Y
X
E.Kalisz - Structuri de date -- 10.15 --
Arbori binari de cautare echilibrati - AVL
Rotatie dreapta
j j

k
h+1 h
hZ
k
h+1 h
h
Z
Y Y
X X

k
h+1
j
h h

X Y Z
Arbore AVL
E.Kalisz - Structuri de date -- 10.16 --
Arbori binari de cautare echilibrati - AVL

Rotatii

x Left-Rotate( T, x)
Left rotation y

y Right-Rotate( T, y)
Right rotation x

E.Kalisz - Structuri de date -- 10.17 --
Arbori binari de cautare echilibrati - AVL

Inserare in Y

k h

h h Z
X Y
E.Kalisz - Structuri de date -- 10.18 --
Arbori binari de cautare echilibrati - AVL

Inserare in Y

j
k h

h h+1 Z
X
Y
E.Kalisz - Structuri de date -- 10.19 --
Arbori binari de cautare echilibrati - AVL

Rotatie dreapta -> nu reface proprietatile arborelui

k
h j
X h+1 h

Z
Y
E.Kalisz - Structuri de date -- 10.20 --
Arbori binari de cautare echilibrati - AVL

Consideram structura subarborelui Y

j
k h

h h+1 Z
X
Y
E.Kalisz - Structuri de date -- 10.21 --
Arbori binari de cautare echilibrati - AVL

Y = nod i si subarborii V si W

j
k h

h
i h+1 Z
X h sau h-1

V W
E.Kalisz - Structuri de date -- 10.22 --
Arbori binari de cautare echilibrati - AVL

Rotatie duble: stanga - dreapta

j
k h

h
i h+1 Z
X
V W
E.Kalisz - Structuri de date -- 10.23 --
Arbori binari de cautare echilibrati - AVL
a) Rotatie stanga
j

i Z
h
j
h h+1
X

V W i
k Z
W
X V
E.Kalisz - Structuri de date -- 10.24 --
Arbori binari de cautare echilibrati - AVL

b) Rotatie dreapta
j

i
Z
k
W i
X V
k j
h h
h sau h-1

X V W Z
E.Kalisz - Structuri de date -- 10.25 --
Exemplu: Arbori AVL

Insereaza 5, 40
0
20
-1 0
1 10 30
20 0 0 0
0 0 5 25 35
10 30
0 0
25 35 1
20
-1 1
10 30
0 0 1
5 25 35
0
40
E.Kalisz - Structuri de date -- 10.26 --
Exemplu: Arbori AVL

Insereaza 45 2
1 20
-1 2
20
-1 1 10 30
10 30 0 0 2
0 0 1 5 25 35
5 25 35
1
0 40
40
0 45
E.Kalisz - Structuri de date -- 10.27 --
Exemplu: Arbori AVL

Insereaza 45 2
20
-1 2 Rotatie stanga
10 30 1
0 0 2 20
-1 1
5 25 35 10 30
1 0 0 0
40 5 25 40
0 0
0 45 35 45
E.Kalisz - Structuri de date -- 10.28 --
Exemplu: Arbori AVL
2
Inserare 34 20
Rotatie dubla 1 2
2 10 30
0 0 1
20
1 2 5 25 35
10 30 0
0 0 -1 1
34 40
5 25 40 1 0
-1 20 45
-1
45 0 0
35 10 35
0 34 0 0
5 30 40 1
0 0
0
25 34 45
E.Kalisz - Structuri de date -- 10.29 --
Arbori binari de cautare echilibrati - AVL
Inserare cu
a cresterea a Reechilibrare b
1 inaltimii Z 2

h X b h b h+2 h+1 a
X Z h+1
1

h Y Z h h h+1 h Y h
Y Z X

Eliminare cu
scaderea a Reechilibrare b
inaltimii X 2 -1
h+1 h+1
h-1 b a
X Z h
1

h h h-1 Y h
Y Z X
E.Kalisz - Structuri de date -- 10.30 --
Arbori binari de cautare echilibrati - AVL
Inserare cu
a cresterea a
1 inaltimii Y2 2

h b h b h+2
X X
-1

c Z h h+1 c h
Z
1
h-1 Y1 Y2 h-1 h-1 Y1 Y2 h

Reechilibrare
c

h+1 a b h+1
-1

h h-1 Y1 h h Z
X Y2
E.Kalisz - Structuri de date -- 10.31 --
Arbori binari de cautare echilibrati - AVL
Eliminare cu
a scaderea a
1 inaltimii X 2

h b h-1 b h+1
X X

h c Z
h h c h
Z

h-1 Y1
Y2 h-1 h-1 Y1
Y2 h-1

Reechilibrare
c
1

h a b h+1
1
h-1 h-1 h-1 h
X Y1 Y2 Z
E.Kalisz - Structuri de date -- 10.32 --
Arbori binari de cautare echilibrati - AVL
n

Y Z
Rotatie_Stanga(n)
{
p = n->dr;
n->dr = p->st;
p->st = n;
}
E.Kalisz - Structuri de date -- 10.33 --
Inserare in arbori AVL

Insereaza informatia ca o frunza (analog ca in


arborii binari de cautare)
Nodurile - de la frunza adaugata la radacina
arborelui - isi pot modifica factorul de echilibru
Se actualizeaza factorii de echilibru pe calea de la
frunza inserata la radacina
Daca se obtin factori de echilibru 2 sau -2, atunci
se reechilibreaza arborele folosind rotatii stanga /
dreapta sau rotatii duble stanga / dreapta
E.Kalisz - Structuri de date -- 10.34 --
Eliminare din arbori AVL

14 14

11 17 11 17

7 12 53 7 12

4 8 13 4 8 13
E.Kalisz - Structuri de date -- 10.35 --
Eliminare din arbori AVL

14 11

11 17
7 14

7 12
4 8 12 17

4 8 13
13
E.Kalisz - Structuri de date -- 10.36 --
Eliminare din arbori AVL

11 8

7 14 7 14

4 8 12 17 4 12 17

13 13
E.Kalisz - Structuri de date -- 10.37 --
Eliminare din arbori AVL

8
7

7 14
4 14

4 12 17
12 17

13
13
E.Kalisz - Structuri de date -- 10.38 --
Eliminare din arbori AVL

12
7

7 14
4 12

4 13 17
14

13 17
E.Kalisz - Structuri de date -- 10.39 --
Arbori de selectie (Heap)

Memoreaza elementele conform unei relatii de ordine


definite pe multimea cheilor si asigura extragerea rapida
a elementelor in ordinea dictata de aceasta relatie.
Exemple:
onorarea comenzilor in ordinea crescatoare a datei
limita prevazute pentru livrare
tratarea cererilor de acordare a unei burse in
ordinea descrescatoare a mediei generale a
solicitantilor
In literatura se folosesc si termenii de Heap (nu are
legatura cu zona de memorie destinata alocarii
dinamice), arbore partial ordonat, coada de prioritati.
E.Kalisz - Structuri de date -- 10.40 --
Arbori de selectie (Heap)

Caracteristici:
- este arbore binar de inaltime minima (log n)
- inserarea se realizeaza pe principiul parcurgerii in latime
ultimul nivel este completat de la stanga spre dreapta
- pentru orice pereche de noduri tata-fiu cheile respecta
relatia de ordine prestabilita (cheia nodului tata este
predecesoare sau echivalenta cu cele ale nodurilor fiu)

t Rel(t,x) <= 0
Rel(t,y) <= 0
x y
E.Kalisz - Structuri de date -- 10.41 --
Exemplu: heap (min-heap)

14 45

78 18 47 53

83 91 81 77 84 99 64
E.Kalisz - Structuri de date -- 10.42 --
Inserare in heap (min-heap)
Inserare 3
R(5,3) > 0 5 3
3
R(9,3) > 0 9 8 5 8

11 3 11 9
3 3
Inserare 13
3 3

5 R(8,13) < 0 8 5 8

11 9 13 11 9 13
3 3 3 3
E.Kalisz - Structuri de date -- 10.43 --
Inserare in heap (min-heap)
Inserare 2
3 R(3,2) > 0

5 8 R(8,2) > 0

11 9 13 2
3 3

5 3

11 9 13 8
3 3
E.Kalisz - Structuri de date -- 10.44 --
Algoritm inserare in heap

Fie x informatia ce trebuie inserata in arborele A


{ adauga in A nod Nou, fara informatie;
D = Nou;
cat timp (D != Radacina(A) si
Rel(cheie(Tata(D)), cheie(x)) > 0)
{ transfer info(Tata(D)) in D;
D = Tata(D);
}
transfera x in nodul D;
}
E.Kalisz - Structuri de date -- 10.45 --
Extragere din heap

Se extrage informatia din radacina


Se elimina nodul din extrema dreapta a ultimului nivel.
Informatia din nodul eliminat ramane in radacina sau,
daca este cazul, se propaga spre nivelurile inferioare,
pentru a pastra organizarea de arbore de selectie.
E.Kalisz - Structuri de date -- 10.46 --
Eliminare din heap (min-heap)
2
Extras = 2
5 3 Temp = 8

11 9 13 8
3 3
8

5 3 R(3, 8) < 0

11 9 13
3 3
3

5 8

11 9 13
3 3
E.Kalisz - Structuri de date -- 10.47 --
Eliminare din heap (min-heap)
3
Extras = 3
5 8 Temp = 13

11 9 13
3 3 13

R(5,13)<0 5 8

11 R(9,13)<0 9
3 5

9 8

11 13
3
E.Kalisz - Structuri de date -- 10.48 --
Eliminare din heap (min-heap)
5 Extras = 5 13
Temp = 13
9 8 9 8 R(8,13)<0

11 13 11
3 3 3
8 Extras = 8 11
Temp = 11
9 13 9 R(9,11)<0 13
3 3
11
3
9 Extras = 9 11 Extras = 11 13
Temp = 13 Temp = 13
11 13 13
3
E.Kalisz - Structuri de date -- 10.49 --
Algoritm eliminare din heap

{ Extras = info(radacina);
D = radacina;
T = info(ultimul_nod); info(D) = T;
elimina ultimul nod;
cat timp exista fiu_st(D)
{ s = fiu_st;
daca (exista fiu_dr(D)
&& R(cheie(s),cheie(fiu_dr))) > 0
atunci s = fiu_dr;
daca R(cheie(T),cheie(s)) <= 0 atunci iesire
altfel { interschimba info(D) cu info(s);
D = s;
}
}
intoarce Extras;
}
E.Kalisz - Structuri de date -- 10.50 --
Reprezentare heap
0 2 i

1 5 2 3 S1= S2=
2i+1 2i+2
3 11 4 9 13 5 8 6
3 3
Indice parinte(i) = (i-1) / 2
Indice Subarbore stang(i) = 2*i +1
Indice Subarbore stang(i) = 2*i +1

Pentru reprezentarea arborelui de selectie se poate


utiliza un vector.
In cazul de fata vectorul va contine:
{ 2, 5, 3, 11, 9, 13, 8 }