Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hash 布谷鸟哈希:在哈希函数中检测冲突的最佳方法是什么?_Hash_Hashmap - Fatal编程技术网

Hash 布谷鸟哈希:在哈希函数中检测冲突的最佳方法是什么?

Hash 布谷鸟哈希:在哈希函数中检测冲突的最佳方法是什么?,hash,hashmap,Hash,Hashmap,我实现了一个基于布谷鸟哈希的hashmap。 我的散列函数接受任意长度的值,并返回long类型的键。要将键与数组大小n相匹配,请执行键%n 我正在考虑以下场景: 将带有键A.key的值A插入位置A.key%n 使用键A查找值B 所以在这个例子中,我得到了值A的条目,但无法识别值B甚至没有被插入。如果我的哈希函数为两个不同的值返回相同的键,就会发生这种情况。使用不同的关键点但使用相同位置的碰撞没有问题 检测这些碰撞的最佳方法是什么? 是否每次插入或搜索项目时都必须检查原始值是否相等?与大多数散

我实现了一个基于布谷鸟哈希的hashmap。 我的散列函数接受任意长度的值,并返回long类型的键。要将键与数组大小n相匹配,请执行键%n

我正在考虑以下场景:

  • 将带有键A.key的值A插入位置A.key%n
  • 使用键A查找值B
所以在这个例子中,我得到了值A的条目,但无法识别值B甚至没有被插入。如果我的哈希函数为两个不同的值返回相同的键,就会发生这种情况。使用不同的关键点但使用相同位置的碰撞没有问题

检测这些碰撞的最佳方法是什么?
是否每次插入或搜索项目时都必须检查原始值是否相等?

与大多数散列方案一样,在布谷鸟散列中,散列代码告诉您在表中查找相关元素的位置,但期望您在表中同时存储键和值,以便在返回存储值之前,您首先将存储在该插槽中的密钥与正在查找的密钥进行核对。这样,如果两个对象具有相同的哈希代码,则可以确定存储在该插槽中的对象。

与大多数哈希方案一样,在布谷鸟哈希中,哈希代码告诉您在表中查找相关元素的位置,但是我们希望您将键和值都存储在表中,以便在返回存储的值之前,首先检查存储在该插槽中的键与您要查找的键。这样,如果两个对象的哈希代码相同,则可以确定存储在该插槽中的对象。

我不确定是否理解您的问题。您是否在询问如何判断在查找过程中何时发生冲突,以便搜索其他表?或者,您正在询问如何处理插入的值与表中已存在的另一个对象具有相同哈希代码的情况?如果我插入值a并搜索值B,但我的哈希函数返回值A和值B的键相同。我想如果搜索B,我会得到A的条目。即使B没有被插入。问题更多的是,如果哈希函数为不同的输入返回相同的值,会发生什么,在用模插入数组之前。我不确定我是否理解你的问题。您是否在询问如何判断在查找过程中何时发生冲突,以便搜索其他表?或者,您正在询问如何处理插入的值与表中已存在的另一个对象具有相同哈希代码的情况?如果我插入值a并搜索值B,但是我的散列函数为值A和值B返回相同的键。我想如果我搜索B,我会得到A的条目。即使B没有被插入。问题更多的是,如果散列函数为不同的输入返回相同的值,在数组中以模插入键之前会发生什么。