我正在寻找一些高层次的想法/想法帮助我构建Dictionary的数据结构。我有一个传统的“产品(药物)搜索系统”,它本质上非常缓慢和复杂。我们需要完全重新构建系统,以获得高效且可维护的解决方案。
为简化问题,我举了一个'字典'的例子(我希望我的新系统的行为像字典)
UseCases
我创建了一个如下所示的数据结构
Class Word {
String meaning;
List<Word> synonyms;
}
要存储字词,我想使用TreeSet
,因为
TreeSet提供了使用a的Set接口的实现 树存储。对象按有序,升序存储。 访问和检索时间非常快,这使得TreeSet成为了一个 存储大量已排序信息时的最佳选择 必须尽快找到。
或者我可以使用HashMap
,其中单词和同义词实例的哈希码相等,这样可以更快地检索。
仍然可以看到很多挑战
添加新单词时如何与其同义词链接
当有大量单词时,查找会很慢
编辑单词也应反映同义词,反之亦然
任何想法/输入/技巧都会受到高度重视
答案 0 :(得分:2)
您可以使用Trie将所有单词存储在字典中。为每个单词(节点)添加一个synonims列表。
答案 1 :(得分:2)
对于单词搜索和单词填写要求Trie将是一个快速的选择。看看Java implementations
:
在计算机科学中,trie,也称为数字树 基数树或前缀树(因为它们可以通过前缀搜索),是一个 有序树数据结构,用于存储动态集或 关联数组,其中键通常是字符串。
http://pathakalgo.blogspot.in/2012/11/trie-data-structure-implementation-in.html
对于同义词链接,您可以维护Map<String, LinkedList<String>>
。使用Trie
找到单词后,获取相关的sysnonyms将为O(1)。