Documente Academic
Documente Profesional
Documente Cultură
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
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
k
h j
X h+1 h
Z
Y
E.Kalisz - Structuri de date -- 10.20 --
Arbori binari de cautare echilibrati - AVL
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
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
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)
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
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