【发布时间】:2013-12-10 03:05:55
【问题描述】:
我正在寻找一些高级想法/想法来帮助我为 Dictionary 构建数据结构。我有一个传统的“产品(药物)搜索系统”,它本质上非常缓慢和复杂。我们需要完全重新构建系统以获得高效和可维护的解决方案。
为了简化问题,我以“字典”为例(我希望我的新系统表现得像字典)
- 我应该可以存储 Word、description 和几个同义词(等效的仿制药),
- 单词不能重复
- Synonyms 也将是 Word 的实例(它应该包含单词的行为、描述和同义词)。
- 搜索速度更快
用例
- 搜索单词时,会显示其含义和同义词
- 更快的搜索
- 应该可以删除同义词
- 添加新词,应该可以添加到任何现有词的同义词
我创建了如下所示的数据结构
Class Word {
String meaning;
List<Word> synonyms;
}
为了存储单词,我正在考虑使用TreeSet
因为
TreeSet 提供了 Set 接口的实现,它使用 用于存储的树。对象按排序的升序存储。 访问和检索时间非常快,这使得 TreeSet 存储大量排序信息时的绝佳选择 必须尽快找到。
或者我可以使用HashMap,其中单词和同义词实例的哈希码相等,这样可以加快检索速度。
我仍然可以看到很多挑战
添加新词时如何与其同义词链接
词多时查找会很慢
编辑词也应该反映同义词,反之亦然
任何想法/输入/技巧都会受到高度重视
【问题讨论】:
-
我在现实世界中建立了这样一个系统。单词不是唯一的。相同的拼写可以有多种形式(动词、名词、形容词等)或相同的形式(名词)但有多个独立的含义,其中每个含义都有自己的同义词集。单词可以有不同的拼写。在实践中,您需要多个级别:一个用于纯拼写,一个用于单词类型,一个用于特定词义。在最底层,您可以添加一些关注点(例如,链接到同义词)。
-
你想如何搜索一个词?如果您不关心订购,为什么要使用
TreeSet而不是HashSet?为什么同义词也需要是Word,根据定义,它们与父Word共享它们的meaning? -
用用例更新问题,TreeSet 的检索速度应该比 HashSet 快。
-
我主要是在寻找一些可以帮助我构建高效系统的一般想法(不是任何代码)。评论、意见、链接、参考是我所寻找的理想选择。完成架构后,我将在这里巩固我的发现 -
标签: java data-structures