后缀树(S此沉生独uffix tree)是一种数据结构,能快速解决很多关于字符串的问题。后缀树的概念最早由Weiner于197苏约随吗轮育3年提出,既而由McCreight在1976年和Ukkonen在1992年和1995年加以改进完善。
一个string S的后缀树是一个边(edge)被标记为字符串的树。因此每一个S的后缀都来自唯一对应一条从根节点到叶节点的路径。这样就形成了一个S的后缀的基数树(radix tree)。后缀树是前缀树(trie)里的一个特殊类型。
- 中文名称 后缀树
- 外文名称 Suffix tree
- 类型 数据结构
- 功能 快速解决很多关于字符串的问题
基本信息
简介
后缀树提出的目的是用来支持有效的字符串匹配和查询。
详述
来自 一个具有m个词的字符串S的后缀树T,就是一个包含一个根节点的有向树,该树恰好360百科带有m个叶子,这些叶子被赋予从李航钟映散1到m的标号。 每一个内部节点,除了根节点以外,都至少有两个子节点,而输女损才名烧括且每条边都用$的一个非伯动伟除余此谁初件空子串来标识。出自同一节点的任意两条边的标识不会以相同的词开始。后缀树的关键特征是:对于任何叶子i,从根节点到该叶子所经历的边的所有标按干包滑护损识串联起来后恰好拼出S的从i位置开始的后缀,即S左阿顺[i,…,m]。树中先帝务留七节点的标识被定义为从根到该节点的所有边的标识的串联。
其它信息
举例
图中示意了字符串 "I kno评养米火w you know I know "的后缀树。内部节点用圆来表示,叶子用矩形来表示,该例子中有六个叶子,被标号为1到6。 终止字符在图中被雷队将省略掉了。
其它例子
同理, 若干字符串组成的后缀树, 称为一个扩展的后缀树:n个字符串Sn困方,其中字符串的长度为mn固非, 由这些字符串组成一个扩展的后缀树 T ,它是一个包含一个根节点的有向树,该树有生顶已处职慢巴植介mn个叶子,每个叶子都用一个两数字的坐标tuple(k,l)来标识,其中k的范围是从1到n,而l的范围是从1到mk ,每一个内部节点,除了根节点外,都有两个子节点并且每条边都用一个非空的S中若干单词构成的一个子串来标识。并且出自同一节点的任意两条边的标识的第一个单词不能相同。对于任意的叶子(i,j),从根节点到该叶子所经历的所有边的标识的串联恰好拼出后缀Si,该米限奏洲哥切没千乙后缀从位置j开始,汽练之刻做音就是说它们拼出了Si[j..mi]。
广义后缀树
对于字符串集合T={t1,t2…tn}的广义后缀树,是一个压缩字往混力节希典树(trie)其来自中包含了T中每一个字符串的所有时胡端的后缀。
每一个叶节点,360百科是由 对来标记的,即振村钱包含了所在的字符串和在字符串中的开始位置。
广义后缀数组的构造:
将T中的所有字符串加上终结符$连接在一起构成新的字符串S= t1$t2$…tn $;对字符串S构造,后缀树;每一个叶节点标记上历治谁老已翻道冷需万情在S中的起始位置;移除横跨多个字符串的后缀;将叶节点的起始位置映射成对。说明:真实构造中对后缀的比较只比较到字符$就结束,这样不会出现横跨多个字符串的后缀。