Algorithm 哈希表的限制

Algorithm 哈希表的限制,algorithm,data-structures,hashtable,quadratic,probing,Algorithm,Data Structures,Hashtable,Quadratic,Probing,我正在做一个程序来比较哈希表中线性探测、二次探测和单独链接所需的平均访问量和最大访问量 我做了3个病例的元素插入部分。从哈希表中查找元素时,我需要有一个结束搜索的限制。 在单独链接的情况下,我可以在下一个指针为null时停止。 对于线性探测,我可以在探测整个表(即表的大小)时停止。 在二次探测中,我应该使用什么作为极限?桌子大小可以吗 我的二次探测函数是这样的 newKey = (key + i*i) % size; 其中i从0到无穷大变化。请帮助我。对于此类问题,请分两部分分析i的增长: 第

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

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

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

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

其中i从0到无穷大变化。请帮助我。

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

第一个间隔:
i
0
变为
size-1

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

第二个间隔:
i
size
变为
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
之后,我们将开始探测先前探测的单元格。因此,您只需要考虑<代码> > <代码>从0到<代码> SIZE-1/代码>的情况。因为剩下的只是一次又一次的同一个故事


到目前为止,这个故事讲述了什么:
一个简单的分析表明,我最多需要探测
大小
次,因为超过
大小
次,我开始探测相同的单元格。

请参见。如果您的表大小是2的幂,并且您使用的是重编程函数f(i)=i*(i+1)/2,则可以保证遍历整个表。如果您的表大小是一个素数,则保证至少遍历表的一半。通常,您可以检查是否在某个点返回到原始点。如果发生这种情况,您需要重新进行测试。

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


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

可能有更有效的序列,如素数。。。。