哈希函数分类


9

在互联网上,我遇到了这个问题:

根据找到键值的各种方法对散列函数进行分类。

像这样的答案

  • 直接法
  • 减法
  • 模除法
  • 数字提取方法
  • 中方法
  • 折叠方式
  • 伪随机法

我觉得很奇怪。我想我对哈希非常了解,但这对我来说简直是胡言乱语,有人可以解释吗?

Answers:


4

它们是将哈希码转换为包含值的数组索引的方法。假设您的哈希码为0x12345678。数量非常大,因此您不太可能拥有此大小的数组。如果你这样做,你就可以做

Value = array[0x12345678];

并完成(直接方法)。

如果您不这样做,那么您会想出一种方法,可以在尝试避免太多冲突的同时,将此值转换为适合数组大小的值。所使用的术语可能也被其他名称所知,但是例如,您可以掩盖哈希码的较高位

Value = array[hashcode & 0xffff];

或者根据数组大小修改哈希码

Value = array[hashcode % array.size()]; // modulo division

编辑:此链接可能有帮助


谢谢,就是这样-链接似乎是此***的来源。由于它们将许多东西混合在一起仍然没有任何意义:1.从键(例如,折叠和加法)计算hashCode; 2.改进(=涂抹)哈希(例如,中间正方形); 3.映射索引的哈希值(例如,模数“&”)。
maaartinus 2012
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.