Sunteți pe pagina 1din 27

Curs 12.

Tabele de dispersie

Ianuarie, 2014

Cont inut

Tabela cu adresare directa

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

Tabela cu adresare directa

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

ecare pozitie (slot) corespunde unei chei din universul U

Structuri de date

Curs 12

Ianuarie, 2014

4 / 27

Tabela cu adresare directa - Operatii


Function cauta(t , k ) begin return T [k ] end Procedure insereaza(t , x ) begin T [x .cheie ] = x end Procedure sterge(t , x ) begin T [x .cheie ] = NIL end Complexitatea timp a operatiilor: (1)

Structuri de date

Curs 12

Ianuarie, 2014

5 / 27

Tabela cu adresare directa

Spatiul de memorare: (|U |) Probleme


cheile pot sa nu e numere intregi domeniul de valori al cheilor este foarte mare
numere pe 64 de biti (18.446.744.073.709.551.616 chei diferite), siruri de caractere

multimea de chei memorate este foarte mica relativ la U

Solutia: tabela de dispersie


o generalizare a notiunii de tabela cu adresare directa o structura de date ecienta pentru implementarea dictionarelor limbaje de progaramare: HashMap, HashSet

Structuri de date

Curs 12

Ianuarie, 2014

6 / 27

Cont inut

Tabela cu adresare directa

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

Rezolvarea coliziunilor prin inlantuire


Inregistrarile care au asociat acelasi slot vor memorate intr-o lista liniara

Cazul cel mai nefavorabil: toate cheile au asociat acelasi slot


timpul de acces: (n), daca |S | = n

Structuri de date

Curs 12

Ianuarie, 2014

9 / 27

Rezolvarea coliziunilor prin inlantuire - Operatii

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

Rezolvarea coliziunilor prin inlantuire - Operatii

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

Rezolvarea coliziunilor prin inlantuire - Analiza complexitatii in cazul mediu

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

Rezolvarea coliziunilor prin inlantuire - Analiza complexitatii in cazul mediu

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 cu adresare directa

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

Functii de dispersie - Metoda diviziunii


Presupunem ca toate cheile sunt numere naturale.
daca cheile nu sunt numere naturale, trebuie gasita o modalitate de a le interpreta ca numere naturale; exemplu: identicatorul pt poate interpretat ca (112, 116); in baza 128, pt devine (112 128) + 116 = 14452

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

Alege m un numar prim, care nu e apropiat de o putere a lui 2 sau 10

Structuri de date

Curs 12

Ianuarie, 2014

16 / 27

Functii de dispersie - Metoda inmultirii

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

Functii de dispersie - Metoda inmultirii

Exemplu: m = 23 , cuvinte pe w = 7 biti

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

Functii de dispersie - Dispersia universala

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 cu adresare directa

Tabela de dispersie

Functii de dispersie

Adresare deschisa

Structuri de date

Curs 12

Ianuarie, 2014

20 / 27

Rezolvarea coliziunilor prin adresare deschisa

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

Adresare deschisa - Operatii

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

Adresare deschisa - Operatii

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

Adresare deschisa - Strategii pentru examinare

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

Adresare deschisa - Strategii pentru examinare


Examinare patratica: Data o functie de dispersie uzuala h (k ), aceasta metoda utilizeaza functia de dispersie: h(k , i ) = (h (k ) + c1 i + c2 i 2 )mod m, i = 0, 1, ..., m 1

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

Adresare deschisa - Strategii pentru examinare


Double hashing: Date doua functii de dispersie obisnuite h1 (k ) si h2 (k ), aceasta metoda utilizeaza functia de dispersie: h(k , i ) = (h1 (k ) + i h2 (k ))mod m

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

Adresare deschisa - Analiza complexitatii

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

cautare fara succes, si cu succes.

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

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