SAM,ACAM,PAM 辨析
正题
SAM,Suffix AutoMaton,后缀自动机,可以识别每一个后缀,拥有多个结束点,实际上可以识别所有的子串,所以我更愿意将它理解为子串自动机
ACAM,Aho-Corasick AutoMaton,AC自动机,可以识别所有串的前缀,所以我更愿意将它理解为它前缀自动机.
PAM,Palindrome AutoMaton,回文自动机,可以识别该串的所有回文子串.
同类型名称辨析
点
SAM上的一个点对应着一个等价类,这个等价类记录的是一群结束位置集合相等,长度连续的子串.
ACAM上的一个点对应着一个等价类,这个等价类记录的是一个串或多个串的公共前缀
PAM上的一个点对应着一个等价类,这个等价类记录的是在一个或多个位置出现的回文子串
他们的点数都是O(n)级别的,其中SAM有两倍常数,PAM多加两个点
三个自动机上的节点所管理的东西都是互异的,所以可以的出类似"本质不同"的答案.常常用此来去重.
转移边
SAM上的一条转移边表示在这个点所代表的所有子串后面加上一个字符c,会转移到的等价类.
ACAM上的一条转移边表示这个点所代表的前缀后面加上一个字符c,会转移到的最大前缀.
PAM上的一条转移边表示这个点所代表的回文子串的两边加上一个字符c,会转移到的对应回文子串
endpos集合
三个自动机的endpos集合都指的是该点所代表的子串的出现位置.
fail指针
SAM上的fail指针指向的是该点对应子串的最长真后缀所在的等价类.
ACAM上的fail指针指向的是该点对应前缀的后缀所在的点,这个后缀必须满足是多串的某个前缀,并且最长
PAM上的fail指针指向的是该点对应回文子串的最长回文后缀所在的点.
明显三个fail指针指向的都是本身的子串,所以在fail树上,儿子出现过的位置,祖先也一定出现过,所以就可以用线段树合并来维护每个点的endpos集合,当然既然说到有根树了,那么跟树有关的维护操作都可以考,像虚树,树形Dp,dfs序......这个尽量不要口胡,多做点题才会明白.
len
SAM的len记录的是这个等价类中最长的串,最短的串可以由fail来得到.
ACAM也可以拥有len!记录的是表示前缀长度
PAM记录的是该点对应的回文子串长度.
注意事项
ACAM的文本串不用插入ACAM,而匹配串一定要,可以做多点题想想为啥,具体可以考虑文本串一定可以走到最大匹配前缀,而匹配串走到的可能啥都不是.
PAM要注意先找fail,再继承父子关系,还要特殊考虑奇根和偶根,以及跳fail的最终节点是奇根.
SAM实际上普通写法的时间复杂度可以去到字符集*|S|,可以利用map来优化或者哈希表,做到O(log)或者期望O(1)
一般使用基数排序,将所有元素从浅到深写出来,注意虽然是稳定排序,但是相同权值的元素相对于原来之前是倒序.
后续也许会更
SAM,ACAM,PAM 辨析相关推荐
- 秩序魔咒,洛谷P5555,广义SAM+PAM
正题 虽然有一点难写,但是挺好想的. 大概就是用PAM求出所有本质不同的回文串,然后在SAM上看看对应点的right集合是否在两点都出现过,希望有大牛发明出广义PAM? #include<bit ...
- 模板:LGV引理(线性代数)
所谓LGV引理,就是解决LGV问题的引理. (逃) 前言 上联:古有学完SAM学PAM: 下联:今有学完Polya学LGV: 横批:小清新. 常被用于有向图不交路径计数问题.(废话) 这个东西是真的不 ...
- ICPC World Final 2019 G First of Her Name :广义SAM / 离线ACAM / 树上SA
交题链接:First of Her Name 题意: 给出n个人,他们每个人的名字都是之前某个人的名字在最前边加上一个字母得到.比如2号的名字是ACACAC,3号在2号前边加一个字母KKK,这样3号的 ...
- 2018-2019 ACM-ICPC南京 M. Mediocre String Problem(SAM+PAM)
LINK 题意 给定串 s s s和串 t t t 要求在 s s s中找一个子串 s ′ s' s′(不需要本质不同), t t t中找一个前缀 t ′ t' t′ 满足 s ′ s' s′长度大于 ...
- 模板:回文自动机(PAM)
所谓回文自动机,就是关于回文的自动机. (逃) 前言 小清新自动机. 经历过SAM的大风大浪,这个相比而言好理解多了,感觉也许应该先学这个再学SAM- 解析 和trie.AC自动机.SAM等类似的,P ...
- P3649-[APIO2014]回文串【PAM】
正题 题目链接:https://www.luogu.com.cn/problem/P3649 题目大意 一个字符串,求最大的回文串长度×出现次数 解题思路 构建出PAM\text{PAM}PAM然后统 ...
- 计算机科学中具有特殊含义或易误解混淆的术语辨析
计算机科学中具有特殊含义或易误解混淆的术语辨析 这是我以前收集整理的文档,参考了一些网上的公开资料.这次发到这里,是因为可以随时修改.不足之处,敬请指正,以便修正. 计算机科学中有些术语不具一致性,容 ...
- 2019.03.01 bzoj2555: SubString(sam+lct)
传送门 题意简述: 要求在线支持两个操作 (1):在当前字符串的后面插入一个字符串 (2):询问字符串s在当前字符串中出现了几次?(作为连续子串) 思路: 考虑用lctlctlct来动态维护samsa ...
- vsftp pam mysql_VSFTP+MySQL+PAM
Vsftp+MySQL+pam配置手册 一.安装所需软件包 apt-get install vsftpd mysql-server mysql-client libpam-mysql libpam-m ...
最新文章
- 用英语优雅地表达愤怒
- WIN-8“内置管理员无法激活此应用”问题
- 计算机应用属不属于科技股,哪些股票属于科技股
- python 廖雪峰数据分析统计服_廖雪峰Python总结1
- 计算机网络基础专业找工作,2021计算机网络技术前景怎么样? 好找工作吗
- git批量删除文件和批量提交
- 启动chrome_Chrome开启多线程下载的方法
- 转:LoadRunner检查点使用小结
- hg255d php,hg255d强刷华硕rt-n13u官方固件果断中继成功
- swift PickerView
- 三角波的傅里叶变换对_傅里叶变换(二) 从傅里叶级数到傅里叶变换
- 去掉磁盘写保护小技巧
- app开发都有哪些基本的开发语言选择?
- Java实现家谱家族管理系统,图形化家谱家族树,单机应用程序
- python基础代码技巧_5行Python代码实现批量打水印技巧,值得收藏|python基础教程|python入门|python教程...
- 《用递归法解决问题》教学设计
- 太极自定义diy名片模板_没有合适的手帐本?拿走这些电子模板,自制属于自己的手帐本...
- PXE-E61: Media test failure, check cable PXE-M0F: Exiting Intel Boot Agent. 解决方法
- 贪吃蛇大作战中的“马太效应”
- 工作太闲闹心怎么办啊