【发布时间】:2019-03-03 10:55:25
【问题描述】:
我对数据结构很陌生,但我试图在我的应用程序(nodeJS express 服务器)的后端实现高效的城市查找/城市自动完成功能。
最初我只是在内存中加载一组城市(大约 20.000 个城市);我会让我的客户端应用程序通过端点 /search 搜索一个城市,并返回一个与用户搜索内容相匹配的城市列表:
import cities from './cities.json';
// Search endpoint
app.get('/search', (req, res) => {
const results = [];
const searchKey = req.body.key.toLowerCase();
for (let city of cities) {
if (city.toLowerCase().contains(searchKey)) {
results.push(city);
// Max 10 cities
if (results.length > 10) {
break;
}
}
}
res.json(cities);
});
虽然因为我只有 20,000 个城市,所以这种方法运行得很快,但我认为它在时间复杂度方面相当糟糕,因为最坏的情况复杂度是 O(n)。
所以我正在考虑实现一个基于后缀树的字典,因此查找键的复杂性为O(m),m 是键的长度(如果我错了,请纠正我)空间复杂度更高的代价。
但正如我所说,我对这一切有点陌生,所以我的问题是:
1) 通常如何实现快速自动完成功能?
2) 如果我将我的城市存储在 SQL 数据库中会更好吗?有没有办法有效地配置数据库表以允许基于后缀的快速查找?
提前致谢!
【问题讨论】:
标签: javascript node.js database express data-structures