Documente Academic
Documente Profesional
Documente Cultură
Structuri de date
Coninut
Coada cu prioriti i max-heap.
Colecii de mulimi disjuncte i
union-find.
Structuri de date
Coada cu prioriti:
tip de dat abstract
Obiecte: structuri de date n care
elementele sunt numite atomi; orice
atom are un cmp-cheie numit
prioritate.
Elementele sunt memorate n funcie
de prioritate i nu de poziia lor.
Structuri de date
elimina
intrare: o coad cu prioriti C
ieire: C din care s-a eliminat atomul cu
cheia cea mai mare
insereaza
intrare: o coad cu prioriti C i un atom at
ieire: C la care s-a adugat at
Structuri de date
maxHeap
Implementeaz coada cu prioriti.
Arbori binari cu proprietile:
Nodurile memoreaz cmpurile cheie;
Pentru orice nod, cheia din acel nod este mai
mare dect sau egal cu cheile din nodurile
fiu;
Arborele este complet. Fie h nlimea
arborelui. Atunci,
Pentru i = 0, ..., h-1, sunt 2 i noduri cu adncimea i
Pe nivelul h-1, nodurile interne sunt situate la
stnga nodurilor externe;
maxHeap - exemplu
12
9
1
7
5
Structuri de date
8
3
nlimea unui
maxHeap
Structuri de date
maxHeap: eliminarea
Se elimin rdcina heap-ului
(corespunde elementului cel mai prioritar).
maxHeap: eliminarea
12
9
1
7
5
Structuri de date
8
3
10
maxHeap: inserarea
Se insereaz noua cheie ntr-un nou
nod.
Algoritmul are trei etape:
Se adaug noul nod ca cel mai din
dreapta pe ultimul nivel;
Se insereaz noua cheie n acest nod;
Se reface proprietatea de maxHeap.
Structuri de date
11
maxHeap: inserarea
10
12
9
1
7
5
Structuri de date
8
3
12
maxHeap:implementarea cu tablouri
(k) 1 k n-1 a[k] a[(k-1)/2]
12 9
x a[i]
0 1 2 3 4 5 6 7 8
12 0
9
7
5
Structuri de date
8
1
a[2*i+1]
a[2*i+2]
8
13
maxHeap: inserare
procedure insereaza(a, n, cheie)
begin
n n+1
a[n-1] cheie
j n-1
heap false
while ((j > 0) and not heap) do
k [(j-1)/2]
if (a[j] > a[k])
then swap(a[j], a[k])
j k
else heap true
end
Structuri de date
14
maxHeap - elimina
procedure elimina(a, n)
begin
a[0] a[n-1]
n n-1
j 0
heap false
while ((2*j+1 < n) and not heap) do
k 2*j+1
if ((k < n-1) and (a[k] < a[k+1]))
then k k+1
if (a[j] < a[k])
then swap(a[j], a[k])
j k
else heap true
end
Structuri de date
15
Structuri de date
16
Aplicaii:
Reele de calculatoare
Pagini web (Internet)
Pixeli ntr-o imagine
digital
Structuri de date
17
union()
intrare: o colecie C, dou elemente i i j din univers
ieire: C in care componentele lui i i resp. j sunt reunite
singleton()
intrare: o colecie C, un element i din univers
ieire: C la care componenta lui i are pe i ca unic
element
Structuri de date
18
Structuri de date
19
6
1
4
parinte
Structuri de date
5
0
6
1
6 -1 8 -1 -1 9
2 3 4 5 6 7
5 -1
8 9
20
Structuri de date
21
22
23
Structur union-find
ponderat
Soluie la problema arborilor
dezechilibrai.
Mecanism:
Memorarea numrului de vrfuri din
arbore (cu semn negativ).
Aplatizarea arborilor.
Structuri de date
24
Structur union-find
ponderat
Exemplu:
0
7
parinte
Structuri de date
-5 -1 0
0 1 2
0 -4 4
3 4 5
0
6
2
7
4
8
4
9
25
Aplatizarea arborilor
find(9)
Structuri de date
26
Structur union-find
ponderat
procedure union(C, i, j)
begin
ri find(i); rj find(j)
while (C.parinte[i] >= 0) do
temp i; i C.parinte[i]; C.parinte[temp]
ri
while (C.parinte[j] >= 0) do
temp j; j C.parinte[j]; C.parinte[temp]
rj
if (C.parinte[ri] > C.parinte[rj])
then C.parinte[rj] C.parinte[ri]+C.parinte[rj]
C.parinte[ri] rj
else C.parinte[ri] C.parinte[ri]+C.parinte[rj]
C.parinte[rj] ri
end
Structuri de date
27
Structur union-find
ponderat
Teorem: Pornind de la o colecie
vid, orice secven de M operaii
union i find asupra a N elemente
are complexitatea O(N+M lg*N).
lg*N = numrul de logaritmri pn se
obine 1.
Structuri de date
28