Android-优化应用程序的启动
编辑:Android-优化应用程序的启动,android,optimization,data-structures,implementation,trie,Android,Optimization,Data Structures,Implementation,Trie,编辑: 我遵循了你的好建议,并使用了trie数据结构来包含我的措辞。我选择的结构是为感兴趣的人设计的 但现在我有另一个问题:每次启动应用程序时构建trie数据结构的时间太长了!也许我的字典太大了,或者我选择的trie的实现对于一个简单的字典来说太不合适了 那么,有没有一种方法可以在关闭应用程序(如注册数据库)后保留此结构,或者如果您认为问题是由实现引起的,您可以向我推荐另一个吗 我的android项目有一个严重的问题 这里的目标是计算所有可以由6个字母组成的系列词 为此,我的BDD中有两个表
我遵循了你的好建议,并使用了trie数据结构来包含我的措辞。我选择的结构是为感兴趣的人设计的 但现在我有另一个问题:每次启动应用程序时构建trie数据结构的时间太长了!也许我的字典太大了,或者我选择的trie的实现对于一个简单的字典来说太不合适了 那么,有没有一种方法可以在关闭应用程序(如注册数据库)后保留此结构,或者如果您认为问题是由实现引起的,您可以向我推荐另一个吗
我的android项目有一个严重的问题 这里的目标是计算所有可以由6个字母组成的系列词 为此,我的BDD中有两个表:
- “单词”有两列:“\u id”和“mots”
- 和临时桌子 使用相同的列
String MY_QUERY = "SELECT temp2._id, temp2.mots FROM temp2 INNER JOIN temp ON temp2.mots = temp.mots;";
Cursor test = db.rawQuery(MY_QUERY, null);
之后,我将我的值放入listview
它可以工作,但速度非常慢:你能帮我吗?一般来说,你使用的算法效率非常低。首先,使用通配符匹配对每个条目进行6次搜索,然后再次将这个巨大的结果与整个数据集连接起来 SQL可能不适合这样做。SQL擅长查询,这更像是一种计算。在代码中进行匹配 有很多方法可以实现这一点,但找到正确的解决方案取决于您的需求。这些字母能重复吗?“巨大”一词的词汇量有多大?它还可以容纳几MB吗?这种查找是否需要几乎同时进行 更新:
考虑到你的要求,我不得不同意乔的意见。它实际上更像是一种数据结构,而不是一种算法,但trie才是最好的选择。您应该能够在加载应用程序时构建一次trie,然后每个“匹配”都将是一个相当简单的查找,沿着trie进行。您要查找的算法实际上称为“”(检索的缩写)。它们非常适合这种类型的计算(Android实际上在短信和邮件应用中使用它们来做表情替换之类的事情)。如果做得好,你会对它的性能感到惊讶。我同意Paul的观点:你绝对不应该像现在这样做。事实上,许多实现甚至会将整个字典文件加载到内存中的trie中,并在应用程序的整个生命周期中使用该trie进行单词查找和验证。拼字列表(链接也包含在下面的问题中:)只有1.9MB,包含178k个单词。内存中的trie实际上应该比1.9MB小得多,因为多个单词将共享相同的前缀(例如,“stair”和“stare”都将共享S-T-A前缀,然后这些前缀将分支为两个叶子[“I”和“R”],依此类推……)
这里有一个很好的起点:首先,感谢您的关注。事实上,我想设计一个基于字谜的游戏:你有6个字母,你必须输入所有可以用这些字母重新制作的单词(字母只能按时使用)。所以我有一个算法,可以生成6个字母的序列。我有我用这个算法生成的单词表(379000个条目)和组合表:这些SQL查询是我找到的生成每个级别的解决方案的方法。谢谢你的回答。如果我理解正确,你是说我应该保留生成字母组合的算法,但我应该用trie数据结构(我的单词列表)测试生成的单词。
String MY_QUERY = "SELECT temp2._id, temp2.mots FROM temp2 INNER JOIN temp ON temp2.mots = temp.mots;";
Cursor test = db.rawQuery(MY_QUERY, null);