存储桶实例的哈希密钥

时间:2011-11-03 14:29:08

标签: algorithm hash

在映射hash key --> bucket instance

时,哪种算法可以产生最佳分布

换句话说,假设我有一个散列函数(可能是SHA-1),我有n个桶;我使用什么算法将密钥映射到存储桶?例如。低位,高位,其他什么?

2 个答案:

答案 0 :(得分:2)

通常,您只需要mod哈希值和桶数。如果桶的数量是2的幂,则可以使用按位 - 而不是。

来自维基百科的摘录hash function

  

一个常见的解决方案是用非常计算一个固定的哈希函数   大范围(例如,0到2 32 - 1),将结果除以n,并使用   师的剩余部分。如果n本身是2的幂,则可以通过以下方式完成   位屏蔽和位移。使用此方法时,哈希   必须选择函数以使结果相当均匀   0和n-1之间的分布,对于任何可能出现的n   应用。根据功能,其余部分可以是均匀的   仅对于某些n,例如奇数或素数。

答案 1 :(得分:0)

SHA-1和其他cryptographic hash functions应该已经给你一个非常均匀的分布,往往表现得像一个随机函数(以相同的概率生成所有输出)。

因此,只需从函数输出中选择适当的位数,即可得到所需范围内的数字。

您应该研究有关散列函数和散列表的文献,以便更好地了解空间,以便根据您的要求做出明智的选择。您可以从Wikipedia或算法教科书开始,例如CLR。最后,您需要转到Knuth