构建Dictionary的数据结构

时间:2013-11-25 11:44:03

标签: java data-structures

我正在寻找一些高层次的想法/想法帮助我构建Dictionary的数据结构。我有一个传统的“产品(药物)搜索系统”,它本质上非常缓慢和复杂。我们需要完全重新构建系统,以获得高效且可维护的解决方案。

为简化问题,我举了一个'字典'的例子(我希望我的新系统的行为像字典)

  1. 我应该能够存储Word,描述和几个同义词(等效的通用医学),
  2. 单词不应重复
  3. 同义词也将是Word的实例(它应该包含单词,描述和同义词的行为)。
  4. 搜索速度更快
  5. UseCases

    1. 搜索单词时,显示其含义和同义词
    2. 更快搜索
    3. 应该可以删除同义词
    4. 添加新单词,应该可以添加到任何现有单词的同义词
    5. 我创建了一个如下所示的数据结构

      Class Word {
          String meaning;
          List<Word> synonyms;
      }
      

      要存储字词,我想使用TreeSet

      ,因为

        

      TreeSet提供了使用a的Set接口的实现   树存储。对象按有序,升序存储。   访问和检索时间非常快,这使得TreeSet成为了一个   存储大量已排序信息时的最佳选择   必须尽快找到。

      或者我可以使用HashMap,其中单词和同义词实例的哈希码相等,这样可以更快地检索。

      仍然可以看到很多挑战

      1. 添加新单词时如何与其同义词链接

      2. 当有大量单词时,查找会很慢

      3. 编辑单词也应反映同义词,反之亦然

      4. 任何想法/输入/技巧都会受到高度重视

2 个答案:

答案 0 :(得分:2)

您可以使用Trie将所有单词存储在字典中。为每个单词(节点)添加一个synonims列表。

答案 1 :(得分:2)

对于单词搜索和单词填写要求Trie将是一个快速的选择。看看Java implementations

  

在计算机科学中,trie,也称为数字树   基数树或前缀树(因为它们可以通过前缀搜索),是一个   有序树数据结构,用于存储动态集或   关联数组,其中键通常是字符串。

http://pathakalgo.blogspot.in/2012/11/trie-data-structure-implementation-in.html

https://www.google.co.in/search?q=Trie&client=ubuntu&channel=cs&oq=Trie&aqs=chrome..69i57j69i60l2.856j0j1&sourceid=chrome&ie=UTF-8

对于同义词链接,您可以维护Map<String, LinkedList<String>>。使用Trie找到单词后,获取相关的sysnonyms将为O(1)。