【发布时间】:2012-07-06 09:25:20
【问题描述】:
我想要一个哈希函数,它需要一个长数字(64 位)并产生 10 位的结果。用于此目的的最佳哈希函数是什么。输入基本上是变量的地址(在 Linux 上地址是 64 位或 8 字节),所以我的哈希函数应该为此目的进行优化。
【问题讨论】:
-
您能给我们提供关于您的宇宙中 64 位值分布的哪些信息?
-
没有适用于所有情况的“最佳”哈希函数。您必须研究输入数字的分布和特征。
-
输入是Linux上变量的地址。
-
@MetallicPriest:在这种情况下,您可以删除低 4+ 位(假设所有内容都对齐),并且 atm 地址空间限制为 47 位,因此这意味着您只需要 43 位哈希(如果你愿意对未来不太安全)
-
虽然当然 它没有伤害 散列所有位,包括具有低熵(位 0-2)或始终相同(最高 16 位)的位在用户空间中,至少目前,始终为零)。这样,从现在起的 3-4 年内,你就可以避免重用这个函数的愚蠢错误,忘记你最初设计它的原因和前提,将它用于不符合假设的事情。这可以避免公开羞辱,例如一个星期的时间被浪费了,因为哈希表表现不佳,没有人能解释原因。