Trie 字典树

1. Trie 字典树基础知识

(1)什么是字典树

        Trie 字典树指的是:某个字符串集合构造的又有根树。由于 Trie 字典树,较好的利用了字符串的公共前缀,因此有效的节约存储空间。

        Trie 树典型应用是:用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询比哈希树高。

        它有 3 个基本性质:

        A、根结点不包含字符,除根结点外每一个结点都只包含一个字符;

        B、从根结点到某一结点,路径上经过的字符连接起来,为该结点对应的字符串;

        C、每个结点的所有子结点包含的字符都不相同。

 


(2)字典树的时间复杂度、空间复杂度:

时间复杂度:

假设所有字符串长度之和为 n,则构建字典树的时间复杂度为 O( n )。

假设要查找的字符串长度为 k,则查找的时间复杂度为 O( n )。

空间复杂度:

字典树每个结点都需要用一个数组来存储子结点的指针,即便实际只有两三个字结点,但依然需要一个完整大小的数组。所以,字典树比较消耗内存,空间复杂度较高。

比如:按上述实现方式,假设有 n 个小写字母的字符串,总长度 ≤ 10^{5},则空间复杂度为:10^{5}*26 。


2. AC自动机

(1) AC自动机的原理

        AC自动机:Aho - Corasick automation,该算法在 1975 年产生于贝尔实验室,是著名的多模式串匹配算法之一。一个常见的例子就是给出 n 个单词,再给出一段包含 m 个字符的文章,让你找出有多少个单词在文章里出现过。

        要搞懂 AC自动机,先得有字典树 Trie 和 KMP 模式匹配算法的基础知识。KMP 算法是单模式串的字符匹配算法,AC自动机是多模式串的字符匹配算法。

(2)AC自动机的构造:

        1. 构造一棵 Trie ,作为 AC自动机的搜索数据结构。

        2. 构造 next指针,使当前字符失配时跳转到具有最长公共前后缀的字符继续匹配。如同 KMP 算法一样,AC自动机在匹配时如果当前字符匹配失败,那么利用 next 指针进行跳转。由此可知如果跳转,跳转后的串的前缀,必为跳转前模式串的后缀并且跳转到新位置的深度(匹配字符个数)一定小于跳之前的结点。所以我们可以利用 bfs 在 Trie 上上面进行 next 指针的求解。

        如果要求 k 号节点的 next 值:

        (1)看 k 号结点父节点的 next 值 —> j 。

        (2)判断 j 是否有某个子结点的值和 k 号节点的值相同

        A、有,next [ k ] 指向对应的子结点

        B、没有,j = next [ j ] 继续回跳,直接跳到根。

        3. 扫描主串进行匹配。

        AC自动机相当于:Trip + KMP 的组合。

        AC自动机,可以优化为 Trip 图。


 最后

制作不易,点个赞吧!!!

制作不易,点个赞吧!!!

制作不易,点个赞吧!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值