我多次听到/读过这个词,但无法理解。该名称暗示它应该“生成一个哈希函数”,我天真地想象它在C中生成一个源代码。我查看了网络搜索,在Stackoverflow上,查看了维基百科。但找不到好的定义,没有例子。
答案 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
满足最小完美散列函数功能要求的最简单实现是
这种实现的缺点是随着目标输入集的大小增加,它消耗存储并减慢速度。因此,散列函数的另一个要求是最小化其大小和运行时间。
给定一组分组为非重叠子集的不同字符串,找到一个散列函数,将每个字符串映射到它所属的子集的索引。
例如:
any of {"banana", "peach", "apple"} => 1 // fruit
any of {"lion", "zebra", "dog", "eagle"} => 2 // animal
any of {"red", "green", "blue", "white"} => 3 // color