查找项目在哈希表中的位置
Finding the position of an item in Hash Table
如您所知,哈希表是一种数据结构。在学习这种数据结构时,我发现很难理解查找给定项目位置的算法。我称它为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,因此您可以与编写器或从任何地方获得此代码进行检查。
仍然,如果您遇到任何问题,请随时询问。
相关文章:
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 用C++将哈希表写入文件并从文件中恢复
- C++中的并发哈希表
- 在具有开放寻址的哈希表中插入节点 [优化逻辑]
- 与C++哈希表的基础知识混淆
- 调整大小和复制哈希表数组中的元素
- 带链接的基本哈希表
- C++哈希表中,两个相同的实现,但一个给出错误
- 如果索引不是整数,我们如何在 C++ 中插入哈希表
- 查找项目在哈希表中的位置
- 为什么C++ STL 哈希表 (unordered_map) 不接受向量作为键
- C++哈希表 - 如何解决自定义数据类型作为键的unordered_map冲突?
- 使用哈希表设置实现
- 同时写入和读取哈希表
- 在 C++ 中为特定哈希表创建插入函数
- 我可以比朴素哈希表更快地将随机字符串映射到两个类吗?
- 哈希表:船舶记录
- 使用rehash的C++哈希表问题
- 实现具有浮点键的类似哈希表的数据结构,其中公差内的值被合并在一起