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

问题描述 投票:1回答:1

如您所知,哈希表是一种数据结构。在学习这种数据结构时,我发现很难理解查找给定项目位置的算法。我称它为[[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,这让我感到非常困惑。
  • c++ arrays hash hashtable
    1个回答
    0
    投票
    因此,让我向您解释上面的代码,首先,在代码中,它们已经在“

    currentpos”中传递了值x,而另外一个东西“ currentpos”是我们在*中传递的索引。正如您所问的,为什么他们使用偏移量,所以他们使用“ 偏移量>>”来增加“ 当前位置 即偏移量是将增加当前位置的值”。] >如果上面的陈述使您感到困惑,那么就暂时假设他们已经像在循环中使用了

    “ i”

    一样将“ offset

    ”用作iterator他们在此代码中使用了Linear Probing,并且每次偏移值增加2。

    ==>

    为什么“ 2”?

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

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

    © www.soinside.com 2019 - 2024. All rights reserved.