View Single Post
Old 19-12-2010, 17:19   #1
kwb
Senior Member
 
L'Avatar di kwb
 
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
[Teoria] Hash Tables e Open Addressing

Ciao a tutti, sto studiando le tabelle di hash e sono arrivato alla parte delle collisioni.
Vengono trattate le due risoluzioni più comuni: il chaining e l'open addressing

In quest'ultimo non mi è chiara una cosa, e vorrei vedere se ho ben capito come funziona il meccanismo:
Inserito un dato, viene calcolata una chiave di hash, la quale sarà l'indice del mio vettore dove memorizzerò la parola.
Qualora questa cella sia già occupata, provo a guardare se la successiva ( hash key +1 ) è occupata, se non lo è, inserisco li la mia parola.
Bene
Se funziona veramente così, quando poi io devo andare a prendere una parola dalla hash table, devo calcolarmi la mia hash key ( e questo si fa easy ) e poi però se c'è una collisione, come faccio a sapere se la mia parola è finita 1, 2 o 5 slot più avanti della sua reale hash key?
La soluzione più intelligente che mi viene in mente è quella dove, una volta arrivato alla cella, comparo il dato in input con quello che ho e se sono diversi eseguo la comparazione con la cella successiva fino a trovare il giusto dato...
Ok, ma se è così, non è più facile usare un chaining? Dove, la comparazione la devo fare obbligatoriamente se c'è più di una parola in quella cella?
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
kwb è offline   Rispondi citando il messaggio o parte di esso