多向哈希表
Multi-directional hash table
本文关键字:哈希表 更新时间:2023-10-16
如果之前有人问过这个问题,我提前道歉。如果有,我不知道这个数据结构会被称为什么。
我收集了N个(大约300个或更少)小部件。每个小部件都有M个(大约10个)不同的名称。此集合将填充一次,然后查找多次。我将在C++中实现这一点。
这方面的一个例子可能是一个200人的集合,并用7种不同的语言存储他们的名字。
查找函数基本上如下所示:lookup("name",A,B),它将返回名称"name"从语言A到语言B的翻译(仅当名称在集合中时)。
文献中是否有任何已知的数据结构可以有效地完成这类工作?最明显的解决方案是创建一堆用于查找的哈希表,但为所有可能的对创建MxM哈希表会很快变得笨拙,内存效率低下。我也愿意考虑排序数组(二进制搜索)甚至树。由于集合不是很大,所以log(N)查找很好。
谢谢大家!
根据您对所需查找函数的描述,听起来您可以使用一个哈希表,其中键为tuple<string, Language, Language>
,值为转换结果。键中的两种语言分别标识字符串的源语言和所需翻译的语言。
创建一个N-by-M数组D,使得D[u,v]
是v语言中小部件u的单词。
同时创建M个哈希表,H₀...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]
,否则返回未找到。
相关文章:
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 用C++将哈希表写入文件并从文件中恢复
- C++中的并发哈希表
- 在具有开放寻址的哈希表中插入节点 [优化逻辑]
- 与C++哈希表的基础知识混淆
- 调整大小和复制哈希表数组中的元素
- 带链接的基本哈希表
- C++哈希表中,两个相同的实现,但一个给出错误
- 如果索引不是整数,我们如何在 C++ 中插入哈希表
- 查找项目在哈希表中的位置
- 为什么C++ STL 哈希表 (unordered_map) 不接受向量作为键
- C++哈希表 - 如何解决自定义数据类型作为键的unordered_map冲突?
- 使用哈希表设置实现
- 同时写入和读取哈希表
- 在 C++ 中为特定哈希表创建插入函数
- 我可以比朴素哈希表更快地将随机字符串映射到两个类吗?
- 哈希表:船舶记录
- 使用rehash的C++哈希表问题
- 实现具有浮点键的类似哈希表的数据结构,其中公差内的值被合并在一起