如何将 32 位无符号整数(0~4294967295)散列到 10 位无符号整数(0~1023)?最少碰撞和快速很重要。如果方便,请用 C/C++ 编写示例。
对不起,我没有问好,这不是我的作业。也许问题背景会有所帮助。我正在编写一个服务器,该服务器必须处理来自每个客户端的 < 1024 个连接。每个客户端都有其独立的 IP 地址,存储为 32 位无符号整数。这就是问题的来源。
如何将 32 位无符号整数(0~4294967295)散列到 10 位无符号整数(0~1023)?最少碰撞和快速很重要。如果方便,请用 C/C++ 编写示例。
对不起,我没有问好,这不是我的作业。也许问题背景会有所帮助。我正在编写一个服务器,该服务器必须处理来自每个客户端的 < 1024 个连接。每个客户端都有其独立的 IP 地址,存储为 32 位无符号整数。这就是问题的来源。
在某些条件下(例如必须对最多 2^10 个已知项目进行哈希处理),您不会发生冲突。为了提高速度,容忍一点碰撞可能会有所帮助。更多关于这里 http://en.wikipedia.org/wiki/Perfect_hash_function
GNU 完美散列函数生成器http://www.gnu.org/software/gperf/
Pearson Hashing http://en.wikipedia.org/wiki/Pearson_hashing是一种廉价、小尺寸的密钥散列