c - 哈希函数以减少冲突

标签 c hash hashtable

我正在使用这个哈希函数,但遇到了很多冲突。目的是将元素的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/

相关文章:

c - 从链表数组中删除一个节点?

java - 如何在 Java 8 中组合两个 ImmutableMap<String,String>?

c - 需要写入一个字符串常量,我该如何解决这个问题?

javascript - 为什么从其他网站返回时会留下最后一个哈希值,同时显示第一个哈希值的内容?

java - char[] -> String -> bytes[] -> String...我迷路了

ruby - 使用数字范围选择数组项

java - 需要一些管理字符串的帮助

c - 如何解释这个 C union 输出

objective-c - Objective-C 中参数的寄存器或堆栈

使用当前 gcc 编译 som_pak (97)