我真的需要帮助插入哈希表。我现在还没完全搞定。有人可以解释外行人的二次和线性探测吗?
public void insert(String key)
{
int homeLocation = 0;
int location = 0;
int count = 0;
if (find(key).getLocation() == -1) // make sure key is not already in the table
{
//****** ADD YOUR CODE HERE FOR QUADRATIC PROBING ********
}
}
这是我正在处理的代码。我不是要求任何人这样做,我真的需要帮助来学习整个概念
非常感谢任何帮助。
答案 0 :(得分:3)
首先,我们讨论的是开放式寻址(或封闭散列)方法。如果前一个哈希码已被另一个哈希码使用,则需要处理计算新哈希码的冲突,这是因为hashamap的每个桶最多可包含1个元素。
所以你有一个带有两个参数的散列函数:
v
,用于计算哈希码的对象的值。t
,i*f
其中i
,称为 stepsize ,如果发生冲突,您每次都会向哈希函数添加f
是到目前为止达到的碰撞次数。从这开始,你有两个可能的功能:
H(v, t) = (H(v) + t) % n
H(v, t) = (H(v) + c*t + d*t*t) % n
第一个是线性函数,第二个是二次(这里是这个tecnique的名字)..你应该知道{{1 }},% n
和c
是选择常量以获得更好的哈希函数..
实际上讲线性探测:
d
H(x, 0)
H(x, i)
对于二次探测你所做的是相同的,你从H(x, i+i)
开始,然后是H(x,0)
然后是H(x,i)
,不同的是所涉及的散列函数将给步长增加不同的权重。