如您所知,哈希表是一种数据结构。在学习这种数据结构时,我发现很难理解查找给定项目位置的算法。我称它为[[findPos及其源代码如下:
int findPos(const HashedObject &x) const
{
int offset = 1;
int CurrentPos = hashfunction(x);
while(array[CurrentPos].info != Inactive && array[CurrentPos].element != x)
{
CurrentPos += offset;
offset += 2;
if(CurrentPos >= array.size())
{
CurrentPos -= array.size();
}
}
return CurrentPos;
}
我将解释此源代码中已使用的一些功能。
hashfunction(int x)
:此功能用于查找按键x
的初始位置。如果您知道哈希表,您将理解它。array
这是我用来查找位置的表格。对象array
具有2个主要属性:info和element。 array.element
包含数组中每个元素的数据。 array.info
包含数组元素的状态:有效(可用),已删除和无效(免费)(我将enum
用于这些状态)offset
。据我所知,当我想找到给定元素的位置时,我需要根据x
的值浏览表格。但是我不知道他们为什么在这里使用offset
而不是再次重用哈希函数来查找下一个位置。而且,我发现偏移量在循环后增加了2,这让我感到非常困惑。currentpos”中传递了值x,而另外一个东西“ currentpos”是我们在*中传递的索引。正如您所问的,为什么他们使用偏移量,所以他们使用“ 偏移量>>”来增加“ 当前位置 即偏移量是将增加当前位置的值”。] >如果上面的陈述使您感到困惑,那么就暂时假设他们已经像在循环中使用了 “ i”
==>
为什么“ 2”?
正如我所说,已经使用了线性探测,但是在线性探测中,偏移量的值在这种情况下根据代码的编写者增加了2,而不是1,因此您可以与编写者进行检查,或者从任何地方获得此代码。如果您仍然遇到任何问题,请随时提出。