当前位置: 首页 > 知识库问答 >
问题:

哈希表线性探测

饶明亮
2023-03-14

我正在用一个字符串数组单维和一个2维int数组制作哈希表。我正在使用线性探测进行冲突检测,当我意识到如果检测到冲突,单词的hashCode将不再是索引时,我真的很兴奋地完成了这个程序。我该如何保存该索引以备以后使用?

共有2个答案

齐晟
2023-03-14

在开放寻址中,线性探测不仅用于解决冲突;它也用于搜索被查找的密钥。你总是从哈希代码派生的索引开始,继续前进,直到找到你要找的东西,或者到达一个空槽或一个具有不同哈希代码的条目。这实际上与单独的链没有什么不同,在单独的链中,你还需要遵循链,直到找到密钥。

翟嘉祥
2023-03-14

这是线性探测的缺点之一。如果发生冲突,您需要转到下一个可用索引,但这不能确保下一个元素就是您要查找的元素,因此导致您的复杂性为O(n),而不是预期的O(1)。你可以考虑每个索引都有一个桶。如果发生冲突,您仍然可以使用正确的索引,例如,您只需在LinkedList中进行迭代,即可找到您要查找的值。

线性探测更适合存储空间有限的设备。如果你在桌面上编写程序,我会建议使用桶式方法或官方术语单独链接。希望这有所帮助

 类似资料:
  • 我在研究hackerearth上的哈希表,在那里我遇到了用线性探测实现哈希表的代码。我对这段代码有两个疑问:- 1)为什么他们声明大小为21(而不是大小为20)的hashTable最多容纳20个元素? 2) 在Insert函数中,当循环无限运行时,如果在连续迭代之后,索引的值变为索引的初始值,不是吗? 链接至黑客主页:-https://www.hackerearth.com/practice/da

  • 我试图解决这个问题,我需要实现线性探测。 给定一个整数数组和一个哈希表大小。使用线性探测将数组元素填充到哈希表中以处理冲突。 例1: 例2: 您的任务: 您不需要读取输入或打印任何内容。 您的任务是完成函数linearProbing(),该函数将空哈希表(hash)、哈希表大小(hashSize)、整数数组arr[]及其大小N作为输入,并将数组arr[]的所有元素插入给定的哈希表中。 哈希表的空单

  • 小明的通讯录 小明上中学了,为了方便和家里以及同学联系,爸爸终于给小明买了一台手机。该手机的存储容量可以扩充,因此,可以存储的电话号码数量没有限制。 小明的手机有一个特殊的功能,对于打进或拨出的电话,只要是新号码,手机均会自动进行储存。 给定小明在一个月的使用期间的手机通讯记录,请给出此时此刻小明的手机中存储了多少个电话号码。 输入格式: 本题只有一组测试数据。第一行先输入一个整数N( N不超过1

  • 我在做一个程序,比较哈希表中线性探测、二次探测和单独链接所需的平均访问量和最大访问量。 我已经做了三个案例的元素插入部分。当从哈希表中找到元素时,我需要有一个结束搜索的限制。在单独链接的情况下,当下一个指针为空时,我可以停止。对于线性探测,当探测到整个表时,我可以停止(即表的大小)。在二次探测中,我应该用什么作为限制?表大小可以吗? 我的二次探测函数是这样的 其中i从0到无穷大。请帮帮我...

  • 我试图理解使用Java实现的线性探测哈希表。然而,我对理解为什么M的初始值为30001感到失望。下面给出了代码的框架。 我的问题是为什么M在这里被初始化为30001。这是经验法则吗?初始化线性探测哈希表时,我应该如何确定M的大小?

  • 线性探测(哈希表)有一件事对我来说并不直观。如果我把散列结果的key1放到数组索引1中。然后我放了钥匙2- 或者,我们的散列函数(如果写得足够好的话)在索引中平均分配键,并且我们不断调整数组的大小,使其最大半满,这就减轻了这种情况?