[英]How do I implement linear probing in C++?
我是 Hash Maps 的新手,我明天有一个任务要交。 我实施了一切,一切都很好,除了发生碰撞时。 我不太明白线性探测的想法,我确实尝试根据我的理解来实现它,但是由于某种原因,程序停止了表大小 < 157 的工作。
void hashEntry(string key, string value, entry HashTable[], int p)
{
key_de = key;
val_en = value;
for (int i = 0; i < sizeof(HashTable); i++)
{
HashTable[Hash(key, p) + i].key_de = value;
}
}
我认为通过每次向哈希函数添加一个数字,2 个存储桶将永远不会获得相同的哈希索引。 但这没有用。
具有线性探测的哈希表需要您
就是这样。 在实践中它看起来像这样:
bool hashEntry(string key, string value, entry HashTable[], int p)
{
bool inserted = false;
int hval = Hash(key, p);
for (int i = 0; !inserted && i < p; i++)
{
if (HashTable[(hval + i) % p].key_de.empty())
{
HashTable[(hval + i) % p].key_de = key;
}
if (HashTable[(hval + i) % p].key_de == key)
{
HashTable[(hval + i) % p].val_en = value;
inserted = true;
}
}
return inserted;
}
请注意,在线性探测哈希算法中扩展表是乏味的。 我怀疑这会在你的学习中出现。 最终,您需要跟踪占用了多少插槽,以便当表超过指定的负载因子(例如 80%)时,您扩展表,重新散列新p
大小的所有条目,这将改变它们最终驻留的位置。
无论如何,希望它是有道理的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.