This shows you the differences between two versions of the page.
sd-ca:laboratoare:laborator-07 [2015/04/07 22:19] cosmin_ioan.petrisor [Implementarea cu liste înlănțuite] |
sd-ca:laboratoare:laborator-07 [2015/05/09 16:47] (current) cosmin_ioan.petrisor [Exerciţii] |
||
---|---|---|---|
Line 44: | Line 44: | ||
***inserarea** în hashtable presupune găsirea indexului corect și adăugarea elementului la lista corespunzătoare. | ***inserarea** în hashtable presupune găsirea indexului corect și adăugarea elementului la lista corespunzătoare. | ||
<note important> | <note important> | ||
- | Hash-ul poate depăşi cu mult dimensiunea array-ului de bucket-uri ceea ce duce la necesitatea folosirii, cel mai frecvent, a operaţiei //modulo// -> **index = hash % HMAX**, pentru a situa indexul bucket-ului în care va fi inserat elementul, în limitele necesare. | + | Hash-ul poate depăşi cu mult dimensiunea array-ului de bucket-uri, ceea ce duce la necesitatea folosirii, cel mai frecvent, a operaţiei //modulo// -> **index = hash % HMAX**, pentru a situa indexul bucket-ului în care va fi inserat elementul, în limitele necesare. |
Dacă dimensiunea array-ului este exprimată în puteri ale lui 2, se mai poate folosi şi formula următoare -> **index = hash & (HMAX - 1)**. | Dacă dimensiunea array-ului este exprimată în puteri ale lui 2, se mai poate folosi şi formula următoare -> **index = hash & (HMAX - 1)**. | ||
Line 133: | Line 133: | ||
2) [**1p**] Testați implementarea voastră folosind un cod simplist. | 2) [**1p**] Testați implementarea voastră folosind un cod simplist. | ||
- | |||
<hidden> | <hidden> | ||
Line 192: | Line 191: | ||
* [**0.5p**] TODO 2: definiţi funcţia hash pentru clasa String | * [**0.5p**] TODO 2: definiţi funcţia hash pentru clasa String | ||
* [**1.5p**] TODO 3: rezolvaţi problema folosind un Hashtable cu cheie de tip String. | * [**1.5p**] TODO 3: rezolvaţi problema folosind un Hashtable cu cheie de tip String. | ||
- | |||
- | 4) [**Bonus 1p**] Implementați și testați redimensionarea unui hashtable: funcția **resize()** dublează dimensiunea structurii interne a tabelei de dispersie. Dublarea se va face în momentul în care raportul dintre numărul de elemente introduse în hashtable **size** şi numărul de bucket-uri **HMAX** este mai mare decât o valoare aleasă (**size** / **HMAX** > 0.75). Comportamentul dorit pentru această funcţionalitate este următorul: se redimensionează array-ul de bucket-uri, iar apoi fiecare bucket este parcus în ordine și elementele sunt redistribuite după valoarea noului hash. | ||
- | </hidden> | ||
3) [**3p**] O aplicatie a unui hashtable este reprezentată de stocarea parolelor unor utilizatori în vederea autentificării într-un sistem. Considerăm un fişier text **password.dat** ce conţine pe fiecare linie o pereche de şiruri de caractere reprezentând numele utilizatorului şi parola sa. După citirea şi stocarea parolelor, programul va citi de la tastatură numele utilizatorului ce doreşte să se autentifice, precum şi parola sa. Dacă parola este cea aferentă utilizatorului, se va afişa un mesaj de tipul "Authentication successful", iar în caz contrar, se va afişa "Authentication failure". | 3) [**3p**] O aplicatie a unui hashtable este reprezentată de stocarea parolelor unor utilizatori în vederea autentificării într-un sistem. Considerăm un fişier text **password.dat** ce conţine pe fiecare linie o pereche de şiruri de caractere reprezentând numele utilizatorului şi parola sa. După citirea şi stocarea parolelor, programul va citi de la tastatură numele utilizatorului ce doreşte să se autentifice, precum şi parola sa. Dacă parola este cea aferentă utilizatorului, se va afişa un mesaj de tipul "Authentication successful", iar în caz contrar, se va afişa "Authentication failure". | ||
Line 220: | Line 216: | ||
* [**0.5p**] TODO 2: definiţi funcţia hash pentru clasa String | * [**0.5p**] TODO 2: definiţi funcţia hash pentru clasa String | ||
* [**1.5p**] TODO 3: rezolvaţi problema folosind un Hashtable cu cheie de tip String. | * [**1.5p**] TODO 3: rezolvaţi problema folosind un Hashtable cu cheie de tip String. | ||
+ | |||
+ | 4) [**Bonus 1p**] Implementați și testați redimensionarea unui hashtable: funcția **resize()** dublează dimensiunea structurii interne a tabelei de dispersie. Dublarea se va face în momentul în care raportul dintre numărul de elemente introduse în hashtable **size** şi numărul de bucket-uri **HMAX** este mai mare decât o valoare aleasă (**size** / **HMAX** > 0.75). Comportamentul dorit pentru această funcţionalitate este următorul: se redimensionează array-ul de bucket-uri, iar apoi fiecare bucket este parcus în ordine și elementele sunt redistribuite după valoarea noului hash. | ||
+ | </hidden> | ||
===== Interviu ===== | ===== Interviu ===== | ||
Această secțiune nu este punctată și încearcă să vă facă o oarecare idee a tipurilor de întrebări pe care le puteți întâlni la un job interview (internship, part-time, full-time, etc.) din materia prezentată în cadrul laboratorului. | Această secțiune nu este punctată și încearcă să vă facă o oarecare idee a tipurilor de întrebări pe care le puteți întâlni la un job interview (internship, part-time, full-time, etc.) din materia prezentată în cadrul laboratorului. | ||
Line 241: | Line 240: | ||
[6] [[http://www.cs.usfca.edu/~galles/visualization/ClosedHashBucket.html|Closed Hashing (Buckets) Visualization]] | [6] [[http://www.cs.usfca.edu/~galles/visualization/ClosedHashBucket.html|Closed Hashing (Buckets) Visualization]] | ||
+ | |||
+ | [7] [[http://www.cse.yorku.ca/~oz/hash.html|Collection of hash functions]] |