哈希函数给了我非常大的数字

时间:2016-10-11 14:04:38

标签: c hash hashtable

我正在使用c的djb2哈希函数,当我通过它运行一个名称时,我得到数十万的哈希值,我希望能够使用数组中的哈希表将其放入哈希表中至少在很长的时间里,几千或更小的东西。我很困惑如何让函数给我较小的哈希值,同时仍然具有哈希的完整性。另外,我对如何确定用于哈希表的数组的正确大小感到困惑。提前谢谢。

unsigned long hash(char* str)
{
    unsigned long hash = 5381;
    int c;

    for (int i = 0; i < strlen(str); ++i) 
    {
        c = (int) str[i];
        hash = ((hash << 5) + hash) + c; 
    }
    return hash;
}

1 个答案:

答案 0 :(得分:0)

假设您的djb2版本返回unsigned long(调用返回变量foo,比如说),使用表达式<n模拟该结果的模数/ p>

foo % n

会将结果从0约束到n - 1。这应该与原始哈希值具有相似的理想统计特性,并且应该优于整数除法得到的结果。