散列函数和余数运算符

时间:2016-04-12 04:50:19

标签: function hash hashtable operator-keyword

我心中有一个简单的问题让我感到困惑。我的教授简单地说哈希函数是关键字%arraysize。对于每个哈希表,这必须是这样的,还是我们决定的?我们是否真的为我们创建的每个哈希表编写哈希函数?它可以是不同的东西,例如,简单地说,哈希函数=键。

2 个答案:

答案 0 :(得分:0)

通常,散列函数的域远大于其范围。例如,哈希可以接受"所有unicode字符串少于2 ^ 64个字符长"并输出"一个16位数字"。

是的,对于一些应用程序,使用身份函数作为哈希函数是有意义的,尽管哈希表开始看起来非常像普通数组。

对于散列表一般来说,modulo(%)是一个不错的选择:它在计算上很容易,并且在通常的情况下展开得很好。然而,它并不具有加密性,并且很多应用程序都需要这样做。

答案 1 :(得分:0)

你有一个数组来存储结果,这是一个固定的大小并由索引引用(在你的问题的情况下,index = key%array_size,保证产生一个介于0和array_size-1之间的数字)。如果索引大于数组大小,则会出现问题。如果它总是少于那么你浪费了空间,所以任何散列的最后阶段往往是它必须适合的数组大小的模数。

当然,这并不总是导致均匀传播,因此您可以在以模数作为索引之前修改键。