后缀自动机初探(xiajiang)

后缀树\((Suffix Tree)\)

对于一个字符串,把它的所有后缀插入到\(Trie\)中就是一个后缀树。

当然字母存在边上,最终的点可以用一个特殊符号如:\(\&\)来表示这个后缀结束了。

考虑对树压缩路径,也就是把原字符串一个个后缀存到点上。

这样的话节点数就达到了\(O(N)\)级别。

然后就是啪啪的建树......这个过程不多做讲述......

我们现在假设你会建树,会dp,那么:

给定一个长度为\(n\)的字符串\(S\),记\(suf[i]\)表示从$ i $开始的后缀。

求:\(\sum_{1<=i<j<=n}len[suf[i]] + len[suf[j]] - 2 * lcp(suf[i],suf[j])\)

前面的话可以\(O(1)\)的算出来,关键是后面怎么算?(2*lcp(suf[i],suf[j])

两个节点的最长公共前缀就是LCA的后缀,然后处理出有多少个后缀包含当前节点字符串的前缀,树上背包就可以了。

其实后缀树就是可以使你维护字符串变得方便又高效。

后缀自动机\((Suffix Auto Maton)\)

前言:其实\(SAM\)好建,好做,不好想...

官定:
对给定字符串\(S\)的后缀自动机是一个最小化确定有限状态自动机,它能够接收字符串\(S\)所有后缀。

而且从初始状态0可以到达所有状态。

一个或多个状态被标记为终止状态。如果我们从初始状态0经由任意路径走到某一终止状态,并顺序写出所有经过边的标记,得到的字符串必然是\(s\)的某一后缀。

并且\(SAM\)维护以上顶点数最少。

留坑

后缀自动机XJ的更多相关文章

  1. BZOJ 后缀自动机四·重复旋律7

    后缀自动机四·重复旋律7 时间限制:15000ms 单点时限:3000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一段音乐旋律可以被表示为一段数构成的数列. 神奇的 ...

  2. 【Codeforces235C】Cyclical Quest 后缀自动机

    C. Cyclical Quest time limit per test:3 seconds memory limit per test:512 megabytes input:standard i ...

  3. 【hihocoder#1413】Rikka with String 后缀自动机 + 差分

    搞了一上午+接近一下午这个题,然后被屠了个稀烂,默默仰慕一晚上学会SAM的以及半天4道SAM的hxy大爷. 题目链接:http://hihocoder.com/problemset/problem/1 ...

  4. 【BZOJ-3998】弦论 后缀自动机

    3998: [TJOI2015]弦论 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2018  Solved: 662[Submit][Status] ...

  5. HDU 4622 Reincarnation (查询一段字符串的不同子串个数,后缀自动机)

    Reincarnation Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)To ...

  6. hihoCoder 后缀自动机三·重复旋律6

    后缀自动机三·重复旋律6 时间限制:15000ms 单点时限:3000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数列. 现在小Hi ...

  7. hihoCoder #1445 : 后缀自动机二·重复旋律5

    #1445 : 后缀自动机二·重复旋律5 时间限制:10000ms 单点时限:2000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数 ...

  8. 数据结构:后缀自动机 WJMZBMR讲稿的整理和注释

    链接放在这里,有点难理解,至少我个人是的. 后缀自动机是一种有限状态自动机,其功能是识别字符串是否是母串的后缀.它能解决的问题当然不仅仅是判断是不是后缀这种事,跟字符串的连续子串有关的问题都可以往这个 ...

  9. 【SPOJ】7258. Lexicographical Substring Search(后缀自动机)

    http://www.spoj.com/problems/SUBLEX/ 后缀自动机系列完成QAQ...撒花..明天or今晚写个小结? 首先得知道:后缀自动机中,root出发到任意一个状态的路径对应一 ...

随机推荐

  1. 内网端口转发[netsh]

    一.利用场景 当前获取目标内网边界区域一台机器,可以通外网和内网也就是存在两块网卡,又通过其他手段获取到内网另外一台机器,但是这台机器不能出外网,所以我们可以使用windows自带netsh命令通过边 ...

  2. ulimit - 获取和改变用户的限制设定

    大纲 #include <ulimit.h> long ulimit(int cmd, long newlimit); 描述 警告: 这个函数已经被废弃. glibc 不再提供这个包含文件 ...

  3. Linux/CentOS 7 timezone 修改

    1.su - 登录root用户 2.timedatectl set-timezone {timezone} (set后面加想要设置的时区) 举例:timedatectl set-timezone As ...

  4. PD ZD

    PD TO ZD simple one without . SORT FIELDS,,PD,A,,,PD,A) OUTREC FIELDS,,PD,ZD,LENGTH, ,,PD,ZD,LENGTH, ...

  5. <el-table>序号逐次增加,翻页时继续累加,解决翻页时从编号1开始的情况

    注释: scope.$index     当前序号 cuePage 表示当前页码 pageSize   表示每页显示的条数

  6. JavaWeb学习篇之----Servlet过滤器Filter和监听器

    首先来看一下Servlet的过滤器内容: 一.Servlet过滤器的概念: ************************************************************** ...

  7. 57 CUDA 编程入门

    0 引言 由于毕设用到了Marvin,采用的是CUDA框架作为加速器,正好借此学习一下CUDA编程的一些基本知识. 各个版本的cuda的下载链接如下. https://developer.nvidia ...

  8. 动态隐藏显示窗口的标题栏(同时保持窗口的sizeable性能

    今天考虑作界面的时候,想去掉窗体的标题栏,但设置 Form.BorderStyle := bsNone; 会导致窗体不可再 Sizeable (通过鼠标操作改变窗体大小),仔细翻看了相关Help也没找 ...

  9. 笨办法学Python记录--习题1-11

    20140412(习题1-10),和打印较劲: 1. 读这本书时没有按照要求安装Python2,我选择的是最新版3.4.0(官方release),然后悲剧发现完全不兼容,现在摘录2,3区别: 这个星期 ...

  10. oracle一体机(exdata)创建ACFS文件系统

    ACFS是一个支持多个平台,可扩展的,基于ORACLE ASM的集群文件系统,可以用来存储数据库和各种应用的文件,包括数据库的trace文件,alert日志文件和配置文件等等,也可以用来存储视频,音频 ...