Tabele de dispersiesd/curs/curs-11.pdf · ie hash bun a distribuie cheile uniform ^ n locat, iile...
Transcript of Tabele de dispersiesd/curs/curs-11.pdf · ie hash bun a distribuie cheile uniform ^ n locat, iile...
Tabele de dispersie
SD 2019/2020
Cont, inut
Tabele cu adresare directa
Tabele de dispersie
Dispersie externa
Functii de dispersie
Dispersie interna
FII, UAIC Curs 11 SD 2019/2020 2 / 29
Tabele de simboluri
I Tabela de simboluri S cu n ınregistrari;
I Fiecare ınregistrare are asociata o cheie (unica);
I Operat, ii: cauta(S , k), insereaza(S , x), sterge(S , x);
I Cum poate fi organizata structura de date S?
FII, UAIC Curs 11 SD 2019/2020 3 / 29
Tabela cu adresare directa
I U = {0, 1, ...,m − 1} mult, imea univers a cheilor;
I Un tablou T [0..m − 1]:
T [k] =
{x daca x ∈ S s, i x .cheie = kNULL altfel.
I Fiecare pozit, ie (slot) din tablou corespunde unei chei din universul U.
I Daca |S | = n, atunci n ≤ m.
FII, UAIC Curs 11 SD 2019/2020 4 / 29
Tabela cu adresare directa - Operat, ii
I Operat, ii
Function cauta(T , k)begin
return T [k]end
Procedure insereaza(T , x)begin
T [x .cheie] = xend
Procedure sterge(T , x)begin
T [x .cheie] = NULLend
I Complexitatea timp a operat, iilor: Θ(1)
FII, UAIC Curs 11 SD 2019/2020 5 / 29
Tabela cu adresare directa
I Spat, iul de memorare: Θ(|U|).
I Probleme:
I cheile pot sa nu fie numere ıntregi;
I domeniul de valori al cheilor este foarte mare:
I numere pe 64 de bit, i (18.446.744.073.709.551.616 chei diferite)I s, iruri de caractere;
I mult, imea de chei memorate este foarte mica relativ la U.
I Solut, ie: tabela de dispersieI o generalizare a not, iunii de tabela cu adresare directa;
I o structura de date eficienta pentru implementarea dict, ionarelor.
FII, UAIC Curs 11 SD 2019/2020 6 / 29
Cont, inut
Tabele cu adresare directa
Tabele de dispersie
Dispersie externa
Functii de dispersie
Dispersie interna
FII, UAIC Curs 11 SD 2019/2020 7 / 29
Tabela de dispersie
I Utilizeaza o funct, ie de dispersie (hash) h pentru a asocia cheilor dinuniversul U o valoare din mult, imea {0, 1, · · · ,m − 1}.
I Un element cu cheia k are asociata pozit, ia h(k) ın tabela T .
I Funct, ia de dispersie reduce domeniul de valori a indicilor s, i implicitdimensiunea vectorului memorat.
I Coliziune: ∃ x1, x2 ∈ S astfel ıncat h(x1.cheie) = h(x2.cheie)
FII, UAIC Curs 11 SD 2019/2020 8 / 29
Cont, inut
Tabele cu adresare directa
Tabele de dispersie
Dispersie externa
Functii de dispersie
Dispersie interna
FII, UAIC Curs 11 SD 2019/2020 9 / 29
Rezolvarea coliziunilor prin ınlant,uire (dispersie externa)
I Inregistrarile care au asociate acelas, i slot vor fi memorate ıntr-o listaliniara. T devine tablou de pointeri.
I Solut, ie simpla, dar necesita spat, iu suplimentar de memorie.
I Cazul cel mai nefavorabil: toate cheile au asociate acelas, i slotI timpul de acces: Θ(n).
FII, UAIC Curs 11 SD 2019/2020 10 / 29
Dispersie externa – Operat, ii
Function cauta(T , k)begin
cauta elementul cu cheia k ın lista T [h(k)]end
Procedure insereaza(T , x)begin
insereaza x la ınceputul listei T [h(x .cheie)]end
Procedure sterge(T , x)begin
s, terge x din lista T [h(x .cheie)]end
FII, UAIC Curs 11 SD 2019/2020 11 / 29
Dispersie externa – analiza complexitat, ii
I Cautare:Complexitatea ın cazul cel mai nefavorabil depinde de lungimea listei.
I Inserare:Complexitatea ın cazul cel mai nefavorabil: O(1).
I S, tergere:O(1) daca avem liste liniare dublu ınlant,uite; daca lucram cu listeliniare simplu ınlant,uite, trebuie ıntai sa cautam x s, i sa ret, inempredecesorul acestuia pentru a putea reface legatura.
FII, UAIC Curs 11 SD 2019/2020 12 / 29
Dispersie externa – analiza complexitat, ii ın cazul mediu
I Ipoteza dispersiei uniforme simple: fiecare cheie k ∈ U are oprobabilitate egala de a fi memorata ın oricare locat, ie din tabela T s, iindependent de locat, iile altor chei.
I Factorul de ıncarcare al tabelei T este
α = n/m,
unde n este numarul de chei (|S |), iar m numarul de locat, ii(dimensiunea tabloului T ).
I Timpul de calcul al funct, iei de dispersie este Θ(1).
FII, UAIC Curs 11 SD 2019/2020 13 / 29
Dispersie externa – analiza complexitat, ii ın cazul mediu
Teorema:Considerand o tabela de dispersie ın care coliziunile sunt rezolvate prinınlant,uire, ın ipoteza dispersiei uniforme simple, o cautare fara succes arecomplexitatea timp ın cazul mediu Θ(1 + α).
Teorema:Intr-o tabela de dispersie ın care coliziunile sunt rezolvate prin ınlant,uire,ın ipoteza dispersiei uniforme simple, o cautare cu succes arecomplexitatea timp ın cazul mediu Θ(1 + α).
Corolar:Daca numarul de sloturi este cel put, in proport, ional cu numarul deelemente (n = O(m) sau, echivalent, α = O(1)), atunci operat, ia decautare are complexitatea, ın medie, O(1).
FII, UAIC Curs 11 SD 2019/2020 14 / 29
Cont, inut
Tabele cu adresare directa
Tabele de dispersie
Dispersie externa
Functii de dispersie
Dispersie interna
FII, UAIC Curs 11 SD 2019/2020 15 / 29
Funct, ia de dispersie
I Determinista: pentru o cheie k , funct, ia trebuie sa furnizezeıntotdeauna aceas, i valoare h(k).
I Aleatoare: vizeaza minimizarea coliziunilor.
I O funct, ie hash buna distribuie cheile uniform ın locat, iile tabelei.
I Ipoteza dispersiei uniforme simple este dificil de garantat, dar existatehnici euristice care funct, ioneaza bine ın practica (atat timp catdeficient,ele acestora pot fi evitate).
FII, UAIC Curs 11 SD 2019/2020 16 / 29
Funct, ii de dispersie – Metoda diviziunii
h(k) = k mod m
I Presupunem ca toate cheile sunt numere naturale.I daca cheile nu sunt numere naturale, atunci trebuie gasita o modalitate
de a le interpreta ca numere naturale;I Exemplu: presupunem un identificator de forma (112, 116); ın baza
128, acesta devine (112× 128) + 116 = 14452.
I Nu se alege pentru m o valoare care are un divizor mic d .Preponderent,a cheilor congruente modulo d poate afecta ın modnegativ uniformitatea.
I Daca m = 2r , atunci valoarea funct, iei depinde doar de ultimii r bit, iiai lui k .
I Exemplu: k = 1011000111011010 s, i r = 6 7→ h(k) = 011010.
I Se alege m un numar prim care nu este apropiat de o putere a lui 2sau 10.
FII, UAIC Curs 11 SD 2019/2020 17 / 29
Funct, ii de dispersie – Metoda ınmult, irii
h(k) = bm(kA− bkAc)c
I A ∈ (0, 1) este o constanta.
I Valoarea lui m nu este critica (de obicei o putere a lui 2).
h(k) = (kA mod 2w )rsh(w − r)
I m = 2r , (mas, ina ın care cuvintele sunt pe w–bit, i).
I A este un numar impar din intervalul (2w−1, 2w ).
I rsh este operatorul de deplasare la dreapta pe biti.
FII, UAIC Curs 11 SD 2019/2020 18 / 29
Funct, ii de dispersie – Metoda ınmult, irii
I Exemplu: m = 23 s, i cuvinte pe w = 7 bit, i.
I Nu se alege A prea aproape de 2w−1 sau 2w .
I Knuth: A = (√
5− 1)/2.
I Inmult, irea modulo 2w este mai rapida ın comparat, ie cu ımpart, irea;operatorul rsh este rapid.
FII, UAIC Curs 11 SD 2019/2020 19 / 29
Funct, ii de dispersie – Dispersia universala
h(k) = [(ak + b) mod p] mod m
I p numar prim cu p > |U|;I a, b numere aleatoare din {0, ..., p − 1}.
I k1 6= k2, Pra,b{h(k1) = h(k2)} = 1/m.
FII, UAIC Curs 11 SD 2019/2020 20 / 29
Cont, inut
Tabele cu adresare directa
Tabele de dispersie
Dispersie externa
Functii de dispersie
Dispersie interna
FII, UAIC Curs 11 SD 2019/2020 21 / 29
Rezolvarea coliziunilor prin adresare deschisa
I Dispersie interna
I Toate elementele sunt memorate ın interiorul tabelei T ; nu esteutilizat spat, iu suplimentar de memorie, ın afara tabelei de dispersie.
I Functia de inserare examineaza tabela pana cand este gasita o locat, ielibera.
I Funct, ia de dispersie depinde atat de cheie cat s, i de numarulexaminarii:
h : U × {0, 1, ...,m − 1} 7→ {0, 1, ...,m − 1}
I Secvent,a de examinari < h(k , 0), h(k , 1), · · · , h(k,m − 1) > trebuiesa fie o permutare a {0, 1, ..,m − 1}.
I Dezavantaje: tabela se poate umple; s, tergerea poate deveni dificila.
FII, UAIC Curs 11 SD 2019/2020 22 / 29
Dispersie interna – Operat, ii
Function cauta(T , k)begin
i ← 0repeat
j ← h(k , i)if T [j ] == k then
return jelse
i ← i + 1until T [j ] == NULL OR i == m;return NULL
end
FII, UAIC Curs 11 SD 2019/2020 23 / 29
Dispersie interna – Operat, ii
Function insereaza(T , k)begin
i ← 0repeat
j ← h(k , i)if T [j ] == NULL then
T [j ]← kreturn j
elsei ← i + 1
until i == m;return −1
end
FII, UAIC Curs 11 SD 2019/2020 24 / 29
Dispersie interna – Strategii pentru examinare
Examinare liniara:
h(k , i) = (h′(k) + i) mod m
I h′(k) o funct, ie de dispersie uzuala.
I Pentru o cheie k, secvent,a de examinare este
h′(k), h′(k) + 1, h′(k) + 2, ..., m − 1, 0, 1, ..., h′(k)− 1.
I Avantaj: metoda simpla.
I Dezavantaj: grupare primara (primary clustering) – se formeaza s, irurilungi de locat, ii ocupate; cres, te timpul mediu de cautare.
FII, UAIC Curs 11 SD 2019/2020 25 / 29
Dispersie interna – Strategii pentru examinare
Examinare patratica:
h(k, i) = (h′(k) + c1i + c2i2) mod m
I h′(k) o funct, ie de dispersie uzuala.
I Pentru o cheie k, prima locat, ie examinata este h′(k), iar urmatoarelepozit, ii examinate sunt decalate cu cantitat, i ce depind ıntr-o manierapatratica de pozit, ia anterior examinata.
I Dezavantaj: grupare secundara – daca doua chei au aceeas, i pozit, ie destart a examinarii, atunci secvent,ele de verificare coincid.
I Funct, ioneaza mai bine decat verificarea liniara.
FII, UAIC Curs 11 SD 2019/2020 26 / 29
Dispersie interna – Strategii pentru examinare
Dispersie dubla:
h(k, i) = (h1(k) + ih2(k)) mod m
I h1(k) si h2(k) doua funct, ii de dispersie uzuale.
I Pentru o cheie k , prima locat, ie examinata este h1(k), iar urmatoarelepozit, ii examinate sunt decalate fat, a de pozit, ia anterioara cu h2(k)mod m.
I Aceasta metoda produce ın general rezultate foarte bune, cu condit, iaca h2(k) sa fie relativ prim cu m. O modalitate de a realiza acestlucru este sa consideram m o putere a lui 2 s, i sa alegem h2(k) astfelıncat sa rezulte doar numere impare.
FII, UAIC Curs 11 SD 2019/2020 27 / 29
Dispersie interna – Analiza complexitat, ii
Ipoteza dispersiei uniforme: fiecare cheie poate avea, cu aceeas, iprobabilitate, oricare din cele m! permutari ca secvent, a de examinare.
Teorema:Intr-o tabela de dispersie cu adresare deschisa, ın ipoteza dispersieiuniforme, cu factor de ıncarcare α < 1, numarul mediu de verificari estecel mult
I 11−α pentru operat, ia de cautare fara succes, s, i
I 1α ln
11−α pentru operat, ia de cautare cu succes.
Corolar:Daca α este constant, atunci accesarea unei tabele de dispersie cuadresare deschisa necesita ın medie un timp constant, Θ(1).
FII, UAIC Curs 11 SD 2019/2020 28 / 29
Utilizari
I Tabelele de dispersie sunt folosite la indexarea ın baze de date,compilatoare - tabela de simboluri, cache, etc.
I Aplicat, ii ale funct, iilor de dispersie: CRC, Cryptographic hashfunctions, etc.
FII, UAIC Curs 11 SD 2019/2020 29 / 29