查找项目在哈希表中的位置

Finding the position of an item in Hash Table

本文关键字:位置 哈希表 项目 查找      更新时间:2023-10-16

如您所知,哈希表是一种数据结构。在学习这种数据结构时,我发现很难理解查找给定项目位置的算法。我称它为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 个主要属性:信息和元素。array.element包含数组中每个元素的数据。array.info包含数组元素的状态:活动(可用(、已删除和非活动(免费((我使用这些状态使用了enum(

这里的问题是offset.据我所知,当我想找到给定元素的位置时,我需要根据x的值扫描表格。但我不知道为什么他们在这里使用offset而不是再次重用哈希函数来找到下一个位置。此外,我发现偏移量在循环后增加了 2,这让我真的很困惑。

因此,让我向您解释上面的代码,首先在代码中,它们在">currentpos"中传递了值x,还有一件事">currentpos"是我们在*中传递的索引。正如您所问的,为什么他们使用偏移量,因此他们使用"偏移量"来增加"当前位置,即偏移量是当前位置将增加的值"。

如果上面的陈述让你感到困惑,那么暂时假设他们使用">偏移量"作为迭代器,就像我们在循环中使用"i">一样。

他们在此代码中使用了线性探测,每次偏移量的值都增加 2。

==>为什么是" 2"?

正如我所说,已经使用了线性探测,但在线性探测中,在这种情况下,偏移量的值增加了 2,而不是根据代码的编写者增加了 1,因此您可以与编写器或从任何地方获得此代码进行检查。

仍然,如果您遇到任何问题,请随时询问。