哈希函数 - 两种不同的含义?

时间:2012-01-06 17:17:20

标签: algorithm hash integer-hashing

当我们说 哈希函数 时,我发现这意味着在大多数文章中将密钥的序列字节转换为32位或64位无符号整数,例如,请参阅{{3} }

然而,当你实现hash_table时,看起来哈希函数意味着将一个非常大的整数转换为更小的内部数组索引,并且在这个域中,上面提到的“哈希函数”的含义被改为哈希值键

  1. 我的理解是对的吗?
  2. 有人可以提供关于将大整数转换为较小内部数组索引的一些见解或链接或论文吗?
  3. 由于

3 个答案:

答案 0 :(得分:1)

我对“哈希函数”的理解是这样的:从集合A到集合{0,1,2,...,n}的任何函数,其中n是非负自然数。其他任何东西都不是“散列函数”意味着什么的一部分。您的两个示例 - 以及许多其他示例 - 都包含“哈希函数”,因为它们将事物映射到非负整数的子集。将“哈希函数”应用于问题的方式也不是定义的一部分。

我甚至不认为域必须比codomain大,但我可能错了。我不认为codomain可以是无限的,但我可能是错的。

答案 1 :(得分:1)

“散列”一词通常涵盖上述两种含义;正如其他答案所指出的,操作是相似的。此外,这两个过程通常串联使用 - 一个没有另一个就没有用。

在寻找或设计散列系统时,繁琐的部分正在生成分布均匀的32/64位整数(实际的“散列函数”)。一旦你有一个很好的初始哈希值,你使用它的输出的确切方式并不重要,只要结果在你的最终索引中相当均匀地分布。 (这种功能划分允许您独立于散列函数更新算法/数据结构。)

生成最终索引(适用于固定大小的哈希表)的显而易见的方法是将哈希值取模数索引。但是,使用散列值的方式取决于应用程序(例如,动态大小的散列表可能会执行与固定大小的表不同的操作)。

答案 2 :(得分:0)

hash function只是从大数据集到较小数据集的映射。在hash table的情况下,较小的数据集(通常是指出的整数)用作存储桶的查找键。

根据您的示例文章,所有这些哈希函数输出的所有整数将用作哈希表的查找索引。