什么是“哈希函数生成器”

时间:2016-06-10 04:48:38

标签: hash

我多次听到/读过这个词,但无法理解。该名称暗示它应该“生成一个哈希函数”,我天真地想象它在C中生成一个源代码。我查看了网络搜索,在Stackoverflow上,查看了维基百科。但找不到好的定义,没有例子。

2 个答案:

答案 0 :(得分:2)

来自Wikipedia

  

集合S的完美散列函数是映射的散列函数   S中的不同元素到一组整数,没有碰撞。一个   完美散列函数具有许多与其他散列相同的应用程序   功能,但具有无冲突解决方案的优点   实施。

如果事先知道你的密钥,你可以构建一个完美的哈希函数。执行此操作的程序称为完美哈希函数生成器

一个例子是GNU gperf,它的工作方式与您的建议一样,包含密钥列表并打印出C源代码。

答案 1 :(得分:2)

哈希函数生成器是用于查找满足特定条件的哈希函数的工具。它的输出可以是任何明确描述哈希函数的形式,通常采用某种编程语言中的源代码形式。

实施例

完美哈希函数

给定一组不同的字符串(例如{“banana”,“peach”,“pineapple”,“apple”,“microsoft”,“pinemicrosoft”}),找到一个将它们映射到不同整数的哈希函数值。例如:

"banana"        => 6
"peach"         => 2
"pineapple"     => 123
"apple"         => 3
"microsoft"     => 77
"pinemicrosoft" => 451

对于不属于我们预定义集的输入字符串,哈希函数可能返回的内容没有限制。

最小完美哈希函数

与上面类似,但哈希值必须形成一个连续的范围。

"banana"        => 1
"peach"         => 2
"pineapple"     => 3
"apple"         => 4
"microsoft"     => 5
"pinemicrosoft" => 6

满足最小完美散列函数功能要求的最简单实现是

  • 在内部存储目标字符串的排序数组
  • 查找该数组中的输入值和
  • 返回其索引。

这种实现的缺点是随着目标输入集的大小增加,它消耗存储并减慢速度。因此,散列函数的另一个要求是最小化其大小和运行时间。

Classificator

给定一组分组为非重叠子集的不同字符串,找到一个散列函数,将每个字符串映射到它所属的子集的索引。

例如:

any of {"banana", "peach", "apple"}      => 1 // fruit
any of {"lion", "zebra", "dog", "eagle"} => 2 // animal
any of {"red", "green", "blue", "white"} => 3 // color