2016-01-22 77 views
1

我实现了基于杜鹃哈希的哈希映射。 我的散列函数采用long类型的任何长度和返回键的值。要将键匹配到我的数组大小n,我需要键%n。布谷鸟哈希:什么是散列函数中检测碰撞的最佳方法?

我正在考虑以下情形:

  • 与关键A.key到位置A.key%N
  • 查找值B与关键A.key

插入值A所以对于这个例子,我得到了A值的条目,并且没有识别出B值甚至没有被插入。如果我的散列函数为两个不同的值返回相同的键,就会发生这种情况碰到不同的钥匙但碰到相同的位置是没有问题的。

检测这些碰撞的最佳方法是什么? 如果原始值相等,每次插入或搜索项目时都需要检查吗?

+0

我不知道我理解你的问题。你是否在询问如何判断在查找过程中发生碰撞,然后再搜索其他表?还是你问如何处理这种情况:你插入一个与已经在表中的另一个对象具有相同散列码的值? – templatetypedef

+0

如果我插入值A并且搜索值B,但是我的散列函数为值A和值B返回相同的键。如果我搜索B,我想我会得到A的条目。即使B没有被插入。 – Opinel

+0

问题是关于如果散列函数在不同的输入中返回相同的值,然后将键以模数插入数组之前会发生什么。 – Opinel

回答

0

与大多数散列方案一样,在布谷散列中,散列码告诉你在表中查找问题元素的位置,但期望的是将表键和值存储在表中,以便在返回存储的值,您首先检查存储在该插槽中的密钥与您正在查找的密钥。这样,如果您为两个对象获取相同的散列码,则可以确定哪个对象存储在该插槽中。