【学习笔记】后缀自动机

因为一个字符串的任意字串都能表示成它的某个后缀的前缀,而且从 O出发到任意节点的路径都是从 O点到某个结束节点路径的一部分。也就是说任意从 O出发的路径都表示原字符串的后缀的一个前缀, 即原字符串的子串。
举例
一个字符串的子串[l,r]的Endpos就是它每次在字符串中出现时的末尾字符位置的集合。
Endpos等价类的概念,所有满足\(Endpos_i\)相等的字符串i组成一个Endpos的等价类。
两个Endpos只有一个包含另一个和交集为空两种关系。
等价类中的子串长度是连续的区间,且不存在长度相等的两个字符串。这就是说,一个等价类的每个字符串都是比它短1的字符串前面加一个字符得到的。
当在一个等价类最长的字符串a前面加一个字符,如果得到了一个原字符串的子串b,那么\(Endpos_b\)一定是\(Endpos_a\)的子集,b成为新的等价类的最短的字符串。
所有b所在的等价类都是\(Endpos_a\)的真子集。
后缀链接(Link):从某一个所在的等价类最短字符串a只想等价类最长字符串
SAM的状态个数等价于endpos相同的一个或多个子串所组成的集合的个数+1。

posted @ 2023-03-17 13:51  Agakiss  阅读(12)  评论(0编辑  收藏  举报