最坏情况哈希函数

时间:2017-05-03 10:42:58

标签: java hash hashtable

在课堂上提到的“最坏情况哈希函数,h(x)= 1”

(我的导师已经离开城镇几个星期;我显然会问他是否可以)。

我的问题:“最坏情况哈希函数”究竟是什么意思?是这样的,每个元素被赋予相同的值1(或1%tableSize),或者给予elementOne哈希值1,elementTwo 2,elementThree 3,依此类推?

可能是一个菜鸟问题,但我想我无论如何都会问它。

5 个答案:

答案 0 :(得分:5)

散列函数的质量取决于与多个不同对象发生碰撞的概率。完美的哈希函数将所有对象映射到完全没有冲突的数字,从而保证在桶之间均匀分布项目。

相反,最糟糕的哈希函数通过为所有对象返回相同的值来保证冲突,无论您传递的对象是什么。这会将基于散列的查找转换为冲突解决方案查找,从而消除了首先使用基于散列的容器的任何优势。

答案 1 :(得分:3)

最差的哈希函数是返回常量值的函数。即该类型的所有对象具有相同的哈希值,导致大量冲突。

虽然通常无法完全避免碰撞,但最小化碰撞对于使用哈希值的任何事物的性能都很重要。

应该注意的是,虽然它是一个糟糕的哈希函数,但它在技术上是正确的,因为对哈希函数的要求只是为被认为相等的对象返回相同的值(这通常会这样做,因为它返回相同的一切的价值观。)

答案 2 :(得分:2)

在最坏的情况下,每个对象都具有相同的散列(例如1)。这与equals一致,只要两个相等的对象总是具有相同的哈希值,那么它就可以工作;但它不会给你一个好的哈希给出的任何查找好处,因为每次你尝试查找一个对象时,你必须查看集合中的每个对象(因为它们都有相同的哈希值)

答案 3 :(得分:0)

最差的哈希函数是一个返回常量值的函数。 在基于散列的集合中,根据散列值存储对象 因此,如果对于任何对象,您获得相同的哈希值,则意味着所有对象最终都存储在同一位置 因此,集合需要迭代始终始终与此哈希值关联的桶/槽相同以检索对象。

你失去了使用哈希函数的兴趣。

答案 4 :(得分:0)

无论x是什么,您定义的散列函数h(x)=1都会生成相同的值。理想的散列函数将为x的每个值生成唯一的密钥。常量哈希函数将最终为x的每个值生成相同的哈希值。因此,如果你采用哈希表的情况,它将是一个具有巨大链表的单个元素表