Documente Academic
Documente Profesional
Documente Cultură
Tabele de dispersie
Ianuarie, 2014
Cont inut
Tabela de dispersie
Functii de dispersie
Adresare deschisa
Structuri de date
Curs 12
Ianuarie, 2014
2 / 27
Tabele de simboluri
Tabela de simboluri S cu n inregistrari, ecare inregistrare are asociatao cheie Operatii: insereaza(S , x ), sterge (S , x ), cauta(S , k ) Cum poate organizata structura de date S ?
Structuri de date
Curs 12
Ianuarie, 2014
3 / 27
U {0, 1, ..., m 1} multimea univers a cheilor un vector T [0..m 1]: T (k ) = x NIL daca x K si cheie [x ] = k altfel
Structuri de date
Curs 12
Ianuarie, 2014
4 / 27
Structuri de date
Curs 12
Ianuarie, 2014
5 / 27
Structuri de date
Curs 12
Ianuarie, 2014
6 / 27
Cont inut
Tabela de dispersie
Functii de dispersie
Adresare deschisa
Structuri de date
Curs 12
Ianuarie, 2014
7 / 27
Tabela de dispersie
utilizeaza o functie de dispersie (hash function) h pentru a asocia cheilor din universul U o valoare din multimea {0, 1, ..., m 1}.
un element cu cheia k are asociata pozitia h(k ) in tabela functia de dispersie reduce domeniul de valori a indicilor, si implicit dimensiunea vectorului memorat
Coliziune: cand dorim sa adaugam o inregistrare pentru care pozitia din T este deja ocupata
Structuri de date Curs 12 Ianuarie, 2014 8 / 27
Structuri de date
Curs 12
Ianuarie, 2014
9 / 27
Function cauta(t , k ) begin cauta elementul cu cheia k in lista T [h(k )] end Procedure insereaza(t , x ) begin insereaza x la inceputul listei T [h(x .cheie )] end Procedure sterge(t , x ) begin sterge x din lista T [h(x .cheie )] end
Structuri de date
Curs 12
Ianuarie, 2014
10 / 27
inserare: complexitatea in cazul cel mai nefavorabil: O (1) cautare: complexitatea in cazul cel mai nefavorabil depinde de lungimea listei stergere: O (1) daca avem liste liniare dublu inlantuite; daca lucram cu liste liniare simplu inlantuite, trebuie intai sa cautam x si sa retinem predecesorul acestuia pentru a putea reface legatura
Structuri de date
Curs 12
Ianuarie, 2014
11 / 27
Ipoteza dispersiei uniforme simple simple uniform hashing : ecare cheie k S are o probabilitate egala de a memorata in oricare locatie din tabela T (independent de locatiile altor chei) Factorul de incarcare al tabelei T este = n/m, unde n este numarul de chei din tabela, iar m numarul de locatii Timpul de calcul al functiei de dispersie este (1)
Structuri de date
Curs 12
Ianuarie, 2014
12 / 27
Teorema: Considerand o tabela de dispersie in care coliziunile sunt rezolvate prin inlantuire, in ipoteza dispersiei uniforme simple, o cautare fara succes are complexitatea timp in cazul mediu (1 + ).
Daca numarul de sloturi este cel putin proportional cu numarul de elemente, n = O (m), sau echivalent = O (1), operatia de cautare are complexitatea, in medie, O (1)
Teorema: Intr-o tabela de dispersie in care coliziunile sunt rezolvate prin inlantuire, in ipoteza dispersiei uniforme simple, o cautare cu succes are complexitatea timp in cazul mediu (1 + ).
Structuri de date
Curs 12
Ianuarie, 2014
13 / 27
Cont inut
Tabela de dispersie
Functii de dispersie
Adresare deschisa
Structuri de date
Curs 12
Ianuarie, 2014
14 / 27
Functia de dispersie
Determinista: pentru o cheie k , functia trebuie sa furnizeze acelasi raspuns h(k ) totdeauna Aleatoare: minimizarea coliziunilor Ipoteza dispersiei uniforme simple este dicil de garantat, dar exista tehnici euristice care functioneaza bine in practica (atata timp cat decientele acestora pot evitate) O functie hash buna distribuie cheile uniform in locatiile tabelei
Structuri de date
Curs 12
Ianuarie, 2014
15 / 27
h(k ) = k mod m Nu alege pentru m o valoare care are un divizor mic d . Preponderenta cheilor congruente modulo d poate afecta in mod negativ uniformitatea. Daca m = 2r , valoarea functiei nu depinde de toti bitii lui k .
daca k = 1011000111011010 si r = 6 atunci h(k ) = 011010
Structuri de date
Curs 12
Ianuarie, 2014
16 / 27
h(k ) = m(kA mod 1) , unde kA mod 1 este partea fractionara a lui kA, iar A (0, 1) o constanta valoarea lui m nu este critica (de obicei o putere a lui 2) m = 2r , siruri de caractere pe w biti h(k ) = (A k mod 2w )rsh(w r ), unde rsh este operatorul de deplasare la dreapta pe biti, A este un numar impar din intervalul (2w 1 , 2w )
Structuri de date
Curs 12
Ianuarie, 2014
17 / 27
Nu alege A prea aproape de 2w 1 sau 2w Knuth: A = ( 5 1)/2 Inmultirea modulo 2w este mai rapida in comparatie cu impartirea; operatorul rsh este rapid.
Structuri de date
Curs 12
Ianuarie, 2014
18 / 27
h(k ) = [(ak + b )mod p ]mod m, unde a, b numere aleatoare din {0, ..., p 1}, p prim p > |U | cazul cel mai nefavorabil, k1 = k2 , Pra,b {h(k1 ) = h(k2 )} = 1/m
Structuri de date
Curs 12
Ianuarie, 2014
19 / 27
Cont inut
Tabela de dispersie
Functii de dispersie
Adresare deschisa
Structuri de date
Curs 12
Ianuarie, 2014
20 / 27
Toate elementele sunt memorate in interiorul tabelei; nu este utilizat spatiu suplimentar de memorie, in afara tabelei de dispersie Functia de inserare examineaza tabela pana cand este gasita o locatie libera Functia de dispersie depinde atat de cheie cat si de numarul examinarii h : U {0, 1, ..., m 1} {0, 1, ..., m 1} Secventa de examinari < h(k , 0), h(k , 1), ..., h(k , m 1) > trebuie sa e o permutare a {0, 1, .., m 1} Tabela se poate umple, stergerea devenind dicila
Structuri de date
Curs 12
Ianuarie, 2014
21 / 27
Function cauta(t , k ) begin i 0 repeat j h(k , i ) if T [j ] = k then return j else i i +1 until T [j ] = NIL OR i = m; return NIL end
Structuri de date
Curs 12
Ianuarie, 2014
22 / 27
Procedure insereaza(t , k ) begin i 0 repeat j h(k , i ) if T [j ] = NIL then T [j ] k return j else i i +1 until i = m; return 1 end
Structuri de date
Curs 12
Ianuarie, 2014
23 / 27
Examinare liniara: Data o functie de dispersie uzuala h (k ), aceasta metoda utilizeaza functia de dispersie: h(k , i ) = (h (k ) + i )mod m pentru o cheie k , secventa de examinare este < h (k ), h (k ) + 1, h (k ) + 2, ..., m 1, 0, 1, ..., h (k ) 1 > avantaj: medoda simpla dezavantaj: grupare primara primary clustering - se formeaza siruri lungi de locatii ocupate; creste timpul mediu de cautare
Structuri de date
Curs 12
Ianuarie, 2014
24 / 27
pentru o cheie k , prima locatie examinata este h (k ), iar urmatoarele pozitii examinate sunt decalate cu cantitati ce depind intr-o maniera patratica de pozitia anterior examinata dezavantaj: grupare secundara - daca doua chei au aceeasi pozitie de start a examinarii, atunci secventele de vericare coincid functioneaza mai bine decat vericarea liniara
Structuri de date
Curs 12
Ianuarie, 2014
25 / 27
Data o cheie k , prima locatie examinata este h1 (k ), iar urmatoarele pozitii examinate sunt decalate fata de pozitia anterioara cu h2 (k ) mod m Aceasta metoda produce in general rezultate foarte bune, cu conditia ca h2 (k ) sa e relativ prim cu m. O modalitate de a realiza acest lucru este sa consideram m o putere a lui 2 si sa alegem h2 (k ) astfel incat sa rezulte doar numere impare.
Structuri de date Curs 12 Ianuarie, 2014 26 / 27
Ipoteza uniform hashing : ecare cheie are aceeasi probabilitate de a avea oricare din cele m! permutari ca secventa de examinari Teorema: Intr-o tabela de dispersie cu adresare deschisa, in ipoteza dispersiei uniforme, cu factor de incarcare < 1 numarul mediu de vericari este cel mult
1 1 pentru operatia de adaugare si 1 1 ln 1 pentru operatia de cautare
Implicatiile teoremei
Daca este constant, accesarea unei tabele de dispersie cu adresare deschisa necesita un timp constant (1) in medie
Structuri de date
Curs 12
Ianuarie, 2014
27 / 27