【发布时间】:2013-09-17 22:57:06
【问题描述】:
我有一个关于 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 找到插槽
如果问题陈述含糊不清,请告诉我。
【问题讨论】:
-
提供示例和代码sn-p。您使用的是哪个哈希表实现?
-
散列键是要插入的值的标识符,所以用B搜索A是不正确的。或者你可以设计一个神奇的散列函数,使 A 和 B 的散列值相同。
-
我很困惑为什么你用
part1作为散列键插入,却通过其他部分生成的键找到槽。这是散列表的工作原理en.wikipedia.org/wiki/Hash_table -
@MYMNeo 流程设计使得我必须使用
part1作为键来插入数据。可能会使用part1, part2 or part3中的任何一个来完成搜索。使用part1搜索不是强制性的,因为代码要检查part2/3是否已经在表中。或者它是否与part1关联或不在表中。 -
有什么东西阻止你为每个部分创建一个哈希表吗?插入所有内容,然后使用正确的实例查找特定部分。
标签: algorithm hash hashmap hashtable