我有关于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
如果问题陈述含糊不清,请告诉我。
答案 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)