我想编写可扩展哈希。在wiki我已经在python中找到了很好的实现。但是这段代码使用的是最低有效位,所以当我1101
的哈希值d = 1
为1
时,d = 2
的值为01
。我想使用最重要的位。例如:哈希1101
,d = 1
值为1
,d = 2
值为11
。有没有简单的方法呢?我试过了,但我不能。
你明白为什么它使用最低有效位吗?
或多或少。它在我们使用数组时有效。好吧,对于散列函数,我想使用4字节整数但从左到右的四个最小位。
h = hash(k)
h = h & 0xf #use mask to get four least bits
p = self.pp[ h >> ( 4 - GD)]
它不起作用,我不知道为什么。
答案 0 :(得分:2)
使用最低有效位计算哈希是计算哈希的最快方法,因为它只需要按位运算。这使它非常受欢迎。
这是使用最高有效位的哈希的实现(在C中)。由于没有直接的方法来知道最重要的位,它会反复测试剩余的值是否只有指定的位数。
int significantHash(int value, int bits) {
int mask = (1 << bits) - 1;
while (value > mask) {
value >>= 1;
}
return value;
}
我建议使用重叠哈希,它使用数字的所有位。从本质上讲,它会减少相同位数的部分数量,并对它们进行异或。它比最不重要的哈希运行得慢,但比重要哈希更快。最重要的是,它提供了比其他两种方法更好的色散,使其成为必须散列的数字具有某种位相关模式的更好的候选。
int overlappingHash(int value, int bits) {
int mask = (1 << bits) - 1;
int answer = 0;
do {
answer ^= (value & mask);
value >>= bits;
} while (value > 0);
return answer;
}