Re: more on hash functions

Paul F. Dietz (dietz@interaccess.com)
Wed, 14 Apr 1999 22:15:36 -0500


Chuck Lever wrote:

> #define FIRSTBYTE(x) (0xff & (x))
> #define SECNDBYTE(x) (0xff & ((x)>>8))
> #define THIRDBYTE(x) (0xff & ((x)>>16))
>
> #define hashfn(key) ( (rand1[FIRSTBYTE(key)] << 4) ^ \
> (rand2[SECNDBYTE(key)] << 2) ^ \
> (rand1[THIRDBYTE(key)]) )
>
> to generate a 12-bit hash table index. this way i don't have to mask off
> extra bits as the final step, and i can use daintily sized random tables.

This is also clearly bad. Suppose you're hashing keys that
have a common third byte? The low two bits of your hash
values will be constant.

You really have to make every bit of the result depend on
every bit in the key.

Paul

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/