- 1、本文档共23页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Company Logo LOGO 石家庄二中 秦岳 后缀数据结构Suffix Data Struct 后缀树(Suffix Tree) 后缀树是一种功能强大的字符串处理数据结构,能快速解决很多关于字符串的问题。 朴素的将字符串S的所有合法后缀插入Trie树中所形成的树结构成为后缀Trie,结点个数为O(N^2)。 其中后缀Trie的根以及所有后缀的结束结点均为关键点。 发现如果一个非关键结点只有一个儿子时,我们不用保存此结点,只需将父亲边与之合并成一条复合边即可保留原树所有信息。由于后缀Trie实际只由O(N)个后缀字符串构成,所以化简之后形成的树只由O(N)个节点。 化简后的Trie树称为后缀树。 图例(Simple) 后缀树的附加记录信息 ①记录后缀→结点的双向映射 ②结点的最近公共祖先极为其最长公共前缀(Trie) ③结点DFS序靠前的字符串字典序小(Trie) ④记录结点所代表最长字符串的长度为len ⑤原串是否存在某子串→Trie上能否走下去 ⑥每颗子树内有多少个后缀→有多少个子串为子树根(Tree) 后缀树的朴素构造与信息存储 对于一个后缀树的结点建立与Trie基本相同,唯一的不同是树边的标示为原字符串中的某个子串S[l,r]。 结点结构: int tot,M=26; struct Node{ int son[M],l[M],r[M]; }; 朴素构造法: 深度优先:依次插入每个后缀,只有当出现分叉或结尾时新建结点。 宽度优先:将所有后缀按位同时插入后缀树,当遇到结尾或分支时建立结点。 时间复杂度:O(N^2) 空间复杂度:O(N) 易知插入一个字符串最多新建两个结点。 广义后缀树 对于字符串集合T={t1,t2…tn}的广义后缀树,是一个压缩字典树(trie)其中包含了T中每一个字符串的所有的后缀。 简而言之,就是一个将所有字符串的所有后缀插入Trie树并进行路径压缩之后形成的树结构。 广义后缀树的附加记录信息 ①包含后缀树的所有信息 ②通过记录每个后缀结点的属于哪个字符串可以对不同串分类统计 ③广义后缀树中存在的字符串至少一个字符串的子串。 ④字符串出现了几次→广义后缀树中对应结点所在子树后缀结点数 后缀自动机(Suffix Automaton) 给定字符串S,S的后缀自动机(SAM)能识别字符串A,当且仅当A是S的后缀。 广义多串后缀自动机: 给定字符串集合{S},{S}的后缀自动机能识别字符串A,当且仅当A是{S}中至少一个元素的后缀。 备注:可以将后缀Trie的结构当做SAM,但是状态量过大。 后缀树结点的previous指针 为了方便理解后缀自动机的构造原理与线性时间后缀树的构造原理,我们对后缀树上的每一个结点定义其pre指针,设结点x代表字符串cA(c为字符,A为字符串),则pre[x]指向后缀树中的A,称x的pre标识为c,pre[x]为x的前驱,x为pre[x]的c后继。 定义转移函数:tranc(pre[x],c)=x 后缀Trie的previous指针 定义同上,观察图例: 我们将红点定义为后缀结束点,绿点定义为分支中继点,白点定义为被后缀树压缩掉的无用假点。 Previous指针的性质 ①关键点的pre同为关键点 ②pre指向同一结点时,其标识必定互不相同 ③关键点及其相连的一段白点祖先tranc(p,x)存在性相同 ④若点p存在tranc(p,c),则其祖先同样存在tranc(p’,c) 证明①: 1.一个后缀结点的pre显然是一个后缀结点,故为关键点。 2.一个中继结点的pre一定是一个中继节点,故为关键点。证:设中继节点表示xA,由于他为中继所以必然有两个不同的字符a、b构成的后缀形成xAb和xAc两条链,故必然存在Aa和Ab两条链,故A为中继节点。 证明②:将结点定义为cA,对于pre均指向A的结点,若标识相同则c部分相同,则cA为同一结点。 证明③:这一部分点为根的子树中红点相同,故这些后缀前一个字符是否有c的存在性也相同。 证明④:显然若原串包含cAx,则必然包含cX。 后缀树→逆序后缀自动机 将字符串S的后缀Trie中所有白点的pre压缩至其最近关键点儿子上,并删除白点,并去除重边形成的压缩pre版本的后缀树。 我们根据压缩后缀树及其pre/tranc(p,x)构造逆序S字符串的后缀自动机: 压缩后缀树的结点为后缀自动机的所有状态;tranc(p,x)为后缀自动机状态p的x转移边;树链S为后缀自动机的全部接受状态。 由于pre结构复杂,所以存储时我们只pre的反向边tranc记录在点上 压缩pre后缀树的性质 ①指向同一结点的若干pre ,其标识必定互不相同(证明同上) ②所有状态互不相交,且并集为S的全部子串(后缀树性质显然) ③通过逆pre边转移至同
您可能关注的文档
最近下载
- 2024年4月广东深圳市光明区马田街道办事处招聘一般专干及笔试历年典型考题及考点剖析附答案带详解.docx
- 文秘技能大赛题库完整.pdf
- 建筑工程图集 07SJ504-1 隔断、隔断墙(一).pdf
- 班级管理方案和班委职责与班级管理条例(范本)合集.doc VIP
- 2025年广东省高中语文学业水平合格考试卷试题(含答案详解).pdf VIP
- 金融监管学银行监管讲义课件.pptx
- 高中体育与健康_篮球 传切配合 教学课件设计.ppt
- 二 《简单相信,傻傻坚持》(教学课件)-【中职专用】高二语文精讲课堂(高教版2023·职业模块).pptx VIP
- 人教版《劳动教育》九年级 劳动项目二《三餐有营养》课件.pptx
- 2024年中考语文一轮复习(全国)(老师用)议论文写作(练习).pdf VIP
文档评论(0)