如何将32位无符号整数(0~4294967295)散列为10位无符号整数(0~1023)? 最少碰撞和快速是很重要的。如果方便,请用C / C ++编写样本。
抱歉,我没有问好,这不是我的功课。也许问题背景会有所帮助。我正在写一个服务器,这个服务器必须处理<每个客户端有1024个连接。每个客户端都有其独立的IP地址,存储为32位无符号整数。这就是问题的来源。答案 0 :(得分:2)
在某些条件下(比如必须最多散列2 ^ 10个已知项目),您可以没有碰撞。为了更快的速度,容忍一点碰撞可能会有所帮助。更多关于这一点 http://en.wikipedia.org/wiki/Perfect_hash_function
GNU Perfect Hash函数生成器http://www.gnu.org/software/gperf/
廉价,低尺寸的键散列是Pearson Hashing http://en.wikipedia.org/wiki/Pearson_hashing