在运行时(Java / Android)之前从巨大的文本文件创建树结构

时间:2013-10-01 12:25:58

标签: java android tree spell-checking

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

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

更多详情:

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

1 个答案:

答案 0 :(得分:0)

如果您只需要.contains(String word)且尺寸仅为35 MB,我建议使用HashSetHashSet<String>。它的行为与字典完全相同,因为字符串可以很好地开始使用它也可以非常快速地构建。 contains(word)也是具有O(1)性能的集合的内置方法。

如果您不想在运行时构建字典,可以将其转储到database一次(第一次运行您的应用程序),并在将来阅读它。

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