2016-04-12 53 views
0

我有一个简单的问题困在我的脑海里,一直困扰着我。我的教授简单地说散列函数是关键%arraysize。这对每个哈希表都必须这样吗?还是我们决定的东西?我们是否真的为我们创建的每个哈希表编写哈希函数?例如,它可以是不同的,简单地说,散列函数=密钥。散列函数和余数运算符

回答

0

通常,散列函数的域比其范围大得多。例如,散列可能接受“所有unicode字符串长度小于2^64个字符”并输出“16位数字”。

是的,对于少数应用程序,使用标识函数作为散列函数是有意义的,尽管散列表开始看起来非常像普通数组。

对于散列表,一般来说,模(%)是一个不错的选择:它在计算上很容易,并且在通常情况下可以很好地展开。然而,它不是密码强大的,许多应用程序都需要这样做。

0

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

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