Trie树与AC自动机
Trie树与AC自动机 作为现阶段的学习中个人应有的常识,AC自动机形象的来讲就是在Trie树上跑的一个KMP。由此,我们就先来谈一谈Trie树。(有图) 1. Trie树 又称单词查找树,字典树,一般用于字符串的匹配。它利用公共的字符串前缀进行查询,减少了无谓的操作,是空间换时间的经典算法。举例: 此图包含了{"to", "tea", "ted", "ten", "a", "i", "in", "inn"}这些字符串。 Trie树的基本性质可以归纳为: 根节点不包含字符,除根节点意外每个节点只包含一个字符。 从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。 每个节点的所有子节点包含的字符串不相同。 Trie树有两个基本操作,一为插入,二为删除,且两者复杂度均为 \(O(len)\) (其中$len = $ 字符串长度)。 我们以对五个串 aaaa , abb , aabbb , baa , bab 的操作进行说明。 1.基本操作 1.插入 插入 aaaa 首先插入串 aaaa 。对树中没有的节点进行新建,连接。结果: 对,就是这样的简单插入。(图中红色字母代表一个单词的结尾) 插入 abb 再插入串 abb 。在插入时,已有的节点直接走过去,没有的就插入再走过去。结果: 1.插入 a 2.插入 b 3.再插入 b 完成。 3.插入 aabbb 不再赘述