Suffix Tree 后缀树
简介:后缀树(also called PAT tree or, in an earlier form, position tree)是一种高级数据结构,能够快速解决很多字符串的问题,相应的也有后缀数组blabla。后缀树提出的目的是用来支持有效的字符串匹配和查询。
定义:一个长度为n的字符串S,他的后缀树定义如下:
1.从根到叶的路径与S的后缀一一对应
2.每条边都是一个非空字符串。
3.所有的内部节点(除了root节点)都有至少两个child节点。
由于并非所有的字符串都存在一颗这样的树,因此S通常用一个终止符号进行填充如$;这保证了没有一个后缀是另外一个的前缀。
实例:字符串banana$的后缀树的产生
step1:
suffix(1) = banana$
suffix(2) = anana$
suffix(3) = nana$
suffix(4) = ana$
suffix(5) = na$
suffix(6) = a$
suffix(7) = $
step2:
按照字典序排序
suffix(6) = a$
suffix(4) = ana$
suffix(2) = anana$
suffix(1) = banana$
suffix(5) = na$
suffix(3) = nana$
suffix(7) = $
step3:
|-- $
|-- a --| |-- $
root--| |-- na--|
|-- banana$ |-- na$
| |-- $
|-- na--|
|-- NA$
生成suffix tree结束。