Trie 树:如何实现搜索引擎的搜索关键词提示功能

------ 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 ------

搜索引擎的搜索关键词提示功能,你应该不陌生吧!当你在搜索引擎的搜索框上,输入要搜索的文字的某一部分的时候,搜索引擎就会自动弹出下拉框,里面是各种关键词提示。你可以直接从下拉框中选择你要搜索的东西。

尽管这个功能我们几乎天天在用,作为一名工程师,你是否思考过,它是怎么实现的呢?它底层使用的是哪一种数据结构和算法呢?

像Google、百度这样的搜索引擎,它人的关键词提示功能非常全面和精准,肯定做了很多优化,但万变不离其宗,底层最基本的原理就是今天要讲的这种数据结构:Trie树

什么是“Trie 树”?

Trie 树也叫“字典树”,这是一个树形结构。它是专门处理字符串匹配的数据结构,用来解决在一组字符串集合中快速查找某个字符的问题。

当然,这样一个问题可以有多种解决方法,比如散列表、红黑树,或者我们前面几节讲到的一些字符串匹配算法,但是,Trie 树在这个问题的解决上,有它特有的优点。不仅如此,Trie 树能解决的问题也不限于此,我们一会儿慢慢分析。

Trie 树到底长什么样子。举个简单的例子,我们有6个字符串,它们分别是:how, hi, her, hello, so, see。我们希望在里面多次查找某个字符串是否存在。如果每次查找,都是要查找的字符串跟这6个字符串依次进行字符串匹配,那效率就比较低,有没有更高效的方法呢?

这个时候,我们就可以先对这6个字符串做五预处理,组织成Trie 树的结构,之后每次查找,都是在Trie 树中进行匹配查找。**Trie 树的本质,就是利用字符串之间的公共前缀,将重复的前缀合并在一起。**最后构造出来的就是下面这个图中的样子。在这里插入图片描述

其中,根节点不包含任何信息。每个节点表示现代战争字符串中的字符,从根节点到红色节点的一条路径表示一个字符串(注意:红色节点并不都是叶子节点)

为了让你更容易理解Trie 树是怎么构造出来的,我画了一个Trie 树的构造分解过程。构造过程的每一步,都相当于往Trie 树中插入一个字符串。当所有的字符串都插入完成之后,Trie 树就构造好了。在这里插入图片描述

当我们在Trie 树中查找一个字符串的时候,比如查找字符串“her”,那我们将要查找的字符串分割成单个的字符h, e, r,然后从Trie 树的根节点开始匹配。如图所示,绿色的就是在Trie 树中匹配的路径。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值