我正在使用这个哈希函数,但遇到了很多冲突。目的是将元素的ascii值相加并输出值。有什么方法可以优化此功能或其他功能以减少碰撞次数?
int hash(char* s)
{
int hash = 0;
while(*s)
{
hash = hash + *s;
s++;
}
return hash;
}
最佳答案
32 位 int
的范围超过 40 亿。 (如果您的 int
是 64 位的,则范围要大得多。)但是您的代码只是将字符串中每个字符的值相加,它永远不会接近上限。您所有的哈希码都将是较小的数字,挤满了可能值的下限,并增加了发生冲突的机会。
这就是为什么一个好的算法会比这更复杂。
Here's one article在快速的 Google 搜索中出现。
关于c - 哈希函数以减少冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52769024/