Documente Academic
Documente Profesional
Documente Cultură
1 Tabele de dispersie
2 Tabele cu adresare directă
Fie U = {0, 1, .., m−1} o mulţime din universul cheilor. Cheia identifică unic
o entitate. Pentru a reprezenta o multime dinamică de tip dicţionar folosim
• insereaza
1
• cauta
• sterge
cauta(T,k)
return T[k]
insereaza(T,x)
T[cheie[x]] = x
sterge(T,x)
T[cheie[x]] = nil
Fiecare din aceste operaţii este rapidă deoarece se efectuează ı̂n O(1). Dez-
avantaje: U este foarte mare şi K este mult mai micad̆ecât U . Operaţiile
depind de numărul de elemente al multimii K, adică de |K|. În adresarea
directă un element cu cheia k este memorat in locaţia k. În cazul tabelei
de dispersie elementul cu cheia k este memorat in locaţia h(k), unde h este
funcţia de dispersie h : U → {0, ..., m − 1}, mai exact transformă U ı̂n locaţii
ale unei tabele de dispersii T [0..m − 1]. O functie de dispersie h trebuie sa fie
2
h(k)). Pot aparea coliziuni. Rezolvarea coliziunii prin inlăntuire
Prin inlănţuire punem toate elementele ce se dispersează ı̂n aceeaşi locaţie
ı̂ntr-o listă inlanţuită. Locatia j conţine un pointer către capul listei a tuturor
elementelor care dispersează ı̂n aceeaşi locaţie j.
insereaza(T,x)
insereaza x in capul listei T[h(cheie[x])]
cauta(T,x)
cauta un element cu cheia k in lista T[h(k)]
sterge(T,x)
sterge x din lista T[h(cheie[x])]
α = m/n
3
medie) funcţia de dispersie h mulţimea cheilor ce trebuie memorate ı̂n cele m
locaţii. Vom presupune că orice element se poate dispersa ı̂n oricare din cele
m locaţii cu aceeaşi probabilitate independent de locul unde s-au dispersat
celelalte elemente.
3 Funcţii de dispersie
În cele prezentate de aici ı̂n continuare are loc ipoteza dispersiei uniforme
simple. Fiecare cheie se poate dispersa cu aceeaşi probabilitate ı̂n fiecare
din cele m locaţii. O funcţie de dispersie bună satisface ipoteza dispersiei
uniforme simple. Fie P (k) = probabilitatea de a alege cheia k. Atunci avem
că
X 1
P (k) = , j = 0, ..., m − 1
h(k)=j
m
Daca s-ar cunoaşte valoarea lui P (k) atunci am putea verifica aceasta relaţie.
Exemplu: unde m = 10 si k = 0.5.
Metoda diviziunii
Metoda diviziunii este o metodă ı̂n care funcţia de dispersie este aleasă ca
fiind
h(k) = k mod n.
De exemplu dacă considerăm m = 12, atunci avem că k = 100 de unde prin
ultima evaluare avem că h(k) = 4. Valori potrivit de bune pentru m sunt
acele numere prime care sunt nu prea apropiate de puterile exacte ale lui 2.
Un exemplu de acest fel ar fi m = 701 Metoda inmultirii
Metoda ı̂nmulţirii descrisă mai sus poate fi observată uşor prin acest exemplu
4
Pe scurt dacă considerăm funcţia de dispersie
4 Adresare dechisa
Prin adresare deschisă toate elementele sunt memorate ı̂n interiorul tabelei
de dispersie. Astfel, tabela de dispersie se poate umple astfel ı̂ncât nici o
inserare nu mai este posibilă. Factorul de ı̂ncărcare nu poate depăşi valoarea
1. Secvenţa de locaţii care se examinează nu se determină folosind pointeri
ci se calculează. Pentru a analiza inserarea examinăm succesiv sau verificăm
tabela de dispersie până găsim o locaţie liberă.
inserarea(T,k)
i=0
repeat
j=h(k,i)
if T[j]=nil
then T[j]=k
else i=i+1
endif
until (i=n)
cauta(T,k)
i=0
repeat
j=h(k,i)
if T[j]=k
5
then return j
else i=i+1
endif
until (T[j]=nil) or (i=m)
return nil
Verificarea liniară
Fiind dată o alta funcţie h0 de dispersie putem construi
pentru fiecare
i = 0, ..., m − 1.
Dacă se dă cheia k prima intrare verificată este T [h0 (k)] pâna la ultima
T [m − 1] . Avem doar m secvenţe de căutari posibile. Probleme pen-
tru temă
2. Un vector de biţi este un tablou simplu care con ţine numai valorile
0 si 1. Este evident faptul că un vector de biţi de lungime m ocupă
mult mai puţin spai̧u decât un tablou de m pointeri. Descrieţi cum se
poate folosi un vector de biţi pentru a reprezenta o mulţime dinamică
având elemente distincte, fără avea date adiţionale. Operaţiile pentru
dicţionare ar trebui să funcţioneze ı̂ntr-un timp O(1).
6
Bibliografie
[1] Peter Braess, Advanced Data Structures, 2008.
[2] http://www.infoarena.ro/
[5] Thomas Cormen, Charles Lerseison, Ronald Rivest, Clifford Stein, In-
troduction to algorithms, Third edition, MIT Press 2009.