用程序员的角度科普生活知识
hello 兄弟们
我是浩说
今天研究个什么事儿呢?
咱就是说:我们在浏览器或者app里搜索的时候
为什么我只输入了一两个字,下面就已经给我罗列出来我想搜的具体内容了
这是怎么做到的呢?
“搜索"就是"问问题”
其实"搜索"对应现实场景就是"问问题"
这个过程就像是:
我问你:“炸鸡哪家比较好吃?”
你的大脑可能是这样的思考过程:
首先从这句话中提取出两个关键词:炸鸡、好吃
接着将你去过的炸鸡店在脑子里列出来:
然后根据"好吃"这个关键词将炸鸡店列表重新排序排序:
这样你就得到了答案,于是将排序前几名的店跟我一顿推荐,
顺便还向我甩了一句"怎么老铁想请我吃一顿啊?!"
其实大脑的思考过程和app的思考逻辑是一样的,
我们来具体探寻一下!
关键词
我们每个人使用app时的搜索需求都是不同的,比如购物app,每个人想买的东西都不一样,
这个时候app会定时统计每个用户发送过的搜索内容并生成一个"关键词库":
列出来
年底将至,我们就以"年货"这个关键词为例,当我们在购物app里输入"年货"这个词的时候,
app就会从"关键词库"中将与之相关的词筛选出来:
然后再将这些关键词列出来,我们所看到的关键词通常是"列表"的形式,像这样:
但这是经过app处理之后的表现形式,对于app来说,关键词最初是以"树"的形式列出来的:
在编程语言里,这种数据结构叫做:
Trie 树 (字典树)
Trie 树 (字典树)
为什么要用这种结构呢?
我们对比"列表"和“Trie 树”来看一下:
相比于"列表",Trie 树的优点在于:通过使用公共字符前缀的方式来节省存储空间。
而"搜索"这种场景不就是根据公共前缀来匹配关键词集合吗,那使用Trie 树就再适合不过了!
排序
经过上一步"列出来"之后,由于数据过多,app还需要将数据重新排序,并选择排名靠前的数据作为最后的"搜索提示"结果来展示给用户。
至于app是如何"排序"的,这里面的内容就比较复杂了,涉及到一些公式化的算法,想要探讨的话一定是长篇大论且枯燥乏味。
你可以简单的这样理解:按照关键词的搜索频率排序,频率越高越靠前:
排好序之后靠前的数据就是我们最终看到的"搜索提示"啦!某宝是展示了前十个:
今天我们探讨了"搜索提示"功能的实现原理
并借此了解了Java的数据结构:Trie 树
以及 Trie 树 的特点、适用场景
听说点赞分享的人虎年都能行大运发大财呢,还不赶紧行动起来!