我心中有一个简单的问题让我感到困惑。我的教授简单地说哈希函数是关键字%arraysize。对于每个哈希表,这必须是这样的,还是我们决定的?我们是否真的为我们创建的每个哈希表编写哈希函数?它可以是不同的东西,例如,简单地说,哈希函数=键。
答案 0 :(得分:0)
通常,散列函数的域远大于其范围。例如,哈希可以接受"所有unicode字符串少于2 ^ 64个字符长"并输出"一个16位数字"。
是的,对于一些应用程序,使用身份函数作为哈希函数是有意义的,尽管哈希表开始看起来非常像普通数组。
对于散列表一般来说,modulo(%
)是一个不错的选择:它在计算上很容易,并且在通常的情况下展开得很好。然而,它并不具有加密性,并且很多应用程序都需要这样做。
答案 1 :(得分:0)
你有一个数组来存储结果,这是一个固定的大小并由索引引用(在你的问题的情况下,index = key%array_size,保证产生一个介于0和array_size-1之间的数字)。如果索引大于数组大小,则会出现问题。如果它总是少于那么你浪费了空间,所以任何散列的最后阶段往往是它必须适合的数组大小的模数。
当然,这并不总是导致均匀传播,因此您可以在以模数作为索引之前修改键。