【问题标题】:Building data structure for Dictionary构建字典的数据结构
【发布时间】:2013-12-10 03:05:55
【问题描述】:

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

为了简化问题,我以“字典”为例(我希望我的新系统表现得像字典)

  1. 我应该可以存储 Word、description 和几个同义词(等效的仿制药),
  2. 单词不能重复
  3. Synonyms 也将是 Word 的实例(它应该包含单词的行为、描述和同义词)。
  4. 搜索速度更快

用例

  1. 搜索单词时,会显示其含义和同义词
  2. 更快的搜索
  3. 应该可以删除同义词
  4. 添加新词,应该可以添加到任何现有词的同义词

我创建了如下所示的数据结构

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

为了存储单词,我正在考虑使用TreeSet

因为

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

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

我仍然可以看到很多挑战

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

  2. 词多时查找会很慢

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

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

【问题讨论】:

  • 我在现实世界中建立了这样一个系统。单词不是唯一的。相同的拼写可以有多种形式(动词、名词、形容词等)或相同的形式(名词)但有多个独立的含义,其中每个含义都有自己的同义词集。单词可以有不同的拼写。在实践中,您需要多个级别:一个用于纯拼写,一个用于单词类型,一个用于特定词义。在最底层,您可以添加一些关注点(例如,链接到同义词)。
  • 你想如何搜索一个词?如果您不关心订购,为什么要使用TreeSet 而不是HashSet?为什么同义词也需要是 Word,根据定义,它们与父 Word 共享它们的 meaning
  • 用用例更新问题,TreeSet 的检索速度应该比 HashSet 快。
  • 我主要是在寻找一些可以帮助我构建高效系统的一般想法(不是任何代码)。评论、意见、链接、参考是我所寻找的理想选择。完成架构后,我将在这里巩固我的发现 -

标签: java data-structures


【解决方案1】:

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

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

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&lt;String, LinkedList&lt;String&gt;&gt;。一旦使用 Trie 找到一个词,获取相关的系统别名将是 O(1)。

【讨论】:

  • Trie 非常好,但我正在寻找在不同级别引用相同的节点(单词)(与树的概念相反)-恐怕会变得太混乱
  • 我同意你的观点,我应该能够扩展Trie 算法以满足我的要求(存储同义词)
  • 是的,这就是我想要寻找的。我认为为两个不同的需求找到一个解决方案不会导致简单的实现。如果您可以将synonym 列表与word 对象解耦,IMO 就会变得不那么混乱。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 2023-04-08
    • 2011-04-13
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多