H中的哈希表设计

时间:2013-09-13 09:46:28

标签: algorithm hash hashmap hashtable

我有关于HASH功能的设计问题。

在我的程序中,我使用的是size 2^13的哈希表,其中的槽是根据我要插入的节点(哈希键)的值计算的。

现在,假设我的每个节点都有两个值|A|B|但是我使用A将值插入哈希表。

稍后,我想搜索B not A

的特定节点

这样可能吗?是的,你能突出一些设计方法吗? 约束是我必须使用A作为哈希键。

抱歉,我无法分享代码。小例子:

Value[] = {Part1, Part2, Part3};
insert(value)
check_for_index(value.part1)

value.part1用于计算广告位的索引。

找到广告位后插入"value"

稍后,

search_in_hash(part2)

check_for_index("But here I need the value.part1 to check for slot index")

那么,我怎样才能将part1, part2 & part3与之关联,以后我可以通过part2 or part3

找到广告位

如果问题陈述含糊不清,请告诉我。

1 个答案:

答案 0 :(得分:0)

除非你打算逐个元素地搜索(在这种情况下你不需要哈希,只需要一个普通的列表),那么你基本上要问的是 - 我可以使用哈希这样的哈希(X) )== hash(Y),但是X!= Y,这样你就可以使用part1映射到一个位置,然后使用part2或3映射到同一个位置。这完全违背了散列代表的位置。

你应该做的是(作为viraptor也建议),创建3个结构,每个结构使用值的不同部分进行散列,并将完整值推送到所有3.然后当你需要搜索时使用正确的哈希值你要搜索的部分。

例如:

value[] = {part1, part2, part3};
hash1.insert(part1, value)
hash2.insert(part2, value)
hash3.insert(part3, value)

然后

hash2.search_in_hash(part2)

hash3.search_in_hash(part3)

以上2应该产生完全相同的值。

还要确保所有数据操作(删除值,更改它们)同时在所有3个结构上完成。对于例如 -

value = hash2.search_in_hash(part2)
hash1.remove(value.part1)
hash2.remove(part2)        // you can assert that part2 == value.part2
hash3.remove(value.part3)