Sunteți pe pagina 1din 28

Coada cu prioriti.

Colecii de mulimi disjuncte


SD 2015/2016

Structuri de date

Coninut
Coada cu prioriti i max-heap.
Colecii de mulimi disjuncte i
union-find.

Structuri de date

Coada cu prioriti - exemple


Pasagerii unui avion
Prioriti:
Clasa buisness
Persoane clatorind cu copii / cu mobilitate
redus
Ceilali pasageri
Avioane care se pregtesc de aterizare
Prioriti:
Urgene
Nivelul carburantului
Distana fa de aeroport
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

Coada cu prioriti: operaii


citeste
intrare: o coad cu prioriti C
ieire: atomul din C cu cheia cea mai mare

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;

Ultimul nod al unui maxHeap este nodul cel


mai la dreapta pe nivelul h.
Structuri de date

maxHeap - exemplu
12

9
1

7
5

Structuri de date

8
3

nlimea unui

maxHeap

Teorem: Un maxHeap care conine n chei are


nlimea O(log n).
Demonstraie:
Utilizm proprietatea de arbore binar complet.
Fie h nlimea unui maxHeap cu n chei.
i
Avem 2 chei de adncime i, pentru i = 0, ..., h-1 i cel
puin o cheie de adncime h: n 1 + 2 + 4 + ... + 2 h 1 + 1 = 2 h
Obinem: h log n

Structuri de date

maxHeap: eliminarea
Se elimin rdcina heap-ului
(corespunde elementului cel mai prioritar).

Algoritmul are trei etape:


Se nlocuiete cheia rdcinii cu cheia
ultimului nod;
Se terge ultimul nod;
Se reface proprietatea de maxHeap.
Structuri de date

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

maxHeap: timp de execuie


Operaiile inserare/eliminare necesit timpul
O(h) = O(log n)
0

Structuri de date

16

Colecii de mulimi disjuncte

Aplicaii:
Reele de calculatoare
Pagini web (Internet)
Pixeli ntr-o imagine
digital

Structuri de date

17

Colecii de mulimi disjuncte:


tip de dat abstract
obiecte: colecii de submulimi disjuncte
(partiii) ale unei mulimi univers
operaii:
find()
intrare: o colecie C, un element i din univers
ieire: submulimea din C la care aparine i

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

Colecii de mulimi disjuncte:


union-find
structura union-find
mulimea univers = {0,1, ..., n-1}
submulime = arbore
colecie = pdure
reprezentarea unei pduri prin legtura
printe

Structuri de date

19

Colecii de mulimi disjuncte:


union-find
Exemplu:
n=10, {1,2,6},{3}, {0,4,5,8}, {7,9}

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

Colecii de mulimi disjuncte:


union-find
procedure singleton(C, i)
begin
C.parinte[i] -1
end

Structuri de date

21

Colecii de mulimi disjuncte:


union-find
function find(C, i)
begin
temp i
while (C.parinte[temp] >= 0) do
temp C.parinte[temp]
return temp
end
Structuri de date

22

Colecii de mulimi disjuncte:


union-find
procedure union(C, i, j)
begin
ri find(i)
rj find(j)
if (ri != rj) then
C.parinte[rj] ri
end
Structuri de date

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

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