[英]Creation of the Tree Structure from a huge text file before Runtime (Java/Android)
我目前正在开发一个用Java编写的Android文字游戏,该游戏需要一些拼写检查方法来检查玩家创建的单词是否正确。 我有保存在文本文件(* .txt)中的正确单词(波兰语)的完整列表,但它很大,因为它包含近3百万个单词,大小为35 MB。 我进行了一些研究,发现保存此数据的最佳结构将是三元搜索树,因为它具有时空性。
我的问题是如何在运行时之前通过巨大的文本文件创建三元搜索树结构? 它不能在运行时执行,因为它会花费很多时间,而且我会用光内存(我只是出于好奇而尝试过崩溃的方式)。 因此,我认为最好的方法是在编译之前就创建这样的结构,并将其作为某种资源添加到项目中,但是不幸的是我不知道该怎么做。 如果在编译之前无法做到这一点,也许您知道如何在编译期间创建这样的结构?
更多细节:
boolean contains(String word)
这将告诉我该单词是否正确。 如果您只需要.contains(String word)
并且大小仅为35 MB,则建议使用HashSet , HashSet<String>
。 它的行为就像字典一样,而且由于Strings很好地可哈希,因此它的构建速度也非常快。 contains(word)
也是具有O(1)性能的集合的内置方法。
如果您不想在运行时构建字典,则可以将其转储到数据库一次(第一次运行您的应用程序),以后再从中读取。
编辑:我不知道android应用程序的最大内存限制。 您可以通过将整个文件转储到可以非常有效地读取和写入的数据库(只是一个文件)中来规避这一问题。 请检查Android示例 。 如果您有eclipse,并且示例是从android sdk管理器安装的,则可以启动一个新项目(Android示例),从中选择Searchable Dictionary示例并查看源,并查看其如何处理从.txt文件创建数据库的过程。 上面的链接包含有关安装示例的完整说明。 android数据库(SQLite)明显支持高达1TB的数据库,因此您应该还不错。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.