哪些整数哈希函数适合接受整数哈希键?

推荐答案

克努特的乘法方法:

hash(i)=i*2654435761 mod 2^32

一般来说,您应该 Select 一个与哈希大小(本例中为2^32)顺序相同且没有公共因子的乘法器.这样一来,哈希函数就可以均匀地覆盖所有的哈希空间.

编辑:这个散列函数最大的缺点是它保留了整除性,所以如果你的整数都可以被2或4整除(这并不少见),它们的散列也会被整除.这是哈希表中的一个问题-最终可能只使用1/2或1/4的存储桶.

C++相关问答推荐

C如何显示字符串数组中的第一个字母

与unions 的未定义行为

InetPton()函数无效的IP地址

括号中的堆栈实现错误问题

为什么GCC可以调用未定义的函数?

正在try 将文件/文件夹名从目录 struct 存储到链接列表

特定闪存扇区的内存别名

在列表中插入Int指针(C)

在Rust和C之间使用ffi时如何通过 struct 中的[U8;1]成员传递指针

进程在写入管道时挂起

在txt文件中找到指定的字符串,并从数字中减go 相同的值

用C++构建和使用DLL的困惑

我应该在递归中使用全局变量吗

如何将两个uint32_t值交织成一个uint64_t?

程序对大输入给出错误答案

无算术运算符和循环的二进制乘法

如何在MSVC中使用intSafe.h函数?

计算时出现奇怪的计算错误;N Select K;在C中

尽管将其标记为易失性,但 gcc 是否优化了我的等待代码?

是什么阻止编译器优化手写的 memcmp()?