关于在an​​droid中使用Radix Tree在240k单词列表中进行英语词典单词查询的问题

应用概述

在这个游戏中,你将一封信附加到不断增长的字母链上,但每个玩家都试图不形成一个单词。 在对手选择附加到字母串的字母后,您可以选择说出这是一个字,需要检查某个数据结构。 我需要实现这个数据结构。

数据结构的要求

  1. 我需要一个数据结构能够快速判断一个单词是否存在于Android设备上的240000字的列表中。
  2. 你应该可以轻松玩最多20场比赛
  3. 应该为Android应用程序编写

一个很好的额外function还可以快速显示给定单词中的所有可能单词,但不是必需的。

我尝试了什么

基数树似乎是一个好主意,见下图。 现在我可能会后悔我投入这个时间,因为我认为它需要太多的对象。 每个黑点以及编号的圆圈都将在我的代码中表示为节点object在此处输入图像描述

基数树至少需要240k(240,000)个节点,因此对象,每个节点的每个路径都是一个字,这将导致240k字列表。 每个游戏将仅表示存储对树中当前节点的引用,这意味着额外的游戏需要很少的额外存储。

我还认为我可以将它实现为hashMap,其中包含所有可能的单词并循环遍历所有单词并在每个单词后缩小范围。 这似乎是一种计算方法,其中Radix Tree需要较少的计算但需要更多的存储空间。

[编辑]这是我的错误假设,请看下图。

我有问题

  1. Radix Tree是目前大多数Android设备所需的最佳数据结构之一吗? ( 答案/评论似乎表明它是

  2. 当你有这么多物品时,它在内存中是如何工作的? 它们都存储在ram中还是存储在磁盘上? 我可以发现这个应用程序总共可以使用16mb / 25mb / 32mb的内存 。 当将240000物体放入撞锤时,我是否可能达到超过16mb的撞锤?

  3. 您可以在运行时从文件中存储和检索大型Radix Tree对象吗? 哪个存储在res / raw文件夹中的磁盘上。

  4. 会不会(比方说)用游戏地图打开50个游戏,在每个游戏中你必须使用散列图的副本,你可以在其上缩小可能的单词,甚至可能吗? 安装后应用程序可以声明多少额外存储空间?


根据评论: 似乎我的假设是Radix Tree需要更多空间似乎是错误的:要查看更大的图像,请右键单击它并在新选项卡中打开

在此处输入图像描述

对于此应用程序,trie /前缀树/基数树似乎是完全有效的数据结构。 如果字典是固定的(即,在播放期间没有添加/删除单词),则可以通过压缩共享分支来节省内存。