java - 找词android应用的优化实现
问题描述
我正在开发一个解决以下问题的android应用程序:给定一个单词,例如'meat',找到所有由'meat'中的字符组成的英文单词,即'mate'、'tame'、'meta'、'team'和“肉”。
问题在于优化设计。当前的实现是这样工作的:
- 从 json 文件中获取 10,000 个英文单词的集合,并在应用安装时存储在 room sqlite 数据库中。
当用户搜索一个单词时,会发生以下情况:
- 该应用程序通过将用户输入的单词随机播放 5000 次(技术上为 5000 * 字长)来创建一组所有可能的排列。
- 应用程序查询数据库以获取存储在单词表中的所有单词的列表。
- 应用程序将这两个集合相交以查找匹配项。
问题是当用户在真实设备上搜索单词时应用程序会滞后。当单词超过6个字母时需要很长时间才能响应。
我正在寻找更好的方法。理想的解决方案必须以某种方式执行以下操作:
- 零延迟。当用户输入一个单词时,应用程序不能滞后。
- 应用程序必须正常响应长字。
解决方案
- 您可以编写函数 getHashForm(word: String),它必须返回相同的单词,但字母按照 ABC 排序。例如,你的“mate”、“tame”、“meta”这两个词都有相同的“hash-form”——“aemt”。
- 您不仅可以在 sql 数据库中保存原始单词,还可以保存它们的“hash-form”(在从 JSON 加载时,您必须在“getHashForm”的帮助下获取此 hash-form)。
- 当你在你的相似词中搜索“肉”时,你要做的第一件事就是在“getHashForm”-“aemt”的帮助下得到它的“hash-form”。然后一次性查询您的数据库(在伪代码中只使用“select * from your_table as yt where yt.hashform = :[hash_you_get]”),无需循环或改组。
推荐阅读
- python - 'DataFrame' 对象没有属性 'withColumn'
- python - 如何使用 Anaconda 安装 openCV 包?
- ios - 我的应用无法在 iOS 设备上启动(导出的 .ipa)
- python - 基本示例 google-app-engine 项目不工作
- javascript - 如何将 javascript 数组传递给 php 脚本
- sql - SQLX 中查询结果的控制流(懒惰/渴望)
- java - 无法将 jmx 连接到在远程主机上的 docker 中运行的 java 应用程序
- html - 为什么“text-align-last”在 Safari 上不起作用并且行为怪异?
- c++ - 通过值引用传递向量在传递的原始向量中没有变化?
- android - Cordova 构建失败 - NullPointerException