2012-05-29 6 views
11

Sto cercando una funzione di hashing ad alta velocità con una buona distribuzione (cioè quasi uniforme) da utilizzare in un'implementazione della tabella hash.Algoritmo di hash per l'implementazione della tabella hash

La tabella hash verrà utilizzata esclusivamente per la memorizzazione di valori con un numero intero.

Posso usare solo i bit più bassi del numero intero come hash?

ad es. Int chiave = n & 15; e creare un array con 16 slot per memorizzarli.

Qualche consiglio?

+12

Non esiste una funzione di cancellatura perfetta. Tuttavia, se vuoi alcuni algoritmi con il corrispondente codice sorgente, vedi qui: http://partow.net/programming/hashfunctions/index.html –

+0

Prendere i bit più bassi è probabilmente la cosa peggiore da fare. (ma: tutto dipende dall'intervallo di valori che ci si aspetta dalla chiave int) Prova a mischiare anche i bit superiori, o moltiplica con un numero abbastanza grande (dispari, primo). Sapere cosa aspettarsi e misurarlo. – wildplasser

+0

Posta il tuo commento come risposta e lo accetterò. –

risposta

3

Si può vedere qui xxhash

La vostra funzione di hash citato è molto veloce, ma è molto male anche. Se si desidera una funzione di hash "stupida", si può considerare il modulo.

Esempio:

int key = item % size_of_hash_table 
+2

Perché "it" è cattivo? –