Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sd-ca:laboratoare:laborator-07 [2015/04/07 22:17]
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 43: Line 43:
  
   ***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>​**Atenţie:**+<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 folosiriicel 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 2se 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)**. HMAX reprezintă dimensiunea maximă a array-ului.</​note>​+**HMAX** reprezintă dimensiunea maximă a array-ului.</​note>​
   ***ștergerea** presupune căutarea și scoaterea elementului din lista corespunzătoare.   ***ștergerea** presupune căutarea și scoaterea elementului din lista corespunzătoare.
  
Line 132: 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 191: 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 219: 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 240: 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]]
sd-ca/laboratoare/laborator-07.1428434235.txt.gz · Last modified: 2015/04/07 22:17 by cosmin_ioan.petrisor
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0