【发布时间】:2021-12-31 05:54:32
【问题描述】:
我想在我的应用上实现一个搜索功能,它会根据输入到搜索栏中的每个新字符重新过滤,以便用户可以搜索其他用户。这是应用程序中相当常见的功能,但作为初学者,这似乎是一个非常复杂的计算过程。似乎会发生以下两种情况之一:
- 对于输入的每个新字符,前端都会查询后端,后端会应用过滤器并返回。
- 前端会预先加载所有(或许多)可能的结果,并在输入新字符时根据存储的信息更新过滤器。
看起来 1) 会有时间复杂度问题,因为它每次搜索都会进行 O(n) 次查询(其中 n 是字符数)。这尤其成问题,因为预计过滤后的搜索结果几乎会立即更新。此外,我的平均查询时间可能比大多数人都慢,因为我使用的是三层架构(前端服务器图形数据库)
我不喜欢 2)——至少在其简单的形式中——因为可能的结果数量可能会变得非常大。我们可以通过仅查询一组有限的用户属性(可能只查询uid 和姓名,并在需要时即时获取详细信息)来降低空间复杂度,但重点仍然存在。
如果我们修改 2) 以仅加载用户样本,事情会变得更有趣(在这里我们可以使用位置等数据以及 ML/AI 进行选择)。这样做的问题是搜索用户可能总是在寻找我们没有选择的人。如果用户知道他们的朋友在应用上但无法找到他们,这将是一种可怕的(即使很少见)体验,因为我们的算法仅适用于 99% 的搜索。
我确信这是可能的——其他应用似乎可以做到——那么我错过了什么?
【问题讨论】:
标签: algorithm performance search mobile