首页 > 解决方案 > 找词android应用的优化实现

问题描述

我正在开发一个解决以下问题的android应用程序:给定一个单词,例如'meat',找到所有由'meat'中的字符组成的英文单词,即'mate'、'tame'、'meta'、'team'和“肉”。

问题在于优化设计。当前的实现是这样工作的:

  1. 从 json 文件中获取 10,000 个英文单词的集合,并在应用安装时存储在 room sqlite 数据库中。
  2. 当用户搜索一个单词时,会发生以下情况:

    1. 该应用程序通过将用户输入的单词随机播放 5000 次(技术上为 5000 * 字长)来创建一组所有可能的排列。
    2. 应用程序查询数据库以获取存储在单词表中的所有单词的列表。
    3. 应用程序将这两个集合相交以查找匹配项。

问题是当用户在真实设备上搜索单词时应用程序会滞后。当单词超过6个字母时需要很长时间才能响应。

我正在寻找更好的方法。理想的解决方案必须以某种方式执行以下操作:

  1. 零延迟。当用户输入一个单词时,应用程序不能滞后。
  2. 应用程序必须正常响应长字。

标签: javaandroidkotlinset

解决方案


  1. 您可以编写函数 getHashForm(word: String),它必须返回相同的单词,但字母按照 ABC 排序。例如,你的“mate”、“tame”、“meta”这两个词都有相同的“hash-form”——“aemt”。
  2. 您不仅可以在 sql 数据库中保存原始单词,还可以保存它们的“hash-form”(在从 JSON 加载时,您必须在“getHashForm”的帮助下获取此 hash-form)。
  3. 当你在你的相似词中搜索“肉”时,你要做的第一件事就是在“getHashForm”-“aemt”的帮助下得到它的“hash-form”。然后一次性查询您的数据库(在伪代码中只使用“select * from your_table as yt where yt.hashform = :[hash_you_get]”),无需循环或改组。

推荐阅读