Trie字典树

小柯

2020-02-04 22:25:53

Personal

# 定义 在计算机科学中,Trie,又称前缀树或字典树,是一种有序树状的数据结构,用于保存关联数组,其中的键通常是字符串。 # 例子 一棵正确的Trie树像下面一样: ![](https://t1.picb.cc/uploads/2020/02/04/kW7xej.png) 但是注意!!! 字符数据体现在Trie的边上,而节点本身只需要存储自己是否是一个字符串的结尾即可。 # Update 8.7 对于“字符数据体现在Trie的边上,而节点本身只需要存储自己是否是一个字符串的结尾即可。”可以从存储方式来体现。 一般我们都是维护一个数组 $t[u][c]$ 表示 $u$ 节点以字符 $c$ 连接的儿子的编号,然后维护另一个数组 $cnt[u]$ 表示 $u$ 节点是多少个字符串的结尾(如果字符串有重复)。 # 补:应用之后缀树 >后缀Trie,故名思义,就是将一个字符串所有的后缀都插入Trie中。 >压缩Trie,除根节点外没有度为二的节点的Trie。(压缩Trie的边可能是字符串) 将Trie转为压缩Trie的方法:不断地将只有一个儿子的节点向父亲合并,并将这个节点到儿子的字符(串),添加到父亲到这个节点的字符(串)后面。 >后缀树,即压缩后缀Trie。 ### 应用:模式匹配 > 构造主串的后缀树,并用模式串在后缀树上匹配。 原理:若模式串是主串的子串,那么它一定是主串某个后缀的前缀。 ### Ukkonen线性构造算法 (这坑以后再填吧,也当是复习...)