0

我目前正在开发一个用 Java 编写的 Android 文字游戏,它需要一些拼写检查方法来检查玩家创建的单词是否正确。我在文本文件 (*.txt) 中保存了正确单词(波兰语)的完整列表,但它非常庞大,因为它包含近 300 万个单词并且大小为 35 MB。我做了一些研究,发现保存这些数据的最佳结构将是三元搜索树,因为它在空间和时间上都是有效的。

我的问题是如何在运行时之前从我的巨大文本文件中创建三元搜索树结构?它不能在运行时执行,因为它需要很长时间并且我会耗尽内存(我已经尝试过它只是出于好奇它会以何种方式崩溃)。所以我认为最好的方法是在编译之前创建这样的结构并将其作为某种资源添加到项目中,但不幸的是我不知道该怎么做。如果在编译之前无法实现,也许您知道如何在编译期间创建这样的结构?

更多细节:

  • 我真的很想将此文本文件用作我的字典,所以请不要建议我使用其他字典服务。
  • 我需要对这个数据结构执行的唯一方法是:
    boolean contains(String word)它会告诉我这个词是否正确。
4

1 回答 1

0

如果您只需要.contains(String word)并且大小仅为 35 MB,我会推荐一个HashSet , HashSet<String>. 它将完全像字典一样,并且由于字符串从一开始就可以很好地散列,因此它的构建速度也非常快。这contains(word)也是具有 O(1) 性能的集合的内置方法。

如果您不想在运行时构建字典,您可以将其转储到数据库一次(您的应用程序第一次运行时)并在将来从中读取。

编辑:我不知道 android 应用程序有最大内存限制。您可以通过将整个文件转储到可以非常有效地读取和写入的数据库(只是一个文件)来规避这种情况。请检查Android 示例。如果您有 eclipse 并且示例是从 android sdk 管理器安装的,您可以启动一个新项目(Android 示例),从中选择 Searchable Dictionary 示例并查看源代码并查看它如何处理从 .txt 文件创建数据库。上面的链接包含有关安装示例的完整说明。android 数据库(SQLite)显然支持高达 1TB 的数据库,所以你应该没问题。

于 2013-10-01T12:35:57.177 回答