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

二次探测哈希表的限制

曾丰茂
2023-03-14

我在做一个程序,比较哈希表中线性探测、二次探测和单独链接所需的平均访问量和最大访问量。

我已经做了三个案例的元素插入部分。当从哈希表中找到元素时,我需要有一个结束搜索的限制。在单独链接的情况下,当下一个指针为空时,我可以停止。对于线性探测,当探测到整个表时,我可以停止(即表的大小)。在二次探测中,我应该用什么作为限制?表大小可以吗?

我的二次探测函数是这样的

newKey = (key + i*i) % size;

其中i从0到无穷大。请帮帮我...

共有3个答案

袁建木
2023-03-14

在Excel中进行了一些模拟之后,似乎只需要测试迭代到i=size/2。这是在使用标准方法将序列完美平方添加到单个散列位置时发生的。

如果重新访问某个位置,您可以退出的答案将不允许测试二次探测法可以达到的所有可能位置,至少不允许测试所有阵列大小。(我测试了数组大小21,发现I=5会重新访问与I=2相同的位置,但I=6会产生之前未计算的位置。)

东方镜
2023-03-14

请参阅此链接。如果您的表大小是2的幂,并且您使用的是重探测函数f(i)=i*(i 1)/2,您可以保证遍历整个表。如果您的表大小是质数,您可以保证遍历至少一半的表。一般来说,您可以检查是否在某个时候回到了原始点。如果发生这种情况,您需要重新散列。

彭宏阔
2023-03-14

对于此类问题,请将i的增长分为两部分进行分析:

第一个间隔:i0变为size-1

在这种情况下,我目前还没有解决方案。希望能更新。

第二个间隔:isize变为infinity

在这种情况下,i可以表示为i=size k,然后

newKey = (key + i*i) % size 
       = (key + (size+k)*(size+k)) % size
       = (key + size*size + 2*k*size + k*k) % size
       = (key + k*k) % size

所以可以肯定的是,在i到达size之后,我们将开始探测以前探测过的单元格。所以您只需要考虑i从0到size-1的情况。因为Rest只是一次又一次的相同故事。

到目前为止,这个故事告诉我:一个简单的分析表明,我最多需要探测size次,因为超过size次后,我开始探测相同的细胞。

 类似资料:
  • 这是一个类似于线性探测运行时的问题,但它涉及二次探测。 对我来说,“理论上最坏的情况是O(n)”对于线性探测是有意义的,因为在最坏的情况下,你可能需要遍历每个桶(n个桶) 二次探测的运行时是什么?我知道二次探测-1, 4, 9, 16,......我最初的想法是这是对数n(指数)的一些变化,但没有一致的基数。

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

  • 我在研究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

  • 问题内容: 当大小超过maxthreshold值时,如何在哈希表或哈希表中进行重新哈希处理? 是否所有对都已复制到新的存储桶阵列中? 编辑: 重新哈希后,同一存储桶(位于链接列表中)中的元素会发生什么情况?我的意思是说,他们在重新哈希处理后会留在同一个桶中吗? 问题答案: 问题中的最大阈值称为负载系数。 建议负载系数约为0.75。负载因子定义为(m / n),其中n是哈希表的总大小,m是在需要增加