【问题标题】:DJB2 hash function editingDJB2 哈希函数编辑
【发布时间】:2015-05-17 19:06:24
【问题描述】:

我在我想要存储字符串的散列程序中使用 DJB2 散列函数。但是这个哈希函数返回一个非常大的无符号整数值作为返回值(哈希表索引)。如果我的表非常小(比如 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


【解决方案1】:

如果您想将较大的值转换为较小的值,那么碰撞的机会就更大。较大的字符串足以避免碰撞。

【讨论】:

    猜你喜欢
    • 2011-02-04
    • 2018-08-04
    • 2021-10-05
    • 1970-01-01
    • 2014-03-13
    • 2016-03-25
    • 2011-02-27
    • 2021-02-18
    • 2014-09-08
    相关资源
    最近更新 更多