多方向哈希表

时间:2013-07-22 23:17:37

标签: c++ algorithm data-structures hashtable binary-search-tree

如果之前有人问我,我会事先道歉。如果有,我不知道这个数据结构会被调用。

我有一个N(约300或更少)小部件的集合。每个小部件都有M(大约10个)不同的名称。此集合将填充一次,然后多次查找。我将用C ++实现它。

这方面的一个例子可能是200人的集合,并以7种不同的语言存储他们的名字。

查找功能基本上如下所示: lookup(“name”,A,B),它将返回名称“name”从语言A到语言B的转换(仅当名称在集合中时)。

文献中是否有任何已知的数据结构可以有效地执行此类操作?最明显的解决方案是为查找创建一堆哈希表,但是为所有可能的对提供MxM哈希表会很快变得难以处理并且内存效率低下。我也愿意考虑排序数组(二进制搜索)甚至树。由于集合不是很大,所以log(N)查找就可以了。

谢谢大家!

2 个答案:

答案 0 :(得分:1)

根据您对所需查找函数的描述,听起来您可以使用单个哈希表,其中键为tuple<string, Language, Language>,值为翻译结果。密钥中的两种语言分别标识字符串的源语言和所需翻译的语言。

答案 1 :(得分:1)

创建一个N-by-M数组D,这样D[u,v]就是用于小部件u的语言v中的单词。

同时创建M个哈希表,H 0 ...Hₘ(其中m是M-1),如果w是语言v中小部件u的单词,则Hᵥ(w).data为u。

执行lookup(w, r, s)
(1)设置u = Hᵣ(w).data
(2)如果D[u,r]等于w,则返回D[u,s],否则返回not-found。