可扩展的散列 - 最重要的位

时间:2013-01-01 21:16:57

标签: python algorithm hash

我想编写可扩展哈希。在wiki我已经在python中找到了很好的实现。但是这段代码使用的是最低有效位,所以当我1101的哈希值d = 11时,d = 2的值为01。我想使用最重要的位。例如:哈希1101d = 1值为1d = 2值为11。有没有简单的方法呢?我试过了,但我不能。

  

你明白为什么它使用最低有效位吗?

或多或少。它在我们使用数组时有效。好吧,对于散列函数,我想使用4字节整数但从左到右的四个最小位。

h = hash(k) 
h = h & 0xf #use mask to get four least bits
p = self.pp[ h >> ( 4 - GD)]

它不起作用,我不知道为什么。

1 个答案:

答案 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;
}