c++ DJB2哈希函数编辑

ivqmmu1c  于 2024-01-09  发布在  其他
关注(0)|答案(2)|浏览(158)

我在我的散列程序中使用了DJB2散列函数,我想存储字符串。但是这个散列函数返回一个非常大的无符号整数值作为返回值(散列表索引)。如果我的表大小非常小(比如13),有没有办法将这个大值转换为更小的值。我想尽可能避免冲突。
DJB2哈希函数代码如下:

  1. unsigned int djb_hash(string s)
  2. {
  3. int i;
  4. unsigned int h;
  5. h = 5381;
  6. for (i = 0; i < s.size(); i++)
  7. {
  8. h = (h << 5) + h + s[i];
  9. }
  10. return h;
  11. }

字符串

f3temu5u

f3temu5u1#

如果你想把较大的值转换成较小的值,那么就有更多的碰撞机会。较大的字符串足以避免碰撞。

w46czmvw

w46czmvw2#

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

相关问题