我在哈希桶中有一组指纹。我想插入存储桶并搜索它,而不是从条目 0 到条目 n。
我想要做的是,当我将条目添加到存储桶中时,我使用指纹作为输入来计算哈希值,我可以使用它来确定要添加到哪个存储桶中。这并不难,但是当我尝试使用相同的算法对指纹进行哈希处理以识别要添加指纹的存储桶中的哪个插槽时,我发现它会产生很多冲突。
这是我用来将指纹散列到存储桶中的代码。我尝试使用具有更多字符的相同代码,但它仍然给我带来更高的冲突。
he.fingerprint 是 33 个字符宽
桶数为 1024
每个桶的条目数是 2048
char hph[32];
int bk,en;
unsigned long h = 0, g,i=0;
int j=0;
strncpy(hph,(const char*)(he).fing_print,32);
while ( j<32 )
{
h =h + hph[j]++;
g = h & 0xFFf00000;
h ^= g >> 24;
h &= ~g;
j++;
}
bk=h%buckets;
en=h%entries_per_bk;