最好是快速的方法。这个N = 2^b
案子很简单。为此,首先我要弄清楚我选择的类型中有多少位:
typedef unsigned int type;
size_t size = sizeof(type) * 8;
然后我将执行适当数量的位右移以产生高位的哈希键b
。
type input = 0x657;
unsigned char b = 4;
unsigned char hash = input >> (size - b);
但如果我想要N = 3
呢?或任何其他非 2 的幂?假设 my N
will 总是适合一个unsigned char
(所以它最多是 256),那么散列一些最快的方法是input
什么?在保持桶的范围差异不超过 +/- 1 的同时,还保留 的高位的顺序input
,就像上面的函数一样。