DJB2哈希函数编辑

问题描述 投票:0回答:2

我在我的哈希程序中使用 DJB2 哈希函数来存储字符串。但是这个哈希函数返回一个非常大的unsigned int值作为返回值(哈希表索引)。如果我的表大小非常小(比如 13),有什么方法可以将这个大值转换为较小的值。我只想尽可能避免碰撞。

DJB2哈希函数代码如下:

unsigned int djb_hash(string s)
{
    int i;
    unsigned int h;
    h = 5381;

    for (i = 0; i < s.size(); i++) 
    {
        h = (h << 5) + h + s[i];
    }

    return h;
}
c++ hash string-hashing
2个回答
0
投票

如果你想将较大的值转换为较小的值,那么碰撞的机会就更多。较大的绳子足以避免碰撞。


0
投票

正如@W.F之前提到的,模数应该派上用场。

© www.soinside.com 2019 - 2024. All rights reserved.