【问题标题】:Which data structure should be chosen? [Android Dictionary]应该选择哪种数据结构? [安卓词典]
【发布时间】:2012-04-27 20:22:37
【问题描述】:

我从网上搜索了几个小时的信息,但我仍然不确定。我的问题是:我想在 android 设备(java 基础)上实现一个字典,我的要求是速度,然后是内存效率,但我无法决定使用哪种数据结构进行搜索。 我有一个数据结构列表,帮助我理解它们并选择一个:

  • 三叉树
  • TRIE
  • Aho–Corasick 树
  • [...您的建议 DS...]

如果有人可以指导我在我们找到单词后获得结果(许多领域:发音,意思,例句......),那将是非常友好的?我们会将这些信息保存在另一个数据文件中吗?

【问题讨论】:

  • 你的问题很混乱。话虽如此,有一个内置的键值对数据结构称为 HashMap:docs.oracle.com/javase/7/docs/api/java/util/HashMap.html
  • 感谢阅读,我的字典将使用一个开源的dict数据文件,然后我会索引它们,可能是几个字典。我的意思是这些词非常大,而且 HASHMAP 的内存效率不高,不能给我列出具有相同前缀的词。我打算使用一棵树-DS。请给我看另一个指南
  • 如果您关心内存(根据应用程序的结构,这可能不是真正的问题——服务器执行自动完成,例如内存中的 EJB)使用 in -内存数据库或其他类型的故障转移。对于大多数常见的英语,您只看到 ~ 150K - 400K。你为什么不尝试一下,看看你有没有问题。 Trie 是一个笑话,构建和高效的自动完成。特别是如果您使用参考文献。

标签: java android algorithm dictionary


【解决方案1】:

在搜索数据结构之前,您需要列出设计的主要关注点。这本词典提供了哪些功能?它的主要特点是什么?快速搜索?空间紧凑?插入/删除友好吗?交叉引用友好吗?只有牢记这些,您才能衡量候选结构的好坏。

【讨论】:

  • 感谢您的建议。正如我所说,我需要它快速运行,然后是内存紧凑性。它将能够搜索与其他词典具有相同前缀和常见搜索的列表单词。我只是停留在了解这些 DS 的优点和缺点。
  • Trie 和三叉树都是前缀搜索/列表的良好候选者。 Trie 速度更快,但使用的空间比三叉树多得多。 Hashtable 也很快,但不支持前缀列表。
  • Thankssss,我不知道我是否错过了更好的 DS,你能帮帮我吗?
【解决方案2】:

它可以通过多种方式实现,其中之一是 Trie。路线由数字表示,节点指向单词集合。 trie的用法说明here

【讨论】:

  • 是的,我从那里看到了一些新的好消息。你能告诉我在哪里可以学习创建一个开源的多字典作为stardict-goldendict吗?
【解决方案3】:

同意 Hunter Mcmillen 的评论。如果您需要像常规字典一样按字母顺序对单词进行排序,您可以使用 Java TreeMap,它是一个 SortedMap。

【讨论】:

    猜你喜欢
    • 2013-11-12
    • 1970-01-01
    • 2012-05-15
    • 2011-09-05
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    相关资源
    最近更新 更多