二次探测哈希表的限制

时间:2012-08-25 10:35:31

标签: algorithm data-structures hashtable quadratic probing

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

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

我的二次探测功能就像这样

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

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

3 个答案:

答案 0 :(得分:7)

对于此类问题,请分析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的情况。因为休息只是一次又一次的故事。

What the story tells up to now:一个简单的分析告诉我,我需要最多size次进行探测,因为超过size次,我开始探测相同的细胞。

答案 1 :(得分:0)

this link。如果您的表格大小为2的幂并且您使用的是rerobe函数f(i)= i *(i + 1)/ 2,则可以保证遍历整个表格。如果您的表格大小是素数,则保证至少遍历表格的一半。通常,您可以检查在某些时候您是否回到原点。如果发生这种情况,您需要重新进行更新。

答案 2 :(得分:0)

在Excel中进行一些模拟之后,似乎需要迭代到i = size / 2。这是在使用标准方法向单阴影线位置添加连续完美正方形的时候。

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